DOS Windows汇编语言程序设计教程_课件 第二章_第1页
DOS Windows汇编语言程序设计教程_课件 第二章_第2页
DOS Windows汇编语言程序设计教程_课件 第二章_第3页
DOS Windows汇编语言程序设计教程_课件 第二章_第4页
DOS Windows汇编语言程序设计教程_课件 第二章_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2.2.1 数据传送类指令n把数据从一个位置传送到另一个位置n14条指令分5组1、通用数据传送: MOV XCHG XLAT2、堆栈操作: PUSH POP3、标志寄存器传送: LAHF SAHF PUSHF POPF4、地址传送: LEA LDS LES5、输入输出: IN OUT学习要求n数据传送是计算机中最基本、最重要的一种操作。传送指令也是最常使用的一类指令。n传送指令把数据从一个位置传送到另一个位置。n除标志寄存器传送指令外,均不影响标志位重点掌握: MOV PUSH POP特别熟悉: XCHG XLAT LEA一般了解: LAHF SAHF PUSHF POPF LDS LES以后

2、展开: IN OUT传送指令MOV(move)把一个字节或字的操作数从源地址传送至目的地址MOV reg/mem,imm;立即数送寄存器或主存:例MOV reg/mem/seg,reg;寄存器送(段)寄存器或主存:例MOV reg/seg,mem;主存送寄存器:例MOV reg/mem,seg;段寄存器送寄存器或主存:例传送指令不是万能的,有不少非法传送的情况。例子段寄存器:CS/DS/ES/SS通 用 寄存器:AX/BX/CX/DXAH/AL/BH/BL/CH/CL/DH/DL立即数 MEM例:立即数传送MOV AL,55HMOV AX,55AAHMOV CX,0F943HMOV BYTE

3、PTR BX,12H ;12hDS:BXMOV WORD PTR BX+SI,100h ;100hDS:BX+SI注意:立即数是字节(byte)还是字(word),也就是明确指令是字节操作还是字操作。进一步解释例:寄存器传送MOV AX,BXMOV AH,BL例:存储器传送MOV AX,BXMOV SI,ALMOV SS,2000HMOV ES:DI,CS注意:不存在存储器向存储器的传送指令进一步解释例:段寄存器传送MOV AX,CSMOV DS,AX注意:对段寄存器的操作有一些限制进一步解释非法传送种种n两个操作数的类型不一致例如源操作数是字节,而目的操作数是字;或相反n两个操作数不能都是存

4、储器传送指令很灵活,但主存之间的直接传送却不允许n段寄存器的操作有一些限制段寄存器属专用寄存器,对他们的操作能力有限实例实例实例两个操作数的类型要一致n绝大多数双操作数指令(包括传送指令),除非特别说明,目的操作数与源操作数必须类型一致,或者同为字,或者同为字节,否则为非法指令。MOV AL,050AH;非法指令:050Ah为字,而AL为字节n寄存器有明确的字节或字类型,有寄存器参与的指令其操作数类型就是寄存器的类型。n对于存储器单元与立即数同时作为操作数的情况,必须显式指明。nbyte ptr指示字节类型,word ptr指示字类型。两个操作数不能都是存储器8086指令系统不允许两个操作数都

5、是存储单元(除串操作指令),没有主存至主存的数据传送。要实现这种传送,可通过寄存器间接实现。例:buffer1单元的数据传送到buffer2单元mov ax,buffer1;axbuffer1(将buffer1内容送ax)mov buffer2,ax;buffer2ax;这里buffer1和buffer2是两个字变量;实际表示直接寻址方式段寄存器的操作有一些限制n不允许立即数传送给段寄存器MOV DS,100H ;非法指令:立即数不能传送段寄存器n不允许直接改变CS值MOV CS,SI ;不允许使用的指令n不允许段寄存器之间的直接数据传送MOV DS,ES;非法指令:不允许段寄存器间传送交换指

6、令XCHG(exchange)把两个地方的数据进行互换XCHG reg,reg/mem; regreg/mem交换指令可以在寄存器与寄存器之间对换数据交换指令可以在寄存器与存储器之间对换数据交换指令不能在存储器与存储器之间对换数据例例Why例:寄存器与寄存器数据交换MOV AX,1234HMOV BX,5678HXCHG AX,BX。操作该段程序执行完:AX=5678H,BX=1234H例:寄存器与存储器数据交换MOV BP,0200HMOV SI,0046HXCHG AX,BP+SI ;这里是BP,则对应的段寄存器为SS设SS=5000H,则存储单元的物理地址PA=SS*16+EA=5000

7、0H+0200H+0046H=50246H,指令执行前:AX=5621H,(50246H)=12H,(50247H)=34H指令执行后:AX=3412H,(50246H)=21H,(50247H)=56H换码指令XLAT(translate)将BX指定的缓冲区中、AL指定的位移处的一个字节数据取出赋给ALXLAT;alds:bx+al: 例n换码指令执行前:在主存中建立一个字节表格,内容是要转换成的目的代码,表格的首地址存放于BX,AL存放相对表格首地址的位移量n然后,执行换码指令:将AL寄存器的内容转换为目标代码隐含寻址方式例:代码转换n换码指令没有显式的操作数,但使用了BX和AL;因为换码

8、指令使用了隐含寻址方式。n隐含寻址方式采用默认操作数的寻址方式。 例.例:例:将09,AF的16 进制数转换为ASCII码并显示.MODEL SMALL.STACK.DATATABLE DB 0123456789ABCDEF ;09,AF的ASCII码.CODE.STARTUPMOV BX,OFFSET TABLEMOV AL,10XLAT ;AL=41H,为A的ASCII码MOV DL,ALMOV AH,02HINT 21H.EXIT 0END堆栈操作指令n堆栈的概念n堆栈的操作:进栈和出栈n堆栈的特点PUSH r16/m16/seg;进栈指令:;SPSP2;SS:SPr16/m16/seg

9、POP r16/m16/seg;出栈指令:;r16/m16/segSS:SP;SPSP2什么是堆栈n堆栈是一个“先进后出”的主存区域,位于堆栈段中,使用SS段寄存器记录其段地址。n堆栈只有一个出口,即当前栈顶。栈顶是地址较小的一端(低端),它用堆栈指针寄存器SP指定。图a中的堆栈是个空栈。堆栈的操作堆栈只有两种基本操作:进栈和出栈,对应两条指令PUSH和POP。进栈指令PUSH: 进栈指令先使堆栈指针SP减2,然后把一个字操作数存入堆栈顶部出栈指令POP: 出栈指令把栈顶的一个字传送至指定的目的操作数,然后堆栈指针SP加2n请参看实例和例n请对照图 b和图c堆栈的实例和图例MOV AX,127

10、8HPUSH AXPOP AX操作堆栈的特点n堆栈操作的单位是字,进栈和出栈只对字量n字量数据从栈顶压入和弹出时,都是低地址字节送低字节,高地址字节送高字节n堆栈操作遵循先进后出原则n可用存储器寻址方式随机存取堆栈中的数据n堆栈常用来临时存放数据传递参数保存和恢复寄存器例例:现场的保护和恢复push ax;进入子程序后push bxpush ds.pop ds;返回主程序前pop bxpop ax有效地址传送指令LEA(load EA)将存储器操作数的有效地址传送至指定寄存器中LEA r16,mem;r16mem的有效地址例:有效地址的获取LEA BX,2000H ;把2000H操作数的偏移地

11、址送给BX 指令执行后:BX=2000H。要注意和 MOV BX,2000H的区别,它是把DS:2000H的内容送给BX。操作指针传送指令LDS r16,mem;r16mem,;DSmem+2nLDS指令将主存中mem指定的字送至r16,并将mem的下一字送DS寄存器LES r16,mem;r16mem,;ESmem+2nLES指令将主存中mem指定的字送至r16,并将mem的下一字送ES寄存器例例例:LDS BX,ADDRxSI若DS=2000H,SI=1000H,ADDRx=0020H,则存储器操作数的物理地址是:PA=DS*16+EA=20000H+1000H+0020H=21020H

12、。指令执行前:BX=6543H,(21020H)=1040H,(21022H)=4000H 。指令执行后:BX=1040H,DS=4000H,(21020H)=1040H,(21022H)=4000H 。操作例LES BX,SI若DS=2000H,SI=1000H,则存储器操作数的物理地址是:PA=DS*16 =20000H+1000H=21000H 。设指令执行前:(21000H)=1400H,(21002H)=4000H 。指令执行后:BX=1400H,ES=4000H,(21000H)=1400H,(21002H)=4000H 。标志低字节出入AH指令LAHF;AHFLAGS的低字节nL

13、AHF指令将标志寄存器的低字节送寄存器AHnSF/ZF/AF/PF/CF状态标志位分别送入AH的第7/6/4/2/0位,而AH的第5/3/1位任意SAHF;FLAGS的低字节AHnSAHF将AH寄存器内容送FLAGS的低字节n用AH的第7/6/4/2/0位相应设置SF/ZF/AF/PF/CF标志标志寄存器出入堆栈指令PUSHF;SPSP2;SS:SPFLAGSnPUSHF指令将标志寄存器的内容压入堆栈,同时栈顶指针SP减2POPF;FLAGSSS:SP;SPSP2nPOPF指令将栈顶字单元内容送标志寄存器,同时栈顶指针SP加2例例:置位单步标志pushf;保存全部标志到堆栈pop ax;从堆栈

14、中取出全部标志or ax,0100h;设置D8=TF=1,;ax其他位不变push ax;将ax压入堆栈popf;将堆栈内容取到标志寄存器,;即FLAGSAX输入输出指令IN AL/AX,i8/DX;AL/AXI/O端口n输入IN指令将外设数据传送给CPU内的AL/AXOUT i8/DX,AL/AX; I/O端口 AL/AXn输出OUT指令将CPU内的AL/AX数据传送给外设8086通过输入输出指令与外设进行数据传送输入输出指令n8086通过输入输出指令与外设进行数据交换;呈现给程序员的外设是端口(Port)即I/O地址n8086用于寻址外设端口的地址线为16条,端口最多为21665536(64K)个,端口号为0000HFFFFHn每个端口用于传送一个字节的外设数据输入输出寻址方式n8086的端口有64K个,无需分段,设计有两种寻址方式v直接寻址:只用于寻址00HFFH前256个端口,操作数i8表示端口号v间接寻址:可用于寻址全部64K个端口,DX寄存器的值就是端口号n对大于FFH的端口只能采用间接寻址方式例例IN AL, 60H ;从端口60H读入一个字节到AL中 IN AX, 20H ;把端口20H、21H按

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论