《321数据传送指令(1)-精品文档资料系列.ppt》由会员分享,可在线阅读,更多相关《321数据传送指令(1)-精品文档资料系列.ppt(39页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、寻址方式总结:寻址方式总结:1练习题练习题1. 下列指令中SRC和DST的寻址方式 MOV SI,C MOV BX+3,AX XCHG BXSI,AL ADD CX,DS:10H MOV DL,BP+DI MOV BX,AXDSESSSCSIP数据暂存器数据暂存器PSW执行部件控制电路执行部件控制电路指令译码器指令译码器AHBHCHDHSIDIBPSPALBLCLDL通用寄存器组通用寄存器组指指令令队队列列总线总线接口接口控制控制电路电路运运算算器器地地址址加加法法器器MOV操作码操作码0020-CS=1000H,IP=100HDS=3000H,BX=1000HMOV BX, 2000H100
2、10H10011H10012H31001H31000H1000H3000H0100H10 00H00H20H0103H3.2 8086/80883.2 8086/8088指令系统指令系统可分成如下可分成如下6 6类类:n 数据传送指令数据传送指令n 算术运算指令算术运算指令n 逻辑运算和移位指令逻辑运算和移位指令n 串操作指令串操作指令n 程序控制指令程序控制指令n 处理器控制指令处理器控制指令3.2.1 数据传送指令l 可实现可实现 存储器存储器 寄存器寄存器 I/OI/O接口接口 l 数据传送指令又可分为如下四种:数据传送指令又可分为如下四种:n 通用传送:MOV PUSH/POP XCH
3、Gn 目标地址传送 LEAn 标志传送n 输入输出 IN OUT(1) (1) MOV dst,src; dstsrc 传送的是字节还是字取决于指令中涉传送的是字节还是字取决于指令中涉及的寄存器是及的寄存器是8 8位还是位还是1616位。位。 1.通用传送指令1 1) 寄存器送(段)寄存器或主存寄存器送(段)寄存器或主存mov ax,bx;axbx,字传送,字传送mov ah,al;ahal,字节传送,字节传送mov ds,ax;dsax,字传送,字传送mov bx,al;bxal,字节传送,字节传送MOV reg / mem / seg , reg2 2)立即数送寄存器或主存立即数送寄存器或
4、主存mov al,4;al4,字节传送,字节传送mov si,200H;si0200H,字传送,字传送mov byte ptr si,0aH ;byte ptr 说明是字节操作说明是字节操作mov word ptr si+2,0bH ;word ptr 说明是字操作说明是字操作注意立即数是字节量还是字量注意立即数是字节量还是字量明确指令是字节操作还是字操作明确指令是字节操作还是字操作MOV reg / mem , imm3 3)段寄存器送寄存器或主存)段寄存器送寄存器或主存mov si,dsmov ax,es;axesmov ds,ax;dsaxesMOV reg / mem , seg4 4
5、) 主存送(段)寄存器主存送(段)寄存器mov al,bxmov dx,bp;dxss:bpmov es,si;esds:siMOV reg / seg , memMOV指令使用规则:1) 1) 立即数不允许作为目的操作数立即数不允许作为目的操作数2) 2) 不允许不允许 mem mem3) 3) 不允许不允许 seg seg 4) 4) 不允许不允许 seg 立即数立即数5) 5) CS、IP不能作目的寄存器不能作目的寄存器6) 6) 源操作数与目的操作数类型要一致源操作数与目的操作数类型要一致几个不能传送的解决办法:用AX作桥梁l存储器存储器存储器:存储器: MOV AX,MEM1 MOV
6、 MEM2,AXl段寄存器段寄存器段寄存器:段寄存器: MOV AX,DS MOV ES,AXl段寄存器段寄存器立即数:立即数: MOV AX,DATA MOV DS,AX什么是堆栈?什么是堆栈? 按按“后进先出后进先出(LIFO)”(LIFO)”方式工作的存储方式工作的存储区域。堆栈区域。堆栈进行压入弹出操作。进行压入弹出操作。为什么要设置堆栈?为什么要设置堆栈?为什么要按为什么要按 “ “后进先出后进先出”方式工作?方式工作?(2) (2) 堆栈操作指令堆栈操作指令主程序IP继续执行主程序执行子程序转子程序压栈弹出返回主程序主程序IPIP(下)继续执行主程序转子程序1返回主程序IP执行子程
7、序 2转子程序2返回子程序1IP(下)执行子程序1继续执行子程序1(a)(b)子程序调用示意图(a) 主程序调子程序; (b) 子程序嵌套示意图压栈弹出IP(下)规定由规定由SSSS指示堆栈段的段基址,堆栈指针指示堆栈段的段基址,堆栈指针SPSP始终始终指向堆栈的顶部,指向堆栈的顶部,SPSP的初值规定了所用堆栈区的的初值规定了所用堆栈区的大小。堆栈的最高地址叫栈底。大小。堆栈的最高地址叫栈底。 SPSS堆栈段堆栈段进栈方向进栈方向退栈方向退栈方向栈底栈底栈顶栈顶堆栈堆栈什么是堆栈?堆栈有何特点?什么是堆栈?堆栈有何特点?(1)(1)堆栈是在内存中开辟的一个存储数据的连续区域。堆栈是在内存中开
8、辟的一个存储数据的连续区域。(2)(2)其一端是固定的,称为栈底;另一端是活动的,其一端是固定的,称为栈底;另一端是活动的,称为栈顶,数据只能在栈顶进出,我们设置一个堆栈称为栈顶,数据只能在栈顶进出,我们设置一个堆栈指针指针SPSP来指示当前栈顶的位置。数据进入堆栈称为入来指示当前栈顶的位置。数据进入堆栈称为入栈栈PUSHPUSH,而数据出栈称为退栈,而数据出栈称为退栈POPPOP。注意:。注意:PUSHPUSH和和POPPOP在程序中是按后进先出原则成对出现的,而且它们的在程序中是按后进先出原则成对出现的,而且它们的操作数是操作数是1616位的数据,以此,一次数据入栈,就有位的数据,以此,一
9、次数据入栈,就有SPSP2 2。堆栈和队列堆栈和队列l堆栈:按照后进先出堆栈:按照后进先出(LIFO)(LIFO)的原则组织的存的原则组织的存储器空间(栈)储器空间(栈)l队列:按照先进先出队列:按照先进先出(FIFO)(FIFO)的原则组织的存的原则组织的存储器空间储器空间LIFOFIFOlSTACK 200Hl 就是对堆栈的定义,即就是在内存中划分出200H字节作为堆栈区,其地址为SS:0000HSS:01FFH,那么堆栈指针SP的初值l为0200H,如图所示。 PUSH src ; src为为16位操作数位操作数 例:例:PUSHAX;将;将AX内容压栈内容压栈 执行操作:执行操作: (
10、SP)(SP)- 2(SP)-1高字节高字节AH (SP)-2低字节低字节AL 压栈指令压栈指令设(设(AXAX)= =10102020H H低地址低地址存储区存储区(SS段)段)执行前执行前(AX)=1020(SP)存储区存储区(SS段)段)进栈方向进栈方向执行后执行后2010(AL)(AH)PUSH AX指令执行示意图指令执行示意图(SP)-2(SP)高地址高地址低地址低地址高地址高地址(SP)- -1压栈指令的格式为:压栈指令的格式为: PUSH reg PUSH mem/reg PUSH seg例如:例如: PUSH AX PUSH BX PUSH DS 注意进栈方向是注意进栈方向是高
11、地址高地址向向低地址低地址发展发展 POPdst例:例:POP BX;将栈顶内容弹至;将栈顶内容弹至BX 执行操作:执行操作: (BL)(SP) (BH)(SP)+1 (SP)(SP)+2 弹出指令弹出指令POP BX POP BX 的执行示意图的执行示意图低地址低地址存储区存储区(SS段)段)出栈方向出栈方向执行前执行前2010(SP)存储区存储区(SS段)段)执行后执行后(BX)=1020H(SP)(SP)+1(SP)+2BX20201010高地址高地址低地址低地址高地址高地址堆栈指令使用时应注意:堆栈指令使用时应注意:堆栈操作总是按堆栈操作总是按字字进行进行不能从栈顶弹出一个字给不能从栈
12、顶弹出一个字给CSCS堆栈指针为堆栈指针为SS:SPSS:SP,SPSP永远指向栈顶永远指向栈顶SPSP自动进行增减量(自动进行增减量(-2-2,+2+2)格式:格式:XCHG reg XCHG reg ,mem / regmem / reg功能:交换两操作数的内容。功能:交换两操作数的内容。 要求:两操作数中必须有一个在寄存器中;要求:两操作数中必须有一个在寄存器中; 操作数不能为段寄存器和立即数;操作数不能为段寄存器和立即数; 源和目地操作数类型要一致。源和目地操作数类型要一致。举例:举例: XCHGXCHGAXAX,BXBX XCHG XCHGByte ptr2000HByte ptr2
13、000H,CLCL(3)(3)交换指令交换指令XCHGXCHG(4)查表指令查表指令lXLAT ;(AL)(BX) + (AL)lXLAT 表首址表首址 ;(AL)(BX) + (AL)l指令功能:把待查表格的一个字节内容送到指令功能:把待查表格的一个字节内容送到AL累加器中。累加器中。l在执行该指令前,应首先在数据段中建立一个在执行该指令前,应首先在数据段中建立一个长度小于长度小于256个字节的表格,将表的首地址先个字节的表格,将表的首地址先送至送至BX寄存器中,然后将欲查找对象与其在寄存器中,然后将欲查找对象与其在表格中距表首地址的位移量送表格中距表首地址的位移量送AL 2. 地址传送指令
14、用途:用于传送操作数的地址用途:用于传送操作数的地址 而不是获取存储器单元的内容而不是获取存储器单元的内容l(1)(1)传送偏移地址传送偏移地址格式:格式:LEA reg,mem ; ; 将指定内存单元的偏移地址将指定内存单元的偏移地址 送到指定寄存器送到指定寄存器要求:要求: 1) 1) 源操作数源操作数必须是一个必须是一个存储器操作数存储器操作数; 2) 2) 目的操作数必须是一个目的操作数必须是一个1616位的通用寄存器。位的通用寄存器。(2)取段寄存器指令取段寄存器指令lLDS reg16, mem32 ;l (reg16) EA(mem32), DS EA(mem32) + 2 lL
15、ES reg16, mem32 ;l (reg16) EA(mem32),ES EA(mem32) + 2l指令功能:指令功能:将源操作数的有效地址所对应的将源操作数的有效地址所对应的4字节内存字节内存单元中的第一个字送入指令指定寄存器,而第二个字则送单元中的第一个字送入指令指定寄存器,而第二个字则送入段寄存器入段寄存器DS(或(或ES),即将一个),即将一个32位的远地址指针的位的远地址指针的偏移地址写入到指定的通用寄存器中,而该指针的段基值偏移地址写入到指定的通用寄存器中,而该指针的段基值送至段寄存器送至段寄存器DS(或(或ES) 例:例:LEA BX,SI+10H设:(设:(SI)=10
16、00H则执行该指令后,(则执行该指令后,(BX)=1010H例:例:LEA BX,SI则执行该指令后,(则执行该指令后,(BX)=1000H例:例:LEA BX,10H则执行该指令后,(则执行该指令后,(BX)=10H LEA BX,BUFFER 注意二条指令差别:注意二条指令差别:MOV BX,BUFFER; ;取存储单元中的内容取存储单元中的内容 ; ;取存储单元的偏移地址取存储单元的偏移地址LEA BX,BUFFER MOV BX, OFFSET BUFFEROFFSET BUFFEROFFSET BUFFER表示存储器单元表示存储器单元BUFFERBUFFER的偏移地址。的偏移地址。两
17、条等效指令:两条等效指令:3. . 输入输出(输入输出(I/OI/O)指令)指令l80868086通过通过I/OI/O指令与外设交换数据;呈现给指令与外设交换数据;呈现给程序员的外设是程序员的外设是端口端口(PortPort)即)即I/OI/O地址地址l80868086用于寻址外设端口的地址线为用于寻址外设端口的地址线为1616条,条,端口最多为端口最多为2 216166553665536(64K64K)个,端口号)个,端口号为为0000H0000HFFFFHFFFFHl每个端口用于传送一个每个端口用于传送一个字节字节的外设数据的外设数据只限于用累加器只限于用累加器ALAL或或AXAX来传送信
18、息。来传送信息。功能功能: (: (累加器累加器)I/OI/O端口端口输入输出寻址方式输入输出寻址方式l80868086的端口有的端口有64K64K个,无需分段,设计有两个,无需分段,设计有两种寻址方式种寻址方式v直接寻址直接寻址:只用于寻址只用于寻址00H00HFFHFFH前前256256个端个端口,操作数口,操作数i8i8表示端口号表示端口号v间接寻址间接寻址:可用于寻址全部:可用于寻址全部64K64K个端口,个端口,DXDX寄存器的值就是端口号寄存器的值就是端口号l对大于对大于FFHFFH的端口只能采用间接寻址方式的端口只能采用间接寻址方式IN acc, PORT ;PORT端口号端口号
19、0255HIN acc, DX ;DX表示的端口范围达表示的端口范围达64K累加器累加器输出端口格式格式OUT port , accOUT DX , acc累加器累加器输入端口例:输入字量1.直接寻址,字节量输入直接寻址,字节量输入 in al,21h mov ah,al in al,20h2.直接寻址,字量输入直接寻址,字量输入 in ax,20h3.间接寻址,字量输入间接寻址,字量输入 mov dx,20h in ax,dx功能相同功能相同 字量数据传送字量数据传送实际上实现了连实际上实现了连续的两个端口地续的两个端口地址的字节量传送址的字节量传送标志传送指令标志传送指令 标志寄存器标志寄
20、存器FLAG(FR)中的每一个状态标志位代表)中的每一个状态标志位代表CPU执行指令的执行指令的状态。许多指令的执行结果会影响状态。许多指令的执行结果会影响FR的某些状态标志位;同时有些的某些状态标志位;同时有些指令的执行也受指令的执行也受FR中某些位的控制。中某些位的控制。l(1)标志传送指令标志传送指令lLAHF ;AHFLAGS的低的低8位位lSAHF ;FLAGS的低的低8位位AHlLAHF功能:功能:把标志寄存器的低把标志寄存器的低8位读出后传送给位读出后传送给AH寄存器,即寄存器,即把把SF、ZF、AF、PF、CF标志位分别送至标志位分别送至AH的第的第7、6、4、2、0位(位(A
21、H的第的第5、3、1位是任意的)。位是任意的)。lSAHF功能:功能:把寄存器把寄存器AH中第中第7、6、4、2、0位的内容分别写入位的内容分别写入标志寄存器的标志寄存器的SF、ZF、AF、PF和和CF各标志位。各标志位。 (2)标志入栈、出栈指令标志入栈、出栈指令lPUSHF ;SP SP-2,(SP+1)(SP) FLAGSlPOPF ;FLAGS(SP+1)(SP),SPSP+2lPUSHF功能:功能:把标志寄存器的内容(把标志寄存器的内容(16位)入栈,位)入栈,同时修改栈顶指针,指令执行后标志寄存器的内容不同时修改栈顶指针,指令执行后标志寄存器的内容不变。变。lPOPF功能:功能:将堆栈中当前栈顶的两个单元的内容将堆栈中当前栈顶的两个单元的内容弹出到标志寄存器中。弹出到标志寄存器中。lLAHF指令操作示意图指令操作示意图 小结:数据传送指令小结:数据传送指令重点掌握:重点掌握:n 通用传送:MOV,PUSH,POP,XCHGn 目标地址传送:LEAn 标志传送n 输入输出:IN,OUT