《汇编语言》阅读总结

首页 / 逆向 / 正文

获取中...

关于对《汇编语言》第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号中断

打赏
评论区
头像