关于对《汇编语言》第3版 作者:王爽的阅读总结
段地址*16H+偏移地址= 物理地址
寄存器:AX,BX,CX,DX,SI,DI,CS,SS,DS,ES,IP,SP,PSW
AX,BX,CX,DX,可用8位寄存器表示,比如AH,AL
CS:代码段寄存器
IP:指令指针寄存器
CS+IP 为指令指向的实际地址
DS:数据段地址
Ds:[0] 表示传送ds为段地址,0偏移的内存地址
SS:栈段寄存器
SP:栈偏移地址
SS:IP 表示为栈顶地址
Loop:循环
循环次数在cx中,每次循环自动 cx = cx-1
Bx=10 那么[bx] 与 [10] 意义相同
And 逻辑与
OR 逻辑或
都是按位运算
[bx+常数] : bx=10 ,[bx+3] 与 [10+3] 意义相同
SI,DI,Bp寄存器与BX类似
[bx+si+常数],[bx+di+常数]
DIV 除法
MUL 乘法
要注意除法、乘法的除数与被除数、商存放的寄存器位置
db,dw,dd 用来定义字节、字、双字 数据
Dup 操作符:
Db 3 dup(0,1,2)
相当于db 0,1,2,0,1,2,0,1,2
db 重复次数 dup(重复的字节数据)
dw 重复次数 dup(重复的字数据)
Offset 取标号偏移地址 逆向中不常用
Jmp 无条件转移指令
Jmp short 偏移地址 偏移地址为当前地址+偏移地址=实际地址
Jmp far ptr 地址 远转移 地址=实际地址
Jcxz 有条件转移 判断cx是否为0 则转移
ret相当于 pop IP
Retf 相当于 pop IP pop CS
Call 相当于
Push IP
Jmp near ptr 地址
标志寄存器 CF,PF,AF,ZF,SF,TF,IF,DF,OF
ZF 零标志寄存器 结果为0 zf=1 否则zf=0
PF 奇偶标志寄存器 结果所有的bit为1的个数为偶数 pf=1 否则为pf=0
SF 符号标志 结果为负数,SF=1,否则SF=0
CF 进位标志位 如果有进位或者借位 CF=1
OF 溢出标志
adc 带进位的加法指令
Sbb 带借位的减法指令
Cmp 比较指令
指令 | 含义 | 检测相关标志位 |
---|---|---|
Je | 等于则转移 | Zf=1 |
Jne | 不等于则转移 | Zf=0 |
Jb | 低于则转移 | Cf=1 |
Jnb | 不低于则转移 | Cf=0 |
Ja | 不低于则转移 | Cf=0且zf=0 |
Jna | 不高于则转移 | Cf=1或zf=1 |
DF 方向标志位,在串处理指令中,控制每次操作后的si,di 的增减
Df=0 每次操作后si、di 的递增
Df=1 每次操作后si、di的递减
Movsb 相当于
如果df=0
Inc si
Inc di
如果df=1
Dec si
Dec di
Movsw 相当于
如果df=0
Add si,2
Add di,2
如果df=1
Sub si,2
Sub di,2
一般过rep配合使用
Rep是根据cx的值,重复后面的串传送指令
Rep movsb相当于
S:movsb
Loop s
Pushf、popf 把标志寄存器压栈出栈
Int指令为中断指令 int n 为触发n号中断