关键词不能为空

当前您在: 主页 > 英语 >

汇编语言常用指令大全

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-01-30 00:20
tags:

-

2021年1月30日发(作者:start是什么意思)



MOV



指令为双操 作数指令


,


两个操作数中必须有一个是


寄存器


.




MOV DST , SRC // Byte / Word




执行操作


: dst = src




1.


目的数可以是通用寄存器


,


存储单元


和段寄存器


(

但不允许用


CS


段寄存器


).




2.


立即数不能直接送段寄存器





3.


不允 许在两个存储单元直接传送数据





4.


不允许在两个段寄存器间直接传送信息




PUSH



入栈指令及


POP


出栈指令


:


堆栈


操作是以



后进先出



的方式进行数据操作


.




PUSH SRC //Word




入栈的操作数除不允许用立即数外,可以为通用寄存器,段寄 存器


(


全部


)


和存储器


.




入栈时高位字节先入栈,低位字节后入栈


.




POP DST //Word




出栈操作数除不允许用立即数和< /p>


CS


段寄存器外


,

可以为通用寄存器


,


段寄存器和存储



.




执行


POP SS


指令后


,


堆栈区在存储区的位置要改变


.




执行


POP SP


指令后

< p>
,


栈顶的位置要改变


.




XCHG


(eXCHanG)


交换指令


:


将两操作数值交换


.




XCHG OPR1, OPR2 //Byte/Word




执行操作


: Tmp=OPR1 OPR1=OPR2 OPR2=Tmp




1.


必须有一个操作数是在寄存器中





2.


不能与段寄存器交换数据





3.


存储 器与存储器之间不能交换数据


.




XLAT


(TRANSLATE)


换码 指令


:


把一种


代码

< br>转换为另一种代码


.




XLAT (OPR


可选


) //Byte




执行操作


: AL=(BX+AL)




指令执行时只使用预先已存入


BX< /p>


中的表格首地址


,


执行后


,AL


中内容则是所要转换的代


.




LEA


(Load Effective Address)


有效地址传送寄存器指令





LEA REG , SRC //


指令把源操作数


SRC


的有效地址送到指定的寄存器中


.




执行操作


: REG = EAsrc





: S RC


只能是各种寻址方式的存储器操作数


,REG


只能是


16


位寄存器





MOV BX , OFFSET OPER_ONE


等价于



LEA BX , OPER_ONE




MOV SP , [BX] //



BX


间接寻址的相继的二个存储单元的内容送入


SP

< p>





LEA SP , [BX] //



BX


的内容作为存储器有效地址送入


SP






LDS


(Load DS with pointer)


指针


送寄存器和


DS


指令





LDS REG , SRC //


常指定

SI


寄存器。





执行操作


: REG=(SRC), DS=(SRC+2) //



SRC


指出的前二个存储单元的内容送入指


令中指定的寄存器中,后二个存储单元送入


DS


段寄存器中。







LES


(Load ES with pointer) < /p>


指针送寄存器和


ES


指令





LES REG , SRC //


常指定


DI


寄存器





执行操作


: REG=(SRC) , ES=(SRC+2) //



LDS


大致相同


,


不同之处是将


ES


代替


DS


而已


.




LAHF


( Load AH with Flags )


标志位送


AH

指令





LAHF //



PSW


寄存器中的低


8


位的状态标志


(


条件码


)


送入

AH


的相应位


, SF



D7



,


ZF



D6



..... .




执行操作


: AH=PSW


的低位字节。





SAHF


( Store AH into Flags ) AH


送标志寄存器指令





SAHF //

< br>将


AH


寄存器的相应位送到


PS W


寄存器的低


8


位的相应位

< p>
, AH



D7


位送


SF,


D6


位送


ZF......




执行操作


: PSW


的低位字节


=AH






PUSHF


( PUSH the Flags)


标志进栈指令





PUSHF //


将标志寄存器的值压入堆栈顶部


,


同时栈指针


SP


值减


2




执行操作


: SP=SP-1,(SP)=PSW


的高


8



, SP=SP-1, (SP)=PSW


的低


8

< br>位





POPF


( POP the Flags )


标志出栈指令





POPF //


< br>PUSHF


相反


,


从堆栈的顶 部弹出两个字节送到


PSW


寄存器中


,


同时堆栈指


针值加


2




执行操作


: PSW



8



=(SP), SP=SP+1, PSW



8



=(SP) , SP=SP+1




输入输出指 令


(


IN,OUT


)

< br>:只限于使用累加器


AX



AL


与外部设备的端口传送信息


.




IN (INput)


输入指令:信 息从


I/O


通过累加器传送到


CPU




IN AL , PORT //


直接的字节输入


,PORT


是外设端口 编号


(


即端口地址


),


只能取



00H ~


0FF H



256


个端口地址


.




IN AX , PORT //


直接的字输入


,AX


存 储连续两个端口地址


PORT+1,PORT




IN AL , DX //


间接的 字节输入


,


端口地址范围可通过


DX< /p>


设置为


0000H ~ 0FFFFH



65536


个端口地址





IN AX , DX //


间接的字输入





OUT( OUTput)


输出指令



:信息从< /p>


CPU


通过累加器传送到


I/O




OUT PORT , AL / /


直接的字节输出


,PORT


规定与< /p>


IN


指令相同


.




OUT PORT , AX




OUT DX , AL //


间接的字节输出





OUT DX , AX




MOV AL,05H OUT 27H, AL //


将字节


05H


传送到地址

< br>27H


的端口





ADD


(ADD)

< br>加法指令





ADD DST , SRC //Byte/Word




执行操作


: dst=dst+src




1.< /p>


两个存储器操作数不能通过


ADD


指令直 接相加


,



DST



SRC


必须有一个是通用


寄 存器操作数


.






2.


段寄存器不能作为


SRC



DST.




3.


影响标志位


Auxiliary Crray Flag ,Carry Flag, Overflow Flag, Parity Flag, Sign Flag



Zero Flag ,


如下所示:





CF


根据最高有效位是否有进


(



)


位设置的: 有进


(



)


位 时


CF=1,


无进


(



)


位时


CF=0.




OF


根 据操作数的符号及其变化来设置的:若两个操作数的符号相同


,


而结果的符号与


之相反时


OF=1,


否则为


0.




ZF


根据结果来设置:不等于


0



ZF=0,


等于


0



ZF=1




SF


根据结果的最高位来设置:最高位为


0,



SF=0.




AF


根据相加时

< br>D3


是否向


D4



(



)


位来设置:


有进


(



)

< p>
位时


AF=1,


无进


(



)


位时


AF =0




PF

根据结果的


1


的个数时否为奇数来设置:

< br>1


的个数为奇数时


PF=0,


为偶数时


PF=1




ADC


( ADd with Carry)


带进位加法指令





ADC DST , SRC //Byte/Word




执行操作


: dst=dst+src+CF //

< p>


ADD


不同之处是还要加上进位标志位的值


.




INC


( INCrement)



1


指令





INC OPR //Byte/Word




执行操作


: OPR=OPR+1





可以是寄存器和存储器操作数


,


但不能是立即数和段寄存器





2.


影响标志位

OF,SF,ZF,PF



AF,


不影响


CF.




SUB


( SUBtract )


不带借位的减法指令





SUB DST , SRC //Byte/Word




执行操作:


dst=dst - src






SRC


寻址方式及规定与


ADD


相同


.




2.


影响全部标志位


.(


判 断标志位参见


ADD)




SBB


( SuBtract with Borrow)


带借位减法指令





SBB DST , SRC //Byte/Word




执行操作:


dst= dst - src - CF




DEC


( DECrement )



1


指令





DEC OPR //Byte/Word




执行操作:


OPR = OPR - 1 //



CF


标志位


,


其余标志位都受影响


.




NEG


( NEGate )


求补指令





NEG OPR




执行操作:


opr = 0- opr //


将操作数按位求反后末位加


1.




CMP


( CoMPare )


比较指令





CMP OPR1 , OPR2




执行操作:


OPR1 - OPR2 //


SUB


指令一样执行运算


,


但不保存结果


.




比较情况



无符号数



有符号数





A=B ZF=1 ZF=1




A>B CF=0 && ZF=0 SF^OF=0 && ZF=0






A




A>=B CF=0 || ZF=1 SF^OF=0 || ZF=1




A<=B CF=1 || ZF=1 SF^OF=1 || ZF=1




MUL


( unsigned MULtiple )


无符号数乘法指令





MUL SRC //Byte/Word .




执行操作:


Byte => AX= AL *src //


字节运算时目的操作数用


AL,


乘积放在


AX






Word => DX=AX *src //


字运算时目的操作数用


AX, DX


存放乘积的高位字


, AX


放乘积


的低位字





1.


目的数必须是累加器



AX



AL,


指令中不需写出





2.


源操作数


SRC


可以是通用寄存器和各种寻址方式的存储器操作数


,


而绝对不允许是


立即数或段寄存器


.




IMUL


(sIgned MULtiple)


有符号数乘法指令





IMUL SRC //



MUL


指令相同


,< /p>


但必须是带符号数





DIV


( unsigned DIVide)


无符号数除法指令





DIV SRC //Byte/Word


其中


: SRC


的规定同乘法指令


MUL




执行操作:


Byte => AX / src //


字节运算时目的操作数在


AX



,


结果的商在


AL




,


余数

< p>


AH






Word=> DX,AX /src //


字运算时目的操作数在


DX

高位字和


AX


低位字中


,


结果的商在


AX



< /p>


,


余数在


DX






存储器操作数必须指明数据类型:


BYTE PTR src




WORD PTR src




IDIV


(sIgned DIVied)


有符号数除法指令





IDIV SRC //Byte/Word



DIV


指令相同


,


但必须是带符号数





CBW


(Convert Byte to Word)


字节转换为字指令





CBW




执行操作


: AL

< br>中的符号位


(D7)


扩展到


8< /p>



AH



,



AL


中的


D7= 0


,则


AH=00H,



AL


中的


D7=1,



AH=FFH.




CWD


(Convert Word to Double word)


字转换为双字指令





CWD




执行操作


: AX


中的符号位


(D15)


扩展到


16



DX



,



AX


中的


D15=0

< br>,



DX=0000H,



AX


中的


D15=1,


DX=FFFFH




十进制调整指令





当计算机进行计算时


,


必须先把十进制数转换为


二进制数


,


再进行二进制数运算


,


最后将


结果又转换为十进制数输出


.



< /p>


在计算机中


,


可用


4


位二进制数表示一位十进制数


,


这 种代码称为


BCD ( Binary Coded


Decimal ).




BCD


码又称


8421



,



PC


机 中


,BCD


码可用压缩的


BCD


码和非压缩的


BCD


码两种

< br>格式表示


.






压缩的


B CD


码用


4


位二进制数表示一个十制数


,


整个十进数形式为一个顺序的以


4< /p>


位为


一组的数串


.




非压缩的


BCD


码以


8


位为一组表示一个十进制 数


,8


位中的低


4

位表示


8421



BCD



,


而高


4

< p>
位则没有意义


.



< /p>


压缩的


BCD


码调整指令





DAA


(Decimal Adjust for Addition)


加法的十进制调整指令





DAA




执行操作


:


执行之前必须先执行


ADD



ADC< /p>


指令


,


加法指令必须把两个压缩的


BCD



相加


,


并把结果存话在


AL


寄存器中


.




DAS


(Decimal Adjust for Subtraction)


减法的十进制调整指令





DAS




执行操作


:


执行之前必须先执行


SUB



SBB< /p>


指令


,


减法指令必须把两个压缩的


BCD



相减


,


并氢结果存放在


AL


寄存器中


.




非压缩的


BCD


码调整指令





AAA


(ASCII Adjust for Addition)


加法的


ASCI I


调整指令





AAA




执行操作


:


执行之前必须先执行


ADD



ADC


指令


,


加法指令必须把两个非压缩的


BCD


码相加


,


并把结果存话在


AL


寄存器中


.




AAS


(ASCII Adjust for Subtraction)


减法的


A SCII


调整指令





AAS




执行操作


:


执行之前必须先执行


SUB



SBB


指令


,


减法指令必须把两个非压缩的


BCD


码相减


,


并氢结果存放在


AL


寄存器中


.




MOVS


( MOVe String)


串传送指令





MOVB //


字节串传送



DF=0, SI = SI + 1 , DI = DI + 1



DF = 1 , SI = SI - 1 , DI = DI - 1




MOVW //


字串传送



DF=0, SI = SI + 2 , DI = DI + 2



DF = 1 , SI = SI - 2 , DI = DI - 2




执行操作:


[DI] = [SI] ,


将位于


DS


段的由

< br>SI


所指出的存储单元的字节或字传送到位于


ES


段的由


DI


所指出的存储单元


,


再修改


SI


< p>
DI,


从而指向下一个元素


.




在执行该指令之前


,


必须预置


SI


< p>
DI


的初值


,



STD



CLD


设置< /p>


DF



.




MOVS DST , SRC //


同上


,


不常用


,DST



SRC


只是用来用类型检查


,


并不允许使用其它


寻址方式来确定操作数

< br>.




1.

< br>目的串必须在附加段中


,


即必须是


ES:[DI]




2.


源串允许使用段跨越前缀来修饰


,


但偏移地址必 须是


[SI].




STOS


(STOre into String)


存入串指令





STOS DST




STOSB //


存放字节串



( DI ) = AL




STOSW //


存放字串



( DI ) = AX




执行品作:



AL



AX


中的内容存放由


DI


指定的附加段的字节或字单元中< /p>


,


并根据


DF


值 修改及数据类型修改


DI


的内容


.


-


-


-


-


-


-


-


-



本文更新与2021-01-30 00:20,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/588128.html

汇编语言常用指令大全的相关文章