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 不保存结果

通过标志来判断比较结果

1

条件转移指令

格式:指令 标号

指令 条件
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作用相反

❤️ 转载文章请注明出处,谢谢!❤️