# 一、进制
我们常用的算术进制是十进制的,所以类推一下就可以得到其他进制的计数规律。值得注意的是在十六进制中我们使用 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 位 |
---|---|---|
EAX | AX | AL |
ECX | CX | CL |
EDX | DX | DL |
EBX | BX | BL |
ESP | SP | AH |
EBP | BP | CH |
ESI | SI | DH |
EDI | DI | BH |
# 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:段内存(暂时不理解)。