第 2 章 数据⚓︎
约 871 个字 预计阅读时间 4 分钟
数制⚓︎
注
关于二进制、八进制、十进制和十六进制的表示与转换就不再赘述了,这里就讲一下与汇编语言相关的内容。
汇编语言下各种进制的表示:
- 二进制:用 B 或 b 作为后缀
- 八进制:用 Q 或 q 作为后缀
- 十进制:无需后缀
- 十六进制:用 H 或 h 作为后缀,若最高位是字母还需加前缀 0
注意
- 前后缀不会存储在寄存器内
- 为了表示方便,对于较长的数字,本笔记采用“每四位空一格”的方法表示数字,但在汇编语言中数字之间不得有空格
数据组织⚓︎
- 位 (bit):存储计算机数据的最小单位
- 字节 (byte):
- 存储计算机数据的基本单位
- 可以表示 \([0, 255]\)(\([00h, 0FFh]\))范围内的无符号数,或者 \([-128, 127]\)(\([80h, 7Fh]\))范围内的符号数,或者 ASCII 码
- 汇编语言中用关键词
db
定义字节类型的变量或数组 - 相当于 C 语言中的
char
或unsigned char
- 字 (word):
- 1 字 = 2 字节 = 16 位
- 低 8 位称为低字节,高 8 位称为高字节
- 可以表示
- \([0, 65535]\)(\([0000h, 0FFFFh]\))范围内的无符号数
- \([-32768, 32767]\)(\([8000h, 7FFFh]\))范围内的符号数
- 16 位的段地址或 16 位的偏移地址
- 关键词:
dw
- 相当于 C 语言中的
short int
或unsigned short int
- 双字 (double word,简称 dword):
- 1 双字 = 2 字 = 4 字节 = 32 位
- 0-15 位称为低字,16-31 位称为高字,0-7 位称为低字节,24-31 位称为高字节
- 可以表示
- \([0, 4294967295]\)(\([0000h, 0FFFFFFFFh]\))范围内的无符号数
- \([-2147483648, 2147483647]\)(\([80000000h, 7FFFFFFFh]\))范围内的符号数
float
类型的小数
- 关键词:
dd
- 相当于 C 语言中的
long int
或unsigned long int
-
四字 (quadruple word,简称 qword):
- 1 四字 = 4 字 = 8 字节 = 64 位
- 可以表示
- \([0, 0FFFFFFFFFFFFFFFFh]\)(\([0, 2^{64}-1]\))范围内的无符号数
- \([8000000000000000h, 7FFFFFFFFFFFFFFFh]\)(\([-2^{63}, 2^{63}-1]\))范围内的符号数
double
类型的小数
- 关键词:
dq
- 相当于 C 语言中的
long long
或double
注:旧版 VC 中不支持
long long
,可以用__int64
替代
-
十字节 (ten byte,简称 tbyte):
- 字面意思,宽度为 10 字节,即 80 位
- 可存放 80 位小数
- 关键词:
dt
零扩充与符号扩充⚓︎
汇编语言中绝大多数双操作数指令都要求两个操作数等宽,否则编译时会报错
- 无符号数的扩充称为零扩充:往左侧补 0
- 符号数的扩充称为符号扩充:正数左侧补 0,负数左侧补 1
运算⚓︎
算术运算⚓︎
指令 | 含义 | 用法 |
---|---|---|
add |
加法 | add ax, bx |
sub |
减法 | sub ax, bx |
mul |
无符号数乘法 | mul bx |
imul |
符号数乘法 | imul bx |
div |
无符号数除法 | div bx |
idiv |
符号数除法 | idiv bx |
fadd |
浮点数加法 | fadd st(0), st(1) |
fsub |
浮点数减法 | fsub st(0), st(1) |
fmul |
浮点数乘法 | fmul st(0), st(1) |
fdiv |
浮点数除法 | fdiv st(0), st(1) |
逻辑运算和移位运算⚓︎
指令 | 含义 | 用法 | C 语言等价运算符 |
---|---|---|---|
and |
与 | and ax, bx |
& |
or |
或 | or ax, bx |
\| |
xor |
异或 | xor ax, bx |
^ |
not |
非 | not ax |
~ |
shl |
逻辑左移 | shl ax, 1 |
<< |
shr |
逻辑右移 | shr ax, 1 |
>> |
sal |
算术左移 | sal ax, 1 |
<< |
sar |
算术右移 | sar ax, 1 |
>> |
rol |
循环左移 | rol ax, 1 |
无 |
ror |
循环右移 | ror ax, 1 |
无 |
rcl |
带进位循环左移 | rcl ax, 1 |
无 |
rcr |
带进位循环右移 | rcr ax, 1 |
无 |
评论区
如果大家有什么问题或想法,欢迎在下方留言~