一.32位通用寄存器
EAX 累加和结果寄存器
ECX 循环计数器
EDX i/o指针
EBX 数据指针寄存器
ESP 栈顶指针寄存器
EBP 栈底指针寄存器
ESI 源地址寄存器
EDI 目标地址寄存器

二.标志寄存器

1.CF(Carry Flag):进位标志,若运算结果的最高位产生一个进位或借位那么其值为1,否则为0
2.PF(Parity Flag):奇偶标志,用于反映运算结果中1的个数,若个数为偶数则其值为1,否则为0
3.AF(Auxiliary Carry Flag):辅助进位标志,在发生下列情况时其值为1,否则为0
(1)字操作时,发生低字节向高字节进位或借位时
(2)字节操作时,发生低四位向高四位进位或借位时
4.ZF(Zero Flag):零标志,用于反映运算结果是否为0
5.SF(Sign Flag):符号标志,用于反映运算结果的符号位(有符号数运算),其与运算结果的最高位相同
6.OF(Overflow Flag):溢出标志,用于反映有符号数加减运算结果是否溢出,溢出置1,反之置0
7.CF与OF的区别:CF用于表示无符号数运算结果是否超出范围,OF用于表示有符号数运算结果是否超出范围
8.有符号数与无符号数运算结果是否超出范围判断方法

有符号数中结果溢出仅发生于:
正 + 正 与 负 + 负,
当正 + 正 = 负 或 负 + 负 = 正时说明发生溢出
在判断有符号数是否溢出时可利用上图以查数的形式进行判断,其值由大到小为:7F…40 3F…0 FF…C0 BF… 80,在位数大于8bit时在数后加上F与0即可;在无符号数判断中值大小为0…FF,因此当结果超过FF时说明溢出
三.常用汇编指令
1.ADC:(carry)带进位加法
例:ADC BYTE PTR DS:[12FFC4],2
解释:[12FFC4] += 2+CF
2.SBB:(borrow)带借位减法
例:SBB BYTE PIR DS:[12FFC4],2
解释:[12FFC4] -= 2+CF
3.XCHG:交换数据(不存在立即数)
例:XCHG DWORD PTR DS:[12FFC4],EAX
解释:交换[12FFC4]与EAX的值
4.MOVS:移动数据,
例1:MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]
简写:MOVSB
解释:从[ESI]中获取一个字节的数据放入[EDI]中
例2:MOVS WORD PTR ES:[EDI],WORD PTR DS:[ESI]
简写:MOVSW
运行后ESI与EDI的值都将发生改变,如例二中若DF(方向标志)值为0则EDI与ESI各加2,若DF值为1则各减2
5.STOS:将AL/AX/EAX的值存储到[EDI]指定的内存单元
例:STOS BYTE PTR ES:[EDI]
简写:STOSB
其中EDI的值也将在执行后发生改变,改变方式同上
6.REP:按计数寄存器(ECX)中指定的次数重复执行字符串指令
例:REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
解释:上述代码中REP后的部分将执行ECX次,且EDI,ESI的值在每一次执行时都会随DF的值进行改变,因此不会循环覆盖
四.JCC-条件跳转指令
Comment