汇编语言的各条指令
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
常用命令
数据传送指令
一通用数据传送指令
MOV指令为双操作数指令,两个操作数中不能全为内存操作数
格式:MOV DST,SRC
执行操作:dst = src
注:1.目的数可以是通用寄存器,存储单元和段寄存器(但不允许用CS段寄存器).
2.立即数不能直接送段寄存器
3.不允许在两个存储单元直接传送数据
4.不允许在两个段寄存器间直接传送信息
PUSH入栈指令及POP出栈指令:
堆栈操作是以“后进先出”的方式进行数据操作。
格式:PUSH SRC //Word
执行操作:(SP)<-(SP)-2
((SP)+1,(SP))<-(SRC)
注:1.入栈的操作数除不允许用立即数外,可以为通用寄存器,段寄存器(全部)和存储器。
2.入栈时高位字节先入栈,低位字节后入栈。
格式:POP DST //Word
执行操作:(DST)<-((SP+1),(SP))
(SP)<-(SP)+2
注:1.出栈操作数除不允许用立即数和CS段寄存器外,可以为通用寄存器,段寄存器和存储器。
2.执行POP SS指令后,堆栈区在存储区的位置要改变。
3.执行POP SP 指令后,栈顶的位置要改变。
XCHG(eXCHanG)交换指令:
将两操作数值交换。
格式:XCHG OPR1,OPR2 //Byte/Word
执行的操作:(OPR1)<-->(OPR2)
注:1.必须有一个操作数是在寄存器中
2.不能与段寄存器交换数据
存储器与存储器之间不能交换数据。
二累加器专用传送指令
IN输入指令
长格式为:IN AL,PORT(字节)
IN AX,PORT(字)
执行的操作:(AL)<-(PORT)(字节)
(AX)<-(PORT+1,PORT)(字)
短格式为:IN AL,DX(字节)
IN AX,DX(字)
OUT输出指令
长格式为:OUT PORT,AL(字节)
OUT PORT,AX(字)
执行的操作:(PORT)<-(AL)(字节)
(PORT+1,PORT)<-(AX)(字)
短格式为:OUT DX,AL(字节)
OUT DX,AX(字)
执行的操作:((DX))<-(AL)(字节)
((DX)+1,(DX))<-AX(字)
XLAT(TRANSLATE)换码指令:
把一种代码转换为另一种代码。
格式:XLAT (OPR 可选) //Byte
执行操作:(AL)<-((BX)+(AL))
注:指令执行时只使用预先已存入BX中的表格首地址,执行后,AL中内容则是所要转换的代码。
三有效地址送寄存器指令
LEA(Load Effective Address) :
有效地址传送寄存器指令
格式:LEA REG,SRC //指令把源操作数SRC的有效地址送到指定的寄存器中。
执行操作:(REG)<-SRC
注:1. SRC只能是各种寻址方式的存储器操作数,REG只能是16位寄存器
2.MOV BX,OFFSET OPER_ONE 等价于LEA BX,OPER_ONE
3.MOV SP,[BX] //将BX间接寻址的相继的二个存储单元的内容送入SP中
4.LEA SP,[BX] //将BX的内容作为存储器有效地址送入SP中
LDS(Load DS with pointer):
指针送寄存器和DS指令
格式:LDS REG,SRC //常指定SI寄存器。
执行的操作:(REG)<-(SRC)
(DS)<-(SRC+2)
注:把源操作数指定的4个相继字节送到由指令指定的寄存器及DS寄存器中。该指令常指定SI寄存器。
LES(Load ES with pointer) 指针送寄存器和ES指令
格式:LES REG,SRC //常指定DI寄存器
执行的操作:(REG)<-(SRC)
(ES)<-(SRC+2)//与LDS大致相同,不同之处是将ES代替DS而已。
送到由指令指定的寄存器及ES寄存器
中。该指令常指定DI寄存器。
四标志寄存器传送指令
LAHF ( Load AH with Flags )
标志位送AH指令
格式:LAHF ......
执行操作:(AH)<-(PWS的低字节)
注:将PSW寄存器中的低8位的状态标志(条件码)送入AH的相应位,SF送D7位,ZF 送D6位
SAHF( Store AH into Flags )
AH送标志寄存器指令
格式:SAHF
执行操作: (PWS的低字节)<-(AH)
注:将AH寄存器的相应位送到PSW寄存器的低8位的相应位,AH的D7位送SF,D6位送ZF。
PUSHF( PUSH the Flags)
标志进栈指令
格式:PUSHF
执行操作:(SP)<-(SP)-2
SP=SP-1,(SP)=PSW的高8位,SP=SP-1,(SP)=PSW的低8位
注:将标志寄存器的值压入堆栈顶部,同时栈指针SP值减2
POPF( POP the Flags )
标志出栈指令
格式:POPF
执行操作:(PWS)<-((SP)+1,(SP))
(SP)<-(SP+2)
PSW低8位=(SP),SP=SP+1,PSW高8位=(SP),SP=SP+1
注:与PUSHF相反,从堆栈的顶部弹出两个字节送到PSW寄存器中,同时堆栈指针值加2
算术指令
一加法指令