好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

第3章8086寻址方式和指令系统(4).ppt

41页
  • 卖家[上传人]:飞***
  • 文档编号:6383248
  • 上传时间:2017-08-08
  • 文档格式:PPT
  • 文档大小:188KB
  • / 41 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1,3.3.5 程序控制指令,控制转移指令分为:转移指令循环控制指令调用和返回指令中断指令,2,转移指令的实质:改变IP(或CS)的内容所有转移指令不会影响标志位分为无条件转移和条件转移两种1.转移指令,3,(1) 无条件转移指令 - JMP本指令无条件转移到指定的目标地址,以执行从该地址开始的程序段根据设置CS、IP的方法,JMP指令分成4种情况 ① 段内直接转移: JMP disp 指令中给出的8/16位的位移量加到IPCS保持不变 ② 段内间接转移: JMP reg/mem reg/mem中的16位偏移地址送IPCS保持不变 ③ 段间直接转移 JMP segment:offset 指令中给出的16位的段和16位的偏移地址送到CS和IP ④ 段间间接转移 JMP mem32 mem32中的16位的段和16位的偏移地址送到CS和IP4,无条件转移指令,5,转移的目标地址由指令直接给出指令中给出的目标地址实际上是一个相对于IP的位移量: 位移量 转移范围 汇编语言中格式 8位 -128~+127 JMP SHORT OPRD 16位 -32768~+32767 JMP NEAR PTR OPRD例:JMP 0120H ;直接转向0120H JMP SHORT LP ;转向LP JMP NEAR PTR BBB ;转向BBB由于是段内转移,故转移后CS内容保持不变,① 段内直接转移,6,②段内间接转移转移的目标地址由寄存器或存储单元的内容给出。

      例1:JMP SI若(SI)=1200H,则指令执行后,(IP)=1200H,于是转向代码段的偏移地址1200H处开始执行注意:目标地址以段内偏移的形式给出,而不是相对于IP的位移量,所以它是一个16位的操作数7,例2:JMP [BX+DI]设指令执行前: (DS)=3000H,(BX)=1300H, (DI)=1200H,(32500H)=2350H; 则指令执行后:(IP)=2350H在汇编语言中,段内间接寻址通常写成: JMP WORD PTR[BX+DI]表示所取得的目标地址是一个字8,③段间直接转移在指令中直接给出要转移到的目的段地址和偏移地址 例:JMP 2000H:1000H执行时,(IP)←1000H,(CS)←2000H注:直接地址为符号地址时,段间直接转移指令中的符号地址前应加操作符FAR PTR 例:JMP FAR PTR far_label其中的far_label为远类型的标号9,转移的目的地址(段和偏移)在两个相邻的字存储单元中例如: JMP DWORD PTR[SI]设指令执行前:(DS)=4000H,(SI)=1212H, (41212H)=1000H,(41214H)=4A00H则指令执行后:(IP)=1000H,(CS)=4A00H于是转到4B000H处开始执行指令。

      例中的DWORD PTR表示转移地址是一个双字④段间间接转移,10,条件转移指令可实现程序的条件分支条件转移指令根据标志位的状态来决定是否进行分支转移格式: JXX label ;xx为条件名称缩写指令的转移范围为-128~+127字节主要的条件转移指令参见p142表3-72)条件转移指令 - JXX,11,① 根据单个标志位设置的条件转移指令JB/JC ;低于,或CF=1,则转移JNB/JNC/JAE ;高于或等于,或CF=0,则转移JP/JPE ;奇偶标志PF=1(偶),则转移JNP/JPO ;奇偶标志PF=0(奇),则转移JZ/JE ;结果为零(ZF=1),则转移JNZ/JNE ;结果不为零(ZF=0),则转移JS ;SF=1,则转移JNS ;SF=0,则转移JO ;OF=1,则转移JNO ;OF=0,则转移,12,这类指令主要用来判断两个数的大小一般指令序列为: CMP dist,src ;比较 Jxx label ;根据比较结果转移 判断无符号数的大小JA 高于则转移(dist>src) 转移条件为: CF=0∧ZF=0JNA/JBE 低于或等于则转移(dist≤src) 转移条件为: CF=1∨ZF=1,② 根据组合条件设置的条件转移指令,13,JG ;大于则转移(dist>src) 转移条件为: (SF⊕OF=0)∧ZF=0JGE ;大于或等于则转移(dist≥src) 转移条件为: (SF⊕OF=0)∨ZF=1JL ;小于则转移(dist<src) 转移条件为: (SF⊕OF=1)∧ZF=0JLE ;小于或等于则转移(dist≤src) 转移条件为: (SF⊕OF=1)∨ZF=1,判断有符号数的大小,14,③根据CX内容来决定是否转移的转移指令 JCXZ label 若(CX)=0,则转移到label处开始执行。

      15,条件转移指令举例:以十六进制数形式显示BX中的内容 MOV BX, 1234H MOV CH, 4 ; CH做循环计数器ROT: MOV CL, 4 ; CL做移位计数器 ROL BX, CL ; 将最高4位移到低4位 MOV AL, BL AND AL, 0FH ; 取出低4位 ADD AL, 30H ; 转换为ASCII码 CMP AL, 39H ; 与 ’9’ 比较 JBE DISP ; 若(AL)≤‘9’, 则转显示 ADD AL, 7 ; 若(AL)>’9’, 再加7转为‘A’-‘F’DISP: MOV DL, AL ; (DL)←字符 MOV AH, 2 INT 21H ; 显示输出 DEC CH ; 4个十六进制数显示完否? JNZ ROT ; 没有, 循环 MOV DL, 48H ; ‘H’ MOV AH, 2 INT 21H ; 最后显示’H’,16,2.循环控制指令,用在循环程序中以确定是否要继续循环。

      循环次数通常置于CX中转移的目标应在距离本指令-128~+127的范围之内循环控制指令不影响标志位17,(1)LOOP格式:LOOP label操作:(CX)-1→CX; 若(CX)≠0,则转至label处执行; 否则退出循环,执行LOOP后面的指令 注:LOOP指令与下面的指令段等价: DEC CX JNZ label,18,(2)LOOPZ (LOOPE)格式:LOOPZ label操作:(CX)-1→CX; 若(CX)≠0∧ZF=1,则转至label处执行; 否则退出循环,执行LOOP后面的指令3)LOOPNZ (LOOPNE)格式:LOOPNZ label操作:(CX)-1→CX; 若(CX)≠0∧ZF=0,则转至label处执行; 否则退出循环,执行LOOP后面的指令19,例1:给1A000H开始的256个内存单元均减去1,若 发现某个单元减为0则立即退出循环,其后的单元不再减1程序段如下:(逻辑地址为1A00:0H) MOV AX, 1A00H MOV DS, AX ; 1A00H段 MOV DI, -1 MOV CX, 256 GOON: INC DI DEC BYTE PTR[DI] LOOPNZ GOON HLT,20,例2:在8000H开始的长度为1000字节的字符串中 查找’S’,若找到,把其偏移地址记录在ADDR中,否则ADDR单元置为0FFFFH。

      MOV DI, 8000H MOV CX, 1000 MOV AL, ’S’ MOV ADDR, 0FFFFH GOON: SCASB LOOPNZ GOON JNZ DONE DEC DI MOV ADDR,DI DONE: HLT,21,*3. 过程调用和返回指令,过程(子程序) 一段具有特定功能的,供其它程序调用的公用程序特点调用子程序时,IP(CS)的内容被压入堆栈栈顶从子程序返回时,栈顶的内容又被弹出到IP(CS)子程序执行结束后一般均要返回调用程序一次定义,多次调用;可带参数调用,以完成不同的功能优点 程序代码短,结构清晰,便于编程、调试、修改和阅读 两条相关指令: 子程序调用指令 CALL 子程序返回指令 RET,22,一般格式:CALL sub ;sub为子程序的入口根据子程序入口的寻址方式,子程序调用有四类。

      ①段内直接调用子程序的偏移地址直接由CALL指令给出 格式:CALL near_proc CALL执行时,它首先将IP内容压栈,然后把指令中给出的位移量加到IP上 注:汇编以后的调用地址是相对于CALL的下一条指令的位移量例:CALL 0120H ;子程序偏移地址由指令给出,(1)调用指令CALL,23,位移量由汇编程序在汇编时进行计算,如下例: CS:0102 CALL 0120H ;3字节 CS:0105 …… 则位移量为: 0120-0105H=001BH于是CALL 0120H的机器码为E8 1B 00 CS:0102 E8 CS:0103 1B CALL 0120H CS:0104 00 CS:0105 ……,,24,子程序的偏移地址在寄存器或存储器中 格式:CALL mem16/reg16 CALL执行时,它首先将IP内容压栈,然后把指定的寄存器/存储器的内容送入IP 例: CALL BX ;子程序地址由BX给出 CALL WORD PTR[SI] ;子程序地址在存储器中,②段内间接调用,25,,IPH IPL,,,代码段,数据段,,CALL WORD PTR [SI]指令的操作图示:假定:(DS) = 8000H,(SI) = 1200H,81200H,81201H,,,,26,子程序的段地址和偏移地址直接由CALL指令给出。

      格式:CALL far_proc ;far_proc为远过程的地址指令的操作为:  CS内容压栈  IP内容压栈  CS←段地址  IP←偏移地址例:CALL 2000H:1000H CALL TIMER ;TIMER为远过程,。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.