数据宽度、逻辑运算与通用寄存器
一、数据宽度
数学中的数字可以无限大,但在计算机中,数据受硬件限制,都有长度限制。超出宽度的部分会被直接丢弃。
1. 4 位宽度表示:假设计算机只能存储4位2进制数
假设计算机只能存储 4 位二进制数,所有可能的值如下:
1 | 0000 0001 0010 0011 0100 0101 0110 0111 |
通过圆圈图理解有符号数和无符号数:
8
7
B
C
4
3
F
0
无符号数:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
有符号数:
正数:0,1,2,3,4,5,6,7
负数:-1,-2,-3,-4,-5,-6,-7,-8
F, E, D, C, B, A, 9, 8
计算机并不区分有无符号,它只存储二进制。如何解释这些二进制,是程序员自己的事。
2. 8 位宽度表示:假设计算机只能存储8位2进制数
80
7F
BF
C0
40
3F
FF
0
无符号数:0 ~ FF
有符号数:
正数:0 ~ 7F
负数:-1 ~ -128
FF, FE, FD, FC, ..., 80
3. 16位宽度表示:假设计算机只能存储16位2进制数
8000
7FFF
BFFF
C000
4000
3FFF
FFFF
0
无符号数:0 ~ FFFF
有符号数:
正数:0 ~ 7FFF
负数:-1 ~ -32768
FFFF, FFFE, ..., 8000
4. 32 位宽度表示:假设计算机只能存储32位2进制数
80000000
7FFFFFFF
BFFFFFFF
C0000000
40000000
3FFFFFFF
FFFFFFFF
0
无符号数:0 ~ FFFFFFFF
有符号数:
正数:0 ~ 7FFFFFFF
负数:-1 ~ -2147483648
FFFFFFFF, FFFFFFFE, ..., 80000000
5. 重要的计量单位
1 | BYTE 字节 8 bits |
二、逻辑运算
CPU 的本质是无数个开关的组合,所有运算最终都由基本的逻辑运算完成。
图
1. 或运算(OR)
规则:只要有一个 1,结果就为 1
汇编指令:OR
C 语言符号:|
1 | 1010 0011 |
2. 与运算(AND)
规则:两个都为 1,结果才为 1
汇编指令:AND
C 语言符号:&
1 | 1010 0011 |
3. 异或运算(XOR)
规则:不相同为 1,相同为 0
汇编指令:XOR
C 语言符号:^
1 | 1010 0011 |
4. 非运算(NOT)
规则:1 变 0,0 变 1
汇编指令:NOT
C 语言符号:!
1 | NOT 1010 0011 |
5. 逻辑运算的具体应用
(1) 计算机如何计算 2 + 3
计算机只能做逻辑运算和移位,2+3 的过程如下(假设 4 位宽度):
1 | X = 2 (0010) |
(2) 获取某个二进制位的值
如要测试 8F(1000 1111)的第 4 位(从右数,起始为 0):
1 | 1000 1111 |
(3) 最简单的加密:异或
加密:数据 XOR 密钥 = 密文
解密:密文 XOR 密钥 = 数据
示例:明文 2026,密钥 68
1 | 0010 0000 0010 0110 (2026) |
解密时再用 6868 异或一次,即得回 2026。
三、通用寄存器
1. 32 位通用寄存器表
| 寄存器 | 主要用途 | 编号 | 存储数据范围 |
|---|---|---|---|
| EAX | 累加器 | 0 | 0 - 0xFFFFFFFF |
| ECX | 计数 | 1 | 0 - 0xFFFFFFFF |
| EDX | I/O指针 | 2 | 0 - 0xFFFFFFFF |
| EBX | DS段的数据指针 | 3 | 0 - 0xFFFFFFFF |
| ESP | 堆栈指针 | 4 | 0 - 0xFFFFFFFF |
| EBP | SS段的数据指针 | 5 | 0 - 0xFFFFFFFF |
| ESI | 字符串操作的源指针;SS段的数据指针 | 6 | 0 - 0xFFFFFFFF |
| EDI | 字符串操作的目标指针;ES段的数据指针 | 7 | 0 - 0xFFFFFFFF |
记住顺序:EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI(编号 0~7)。这 8 个是 32 位通用寄存器,每个能存 4 字节。
2. MOV 指令
格式:MOV 目标操作数, 源操作数
功能:将源操作数的值复制到目标操作数中。
示例:
1 | MOV EAX, 0x1 ; 将 1 放入 EAX |
四、课后作业
- 八进制数2-5在计算机中的结果是:1 777 777 777 777 777 777 775 ,为什么?
- 使用异或对87AD6进行加密后再进行解密,解密密钥:5
- 只用逻辑运算计算2-3?(涉及内容:逻辑运算、移位、数据宽度)
- 按照顺序记住8个通用寄存器的名称
- 使用MOV指令修改8个寄存器的值,单步执行观察修改后的结果
数据宽度、逻辑运算与通用寄存器