汇编基础指令

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

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值