考试要求:
只需关注 x86 汇编语言;若考察其他汇编语言题目会详细注释
题目给出某段简单程序的 C 语言、汇编语言、机器语言表示。能结合 C 语言看懂汇编语言关键语句(看懂常见指令、选择结构、循环结构、函数调用)
汇编语言、机器语言一一对应,要能结合汇编语言分析机器语言指令的格式、寻址方式
x86汇编语言指令基础:
操作码——常见指令:
算术运算
add d, s
sub d, s
mul d, s (无符号乘法)
imul d, s (有符号乘法)
div s (无符号除法,被除数在 edx:eax 中)
idiv s (有符号除法,被除数在 edx:eax 中)
neg d
inc d
dec d
逻辑运算
add d, s
or d, s
not d
xor d, s
shl d, s (将 d 逻辑左移 s 位)
shr d, s (将 d 逻辑右移 s 位)
其他
实现分支结构、循环结构的指令:cmp、test、jmp、jxxx
用于函数调用的指令:push、pop、call、ret
使用实现数据转移的指令:mov
地址码——数据存放位置
寄存器(32 bit)
在汇编指令中,给出寄存器名
寄存器种类:
通用寄存器(EAX、EBX、ECX、EDX)
变址寄存器(ESI、EDI)
堆栈寄存器(EBP、ESP)
AX、BX、CX、DX 表示 EAX、EBX、ECX、EDX 的低 16 位
AX(BX、CX、DX 同理)可以拆为 AH 和 AL,各占 8 bit
两个变址寄存器和两个堆栈寄存器只能固定使用 32 bit
主存——指明读写长度:
dword ptr [地址] —— 双字,32 bit
word ptr [地址] —— 单字,16 bit
byte ptr [地址] —— 字节,8 bit
若未指明读写长度,则默认 32 bit
指令
直接给出常量,可以用十进制表示,也可以用十六进制表示(常以 h 结尾)
汇编指令格式的对比:AT&T 格式 v.s. Intel 格式
AT&T 格式
Intel 格式
指令
只能用小写格式
对大小写不敏感
d,s
左,右
右,左
寄存器表示
%
立即数表示
$
读写长度表示
movb-byte、movw-word、movl-dword
dword ptr [地址]、word ptr [地址]、byte ptr [地址] —— 字节,8 bit