mov指令
mov 寄存器,数据
mov 寄存器,寄存器
mov 寄存器,内存单元
mov 内存单元,寄存器
mov 段寄存器,寄存器
mov 寄存器,段寄存器
mov 内存单元,段寄存器
mov 段寄存器,内存单元
add指令(加法)
add 寄存器,数据
add 寄存器,寄存器
add 寄存器,内存单元
add 内存单元,寄存器
sub指令(减法)
sub 寄存器,数据
sub 寄存器,寄存器
sub 寄存器,内存单元
sub 内存单元,寄存器
mul乘法指令
相乘的数为8位或16位
如果是8位,就放在 al 和 8位reg或内存字节单元中,结果放在ax中
如果是16位,就放在 ax 和 16位reg或内存字单元中,结果高位在dx中,低位在ax中。
格式:
mul reg/内存单元
div除法指令
除数:8位或16位,放在reg或内存单元中。
被除数:除数8位则被除数16位,在ax中存放。除数16位则被除数32位,在ax和dx中存放,dx存放高16位,ax存放低16位。
结果:除数为8位,al存商,ah存余数。除数16位,ax存商,dx存余数。
格式:
div 除数
and 指令
or指令
push指令
push 寄存器
push 段寄存器
push 内存单元
pop指令
pop 寄存器
pop段寄存器
pop内存单元
loop指令
loop:是循环的意思
loop的循环次数取决与cx的值,每循环一次cx的值减一,直到减到零为止。
在debug中用p命令可以快速完成循环
loop程序
assume cs:code
code segment
mov cx,11
mov ax,2
s: add ax,ax
loop s
mov ax,4c00h
int 21h
code ends
end
jmp指令
mov ax,123可以改变ax的值,同理可以改变bx,cx,dx的值,但是mov不可以改变CS、IP的值,因此用jmp命令改变CS、IP的值。
jmp 段地址:偏移地址
例一:
jmp 2AE3:3 ;执行后:CS=2AE3H,IP=0003H
例二:
;指令执行前:ax=1000H,CS=2000H,IP=0003H
jmp ax
;指令执行后:ax=1000H,CS=2000H,IP=1000H
段内近转移:-32768~32767
jmp near ptr 标号
段间转移,远转移
jmp far ptr 标号
目的地址在寄存器中
jmp reg
目的地址在数据中
jmp word ptr ;数据地址(只取一个字,改变ip)
jmp dword ptr ;数据地址(取两个字,高地址是cs,低地址是ip)
jcxz指令
有条件的转移指令,属于段内短转移
格式:
jcxz 标号
在cx是0的前提条件下才会执行这条指令
call指令
目的地址在指令中
段内近转移
格式:
call 标号
效果:
push ip
jmp near ptr 标号
段间转移
格式:
call far ptr 标号
效果:
push cs
push ip
jmp far ptr 标号
目的地址在寄存器中
格式:
call 16位reg
效果:
push ip
jmp 16位reg
目的地址在内存中
格式:
call word ptr 内存单元地址
效果:
push ip
jmp word ptr 内存单元地址
格式:
call dword ptr 内存单元地址
效果:
push cs
push ip
格式:
jmp dword ptr 内存单元地址
ret指令
作用:修改ip的内容,实现近转移
格式:
ret
效果:
pop ip
retf指令
作用:修改cs 和 ip 的内容,实现段转移
格式:
retf
效果:
pop ip
pop cs
adc指令
带进位加法指令,利用cf位。
格式:
adc 操作对象1,操作对象2
功能:操作对象1=操作对象1+操作对象2+cf
sbb指令
带借位减法指令,利用cf位
格式:
sbb 操作对象1,操作对象2
功能:操作对象1=操作对象1-操作对象2-cf
cmp指令
比较指令
格式:
cmp 操作对象1,操作对象2
功能:计算操作对象1-操作对象2 不保存结果
通过标志来判断比较结果
条件转移指令
格式:指令 标号
指令 | 条件 |
---|---|
je | zf=1 |
jne | zf=0 |
jb | cf=1 |
jnb | cf=0 |
ja | cf=0 且 zf=0 |
jna | cf=1 或 zf=1 |
串传送指令
movsb
传送字节
格式:
movsb
功能:将ds:si指向的内存单元的字节送入es:di中,然后根据df的值,将si di递增或递减。
movsw
传送字
格式:
movsw
功能:将ds:si指向的内存单元的字节送入es:di中,然后根据df的值,将si di递增2或递减2。
rep指令
循环指令
格式:
rep ...
功能:循环执行后面的指令,循环次数取决于cx
cld指令
使df=0
格式:
cld
std指令
使df=1
格式:
std
pushf指令
将标志存储器数据压栈。
格式:
pushf
popf指令
将栈中数据存入标志存储器。
格式:
popf
端口读写指令
in指令
从端口读入数据
格式:
in al,60h ;从60h端口读入一个字节。
out指令
向端口写入数据
格式:
out al,60h ;向60h端口写入一个字节。
在in和out指令中只能用ax和al从端口读入或向端口写入数据。
对0~255以内的端口读写时,直接写端口
对256~65535的端口进行读写时,端口放在dx中
CMOS RAM:自带电源,记录时间。
shl指令
shl 是逻辑左移指令
将寄存器或内存单元中的数据向左移位
将最后移出的一位写入CF中
最低位用0补充
左移位数大于1则将移动位数存在cl中
shr指令
shr 是逻辑右移指令,他和shl作用相反