正文描述:《80x86汇编语言程序设计 第二章④.8086 8088指令系统(一)数据传送指令》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、80X86汇编语言程序设计第二章8086/8088寻址方式和指令系统四.8086/8088指令系统8086/8088的指令系统可分为如下六个功能组:1.数据传送;2.算术运算;3.逻辑运算;4.串操作;5.程序控制;6.处理器控制.汇编语言中指令语句的一般格式。指令语句可由四部分组成,一般格式如下:【标号:】指令助记符【操作数1【,操作数2】】【;注释】(一)数据传送指令1.传送指令格式:MOVDST,SRC源操作数(SRC)可以是累加器(Al.AH).寄存器.存储单元以及立即数,而目的操作数(DST)可以是累加器.寄存器和存储单元,不能是立即数。传送不改变源操作数。数据传
2、送指令能实现下列传送功能:(1)CPU内部寄存器之间的数据传送。例如:MOVAH,ALMOVDL,DHMOVBP,SPMOVAX,CS注意:源操作数和目的操作数不能同时是段寄存器(CS.SS.DS.ES)代码段寄存器CS不能作为目的操作数,指令指针IP既不能作为源操作数,也不能作为目的操作数。注意,这种例外永远存在。(2)立即数送至通用寄存器或存储单元。例如:MOVAL,3MOVSI,-5MOVVARB,-1;VARB是变量名,代表一个存储单元MOVVARW,3456H;VARW是一个字变量MOV[SI],6543H注意:立即数不能直接传送到段寄存器。立即数永远不能作为目的
3、操作。(3)寄存器与存储器间的数据传送。例如:MOVAX,VARW;VARW是一个字变量,存储器操作为直接寻址。MOVAX,[0123]MOVBH,[DI];存储器操作数位寄存器间接寻址MOVDI,ES:[SI+3];存储器操作数为相对变址寻址,使用段超越前缀MOVVARB,DL;VARB是一个字节变量MOVDS:[BP],DL;使用段超越前缀MOVVARW,DS;VARW是一个字变量MOVES,VARW注意:源操作数和目的操作数类型要一致。即同时为字节或字,不能一个字节,另一个是字。除了串操作指令外,源操作数和目的操作数不能同时是存储器操作数。两个操作数必须有一个寄存器(
4、立即寻除外)。例如:把字变量VARW1的内容送到字变量VARW2MOVAX,VARW1MOVVARW2,AX这种利用通用寄存器过度的方法,也适用于段寄存器间的数据传送。例如:MOVAX,CSMOVDS,AX;把CS的内容送到DSMOVAL,'D'立即数(字符D的ASCII码44H)送到AL寄存器。MOVBX,OFFSETTABLE把TABLE的偏移地址(不是内容)送到BX寄存器,其中OFFSET为属性操作符。例如:BX=1234HBP=5678H要交换两个寄存器的内容。用MOV指令如下:MOVAX,BXMOVBX,BPMOVBP,AX利用交换指令可方便地实现通用寄存器与通用
5、寄存器或存储单元间的数据交换。2.交换指令格式:XCHGOPRD1,OPRD2此指令把操作数OPRD1的内容与操作数OPRD2的内容交换。操作数同时是字节或字。例如:XCHGAL,AHXCHGSL,BXOPRD1和OPRD2可以是通用寄存器和存储单元。但不包括段寄存器,也不能同时是存储单元,还不能有立即数,可采用各种存储器寻址方式来制定存储单元。例如:XCHGBX,[BP+SI]如指令执行前:(BX)=6F30H,(BP)=0200H,(SI)=0046H,(SS)=2F00H,(2F246)=4154H物理地址=SS*16+BP+SI=2F000+0200+0046=2F
6、246H指令执行后:(BX)=4154H(2F246H)=6F30H注意:使用BP的时候,段地址是SS堆栈段。3.地址传送指令(1)指令LEA(传送偏移地址)(LoadEffectiveAddress)格式:LEAREG,OPRD指令LEA称为传送有效地址指令。该指令把操作数OPRD的有效地址传送到操作数REG。操作数OPRD必须是一个存储器操作数,操作数REG必须是一个16位的通用寄存器。例如:LEAAX,BUFFER;BUFFER是变量名LEADS,[BS+S]LEASI,[BP+DI+4]LEABX,[BX+SI+0F62H]如指令执行前(BX)=0400H,(SI)
7、=003CH指令执行后(BX)=0400+003C+0F62=139EH(2)指令LDS(传送32位地址指针)(LoadpointerintoDS)格式:LDSREG,OPRD段值和段内偏移构成32位的地址指针。该指令传送32位地址指针。执行的操作:(REG)←(SRC)(DS)←(SRC+2)该指令把操作数OPRD中所含的一个32位地址指针的段值部分送到数据段寄存器DS,把偏移部分送到指令给出的通用寄存器REG。操作数OPRD必须是一个32位的存储器操作数,操作数REG可以是一个16位的通用寄存器,但实际使用的往
显示全部收起