mov:
例如:mov ax,18 将18送入寄存器AX
mov 指令有以下几种形式:
mov 寄存器,数据
mov 寄存器,寄存器
mov 寄存器,内存单元
mov 内存单元,寄存器
mov 段寄存器,寄存器
mov 寄存器,段寄存器
mov 内存单元,段寄存器
add:
例如:add ax,8 将寄存器AX中的值加上8
add 指令有以下几种形式:
add 寄存器,数据
add 寄存器,寄存器
add寄存器,内存单元
add内存单元,寄存器
sub:
例如:sub bx,2 将寄存器BX中的值减去2、
sub 指令有以下几种形式:
sub 寄存器,数据
sub寄存器,寄存器
sub寄存器,内存单元
sub内存单元,寄存器
push,pop 指令:
push 寄存器 将一个寄存器中的数据入栈
执行过程:
①SP=SP-2,SS:SP指向当前栈顶前面的单元,以当前栈顶前面的单元为新的栈顶。
②将寄存器中的内容送入SS:SP指向的内存单元处,SS:SP此时指向新的栈顶。
pop 寄存器 出栈,用一个寄存器接收出栈的数据
执行过程:
①将SS:SP指向的内存单元处的数据送入ax中。
②SP=SP+2,SS:SP指向当前栈顶下面的单元,以当前栈顶下面的单元为新的栈顶。
loop 指令:
格式:loop 标号
步骤:①(cx) = (cx) -1; ②判断cx中的值,不为零则转至标号处执行程序,如果为零则向下执行。
and 和or指令:
and指令:逻辑与指令,按位进行与运算。
例如:
mov al,01100011B
and al,00111011B
结果:al=00100011B
通过该指令可将操作对象的相应位设置为0,其他位不变。
or指令:逻辑或指令,按位进行或运算。
例如:
mov al,01100011B
or al,00111011B
结果:al=01111011B
通过该指令可以将操作对象的相应位设置为1,其他位不变。
div 指令:
格式:div reg
div 内存单元
说明:①除数:有8位和16位两种,在一个reg或内存单元中。(reg:除了ds,cs,ss,es之外的寄存器)
②被除数:默认放在AX或DX和AX中,如果除数为8位,被除数则为16位
,默认在AX中存放;如果除数为16位,被除数则为32位,在DX和AX中存放,DX存放高16位,AX存放低16位。
③结果:如果除数为8位,则AL存储除法操作的商,AH存储除法操作的余数;
如果除数为16位,则AX存储除法操作的商,DX存储除法操作的余数。
mul指令:
格式:mul reg
mul 内存单元
说明:①两个相乘的数:两个相乘的数,要么都是8位,要么都是16位。如果是8位,
一个默认放在AL中,另一个放在8位reg或内存字节单元中;如果是16位,一个默认 在AX中,另一个放在16位reg或内存字单元中。
②结果:如果是8位乘法,结果默认放在AX中;如果是16位乘法,结果高位默认在DX中存放,低位在AX中存放。
jmp指令:
jmp short 标号 (转到标号处执行指令,实现的短转移)
jmp near ptr 标号 (实现的是段内近转移)
jmp far ptr 标号 (实现的是段间转移)
jmp 16位reg ((IP)=(16位reg))
jmp word ptr 内存单元地址 (段内转移,从内存单元地址处开始存放着一个字,是转移的目的偏移地址)
jmp dword ptr 内存单元地址 (段间转移,从内存单元地址处开始存放着两个字,高地址处的字是转移的目的段地址,低地址处是转移的目的偏移地址)
jcxz指令:
格式:jcxz标号(如果(cx)=0,转移到标号处执行,短转移)
ret和retf指令:
ret指令用栈中的数据,修改IP的内容,从而实现近转移。
步骤:①(IP)=((SS)*16+(sp)) ②(sp)=(sp)+2
retf指令用栈中的数据,修改CS和IP的内容,从而实现远转移。
步骤: ①(IP)=((SS)*16+(SP)) ②(SP)=(SP)+2 ③(CS)=((SS)*16+(SP)) ④(SP)=(SP)+2
call指令:
步骤:①将当前的IP或CS和IP入栈; ②转移
格式:
call 标号(将当前IP压栈后,转到标号处执行指令,近转移)
相当于:①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 内存单元地址
adc指令:
带进位加法指令
格式:adc操作对象1,操作对象2(操作对象1=操作对象1+操作对象2+CF)
sbb指令:
带借位减法指令
格式:sbb操作对象1,操作对象2(操作对象1=操作对象1-操作对象2-CF)
cmp指令:
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,movsw和rep movsw指令:
格式:movsb
步骤:①((es)*16+(di))=((ds)*16+(si))
②如果df=0则: (si)=(si)+1 (di)=(di)+1
如果df=1则: (si)=(si)-1 (di)=(di)-1
格式:movsw (传送一个字)
rep movsw (根据cx的值,重复执行后面的传送语句)
cld和std指令:
cld指令:将标志寄存器的df位置0
std指令:将标志寄存器的df位置1
pushf和popf指令:
pushf将标志寄存器的值压栈,popf从栈中弹出数据,送入标志寄存器中。
iret指令:
步骤:①pop IP ②pop CS ③popf
int指令:
格式:int n(n为中断类型码,它的功能是引发中断过程)
步骤:①取中断类型码n;
②标志寄存器入栈,IF=0,TF=0;
③CS,IP入栈;
④(IP)=(n4), (CS)=(n4+2).
in和out指令:
in指令:从端口读取数据
格式:in al, 60h (从60h端口读取一个字节)
out指令:往端口写数据
格式:out 60h, al (往端口60h写入一个字节)
在in和out指令中,只能使用ax或al来存放从端口中读入的数据或要发送到端口中的 数据。访问8位端口时用al,访问16位端口时用ax。
shl和shr指令:
shr是逻辑左移指令。
功能:①将一个寄存器或内存单元中的数据向左移位;
②将最后移出的一位写入CF中;
③最低位用0补充。
(如果移动位数大于1时,必须将移动位数放在cl中)
shr是逻辑右移指令:
功能:①将一个寄存器或内存单元中的数据向右移位;
②将最后移出的一位写入CF中;
③最高位用0补充。
sti和clt指令:
sti:设置IF=1
cli:设置IF=0