寄存器:
CS:IP寄存器构成了代码地址 CS为代码段寄存器 IP为代码偏移寄存器
DS 为数据段寄存器
SS:SP构成栈地址 SS为栈段寄存器 SP为栈偏移寄存器,设置时应接连设置,因为ss传值和sp传值中间的语句不会引起中断
CX寄存器,通常用在loop循环中,记录循环次数
BX一般用作偏移地址寄存器
SI,DI寄存器功能类似于BX,不同点是不能拆分成两个八位寄存器,都用于定位内存地址
ZF 零标志位 PF 奇偶标志位 SF符号标志位 CF 无符号进位标志位 OF 有符号溢出标志位 DF 方向标志位,在串处理指令中,控制每次操作后,si/di递减或递增
TF 中断标志位,TF=1则引起单步中断,这实现了编译器的单步调试功能
IF 屏蔽中断标志位,IF=1则响应中断,IF=0则屏蔽中断
汇编指令
MOV 赋值指令 MOV 不能直接给段寄存器赋值,需要通用寄存器中转 通用寄存器 ax,bx,cx,dx等 mov的指令类型是通用数据传送,传送的是数据
lea 赋值语句 lea的指令类型是目的地址传送,传送的是地址
add 累加语句 add ax,bx 意思 ax = ax+bx
sub 减法语句 sub ax,bx 意思 ax = ax-bx
jmp 跳转语句 后面跟代码地址 CS:IP 只跟IP代表当前段
test 判等语句,常搭配后面使用
CMP 判等语句 仅影响标志位
cmp ax,bx,执行后
zf=1,说明(ax)=(bx)
zf=0,说明(ax)!=(bx)
cf=1,说明(ax)<(bx)
cf=0,说明(ax)>=(bx)
zf=0&&cf=0,说明(ax)>(bx)
zf=1&&cf=1,说明(ax)<=(bx)
条件跳转语句:执行时检测相应的标志寄存器,常搭配test或者cmp使用
je 相等则执行语句 对应 zf=1
jne 不相等则执行语句 对应 zf=0
jb 低于则执行 对应cf=1
jnb 不低于则执行 对应cf=0
ja 高于则执行 对应 zf=0&&cf=0
jna 不高于则执行 对应 zf=1&&cf=1
push pop 栈操作语句 只进行字操作
inc ax 自增,ax内容+1
loop 循环指令,通常,cx寄存器中存放循环次数,循环一次,cx寄存器值减1
and 按位与 or 按位或
div 除指令 除数为8或16位,存放在寄存器或者内存单元,被除数存储在ax或者 ax和dx中,除数为8为,则被除数为16位,存在ax中,al保存商,ah存余数,除数为16位,则被除数为32位,ax存商,dx存余数
jcxz 有条件转移指令 判断cx寄存器值等于0,则跳转
ret指令用栈中的数据,修改IP的内容,实现近转移 (IP)=((SS)*16+(SP)) (SP)=(SP)+2 转换成汇编语句 pop IP
retf指令用栈中的数据,修改CS和IP的内容,实现远转移 (IP)=((SS)*16+(SP)) (SP)=(SP)+2 (CS)=((SS)*16+(SP)) (SP)=(SP)+2 pop ip pop cs
call指令将ip或者cs和ip数据压入栈中,然后转移
call 标号 (sp)=(sp)-2 ((ss)*16+(sp))=(ip) (ip)=(ip)+16 对应汇编 push ip jmp near ptr 标号
call far ptr 标号 push cs push ip jmp far ptr 标号
call 寄存器 push ip jmp 寄存器值
call word ptr 内存单元地址 push ip jmp word ptr 内存单元地址
call dword ptr 内存单元地址 push cs push ip jmp dword ptr 内存单元地址
call + ret 指令实现了方法的调用
mul指令,乘法指令
两个8位相乘,则一个默认在AL中,另一个放在8位寄存器或者内存单元中,结果放在AX中
两个16位相乘,则一个默认在AX中,另一个放在16位寄存器或者内存单元中,结果高位在DX中,低位在AX中
adc 进位加法指令 adc a,b 表示 a+b+cf
sbb 带借位减法指令
movsb 串传送指令,传送字节 将ds:si指向的内存单元中的字节送入es:di中,此时df=0,则sidi递增,若df=1,sidi递减
movsw 串传送指令,传送字 将ds:si指向的内存单元中的字送入es:di中,此时df=0,则sidi递增+2,若df=1,sidi递减-2
rep 根据cx的值,重复执行串传送指令,常搭配movsb和movsw使用,rep movsb,代表s:movsb loops
cld 指令,将df位置为0
std 指令,将df位置为1
pushf 将标志寄存器的值压栈
popf 将标志寄存器的值弹出
iret 指令通常和硬件配合完成中断处理过程 中断过程 1.获取中断码N 2.pushf 3.TF=0 IF=0 4.push CS 5.push ip 6.(ip)=(N*4) (cs)=(2+N*4) iret过程:pop ip pop cs popf
int n指令,调用n号中断处理程序
shl逻辑左移指令,最后移除位写入cf,缺位补0
shr逻辑右移指令,最后移除位写入cf,缺位补0
端口指令
in in al,60h表示从60h端口处读入一个字节,对于0-255端口读写数据的时候,可以直接写数字,对于256-65535端口读写数据的时候,需要用dx寄存器转
out out 60h,al 表示向60h端口处写入一个字节的数据
补充:32位CPU增加
寄存器:
FS:Flag segment标志段寄存器
GS:Global segment全局段寄存器