# 一、进制

我们常用的算术进制是十进制的,所以类推一下就可以得到其他进制的计数规律。值得注意的是在十六进制中我们使用 ABCDEF 来代表 10、11、12、13、14、15,以便于我们使用。

(计数规律较为简单不再赘述)

# 二、逻辑运算

# 1、“与”“或”‘异或’

首先要明白布尔运算的运算法则,即 “与”“或”‘异或’三种基本运算。

与:同为 1 得 1

或:其中有 1 个为 1 得 1

异或:一个 1 一个 0 得 1

# 2、原码反码补码

1)原码:二进制中每个数的二进制码如:1:0001、-1:1001

2)反码:首位 1 不动,其余取反如:-1:1110

3)补码:反码加 1 如:-1:1111(注:只有负数有反码和补码的转换,正数的反码补码和原码一致)

# 3、加减乘除

首先设置一个机制,得到两个数 x y,两个数先 “异或” 再 “与”,若 “与” 结果为 0 则 “异或” 的结果即为答案,反之则将 “异或” 的答案设为 x,“与” 的答案左移一位设为 y 重复上述操作。这是进行两个数的加法的运算过程。

值得注意的是对负数进行运算时使用的是负数的补码,同时,运算减法时需将减数取负然后进行加法运算即可。而乘除则是加减的多次化运算。

# 三、寄存器

# 1、汇编指令

1)mov eax,0x1 即:将 1 赋予 eax 中,0x.... 代表 16 进制。

2)add eax,0x1 即:将 eax 与 1 相加,结果放到 eax 中。

3)sub eax,0x1 即:将 exa-1,结果放到 eax 中。

4)and eax,0x1 即:将 exa 与 1 “与” 运算,结果放到 eax 中。(转为 2 进制进行运算)

5)or eax,0x1 即:将 exa 与 1 “或” 运算,结果放到 eax 中。

6)xor eax,0x1 即:将 exa 与 1 “异或” 运算,结果放到 eax 中。

7)not eax 即: 对 exa 进行 “非” 运算,结果放到 eax 中。

不能内存到内存。

# 2、24 种通用寄存器

32 位16 位8 位
EAXAXAL
ECXCXCL
EDXDXDL
EBXBXBL
ESPSPAH
EBPBPCH
ESISIDH
EDIDIBH

在这里插入图片描述

# 3、寄存器与内存

1)32 位 64 位的计算机指的是寻址宽度,32 位:可以定义 32 个 0 和 1 组成的地址即 0 到 FFFFFFFF 共 4294967296 个地址,每个地址代表一个字节。(4G)

2)每个内存 8 位,用 [] 括起来表示。写入时 mov DWORD ptr ds:[0x12345678],123

即:123 写入 0x12345678 内,“DWORD” 为定义大小。(bit:1,word:2),ptr:point 表示后面是一个地址(指针),ds:段内存(暂时不理解)。