4.4 程序的机器级代码
4.4.1 x86汇编指令
一、指令格式
指令 目的操作数 源操作数
mov eax, ebx
将寄存器ebx的值复制到寄存器eax
mov eax, 5
将立即数5的值复制到寄存器eax
mov eax, dword ptr [af996h]
将内存地址[af996h]所指的32bit值复制到寄存器eax
mov byte ptr [af996h], 5
将立即数5的值复制到内存地址[af996h]所指的一字节中
指明内存读写的长度
dword ptr:双字,32bit
word ptr:单字,16bit
byte ptr:字节,8bit
主存没有指令长度默认32bit
二、常用寄存器
E:(Extended),32bit
通用寄存器(X:未知)
EAX:作为累加器
EBX:作为基地址寄存器
ECX:作为循环计数器
EDX:作为数据寄存器
通用寄存器可以继续细分为16bit和8bit的
变址寄存器(I:Index)
ESI:(Source)源操作数
EDI:(Destination)目的操作数
堆栈寄存器
EBP:(Base Pointer)堆栈基指针
ESP:(Stack Pointer)堆栈顶指针
三、AT&T格式
源操作数和目的操作数顺序与Intel格式相反
(……):主存地址,可以存在加减法
%:寄存器前缀
$:立即数前缀
读写长度
MOVB $5, (af996h):MOV byte ptr [af996h], 5
MOVW $5, (af996h):MOV word ptr [af996h], 5
MOVL $5, (af996h):MOV dword ptr [af996h], 5
MOV 8(%EDX, %EAX, 2):MOV [EDX+EAX*2+8]
偏移量为8
基址寄存器EDX
变址寄存器EAX
比例因子2
4.4.2 常用指令
一、算术运算
二、逻辑运算指令
三、控制流指令
4.4.3 具体实现
一、条件跳转
源代码
利用转移指令实现:
二、循环语句
源代码
使用转移指令实现
使用loop指令实现
最后更新于