《微型计算机原理与接口技术》第3章8088指令系统5程序控制指令、处_第1页
《微型计算机原理与接口技术》第3章8088指令系统5程序控制指令、处_第2页
《微型计算机原理与接口技术》第3章8088指令系统5程序控制指令、处_第3页
《微型计算机原理与接口技术》第3章8088指令系统5程序控制指令、处_第4页
《微型计算机原理与接口技术》第3章8088指令系统5程序控制指令、处_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

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

文档简介

1、1,3.3.5 程序控制指令,控制转移指令分为: 转移指令 循环控制指令 调用和返回指令 中断指令,2,表3-6 控制转移类指令,3,续表(2),4,续表(3),5,续表(4),6,转移指令的实质: 改变IP(或者CS和IP)的内容。 对标志位flags的影响: 所有转移指令不会影响标志位flags。 分类: 分为无条件转移和条件转移两种。,1.转移指令,7,(1) 无条件转移指令 JMP 本指令无条件转移到指定的目标地址, 以执行从该地址开始的程序段。根据设置CS、IP的方法,JMP指令可实现短近远距离跳转, 指令分成4种情况。 段内直接转移: JMP disp 指令中给出的8/16位的位移

2、量加到IP, CS保持不变。 段内间接转移: JMP reg / mem reg/mem中的16位偏移地址送IP, CS保持不变。 段间直接转移 JMP segment : offset 指令中给出的16位的段和16位的偏移地址送到CS和IP。 段间间接转移 JMP mem32 mem32中的16位的段和16位的偏移地址送到CS和IP。,8,转移的目标地址由指令直接给出。指令中给出的目标地址实际上是一个相对于IP的位移量: JMP disp ; 位移量 转移范围 汇编语言中格式 8位 -128+127 JMP SHORT OPRD; 短距离 16位 -32768+32767 JMP NEAR

3、PTR OPRD 或 OPRD ; 近距离 注意:disp的助记符写为新IP, 而disp的机器码为位移量d(新IP=原IP+位移量d) 例:JMP0120H ;直接转向0120H(缺省为NEAR) JMPSHORT LP ;转向LP JMPNEAR PTR BBB;转向BBB 由于是段内转移,故转移后CS内容保持不变, 段内直接转移,9,无条件段内转移,直接转移: JMP Lable 转移目标地址: 段基地址CS不变; 偏移地址IP=当前IP+位移量(16位),JMP Lable,Label,代码段,位移量,近地址标号,CS : IP=,10,段内间接转移 转移的目标地址由寄存器或存储单元的

4、内容给出。 例1:JMP SI ; 近距离 若(SI)=1200H,则指令执行后,(IP)=1200H,于是转向代码段的偏移地址1200H处开始执行。 注意:目标地址以段内偏移的形式给出,而不是相对于IP的位移量,所以它是一个16位的操作数。,11,无条件段内转移,间接转移: JMP BX JMP WORD PTRBX,JMP BX,代码段,数据段,BX=1200,XXH,XXH,IP,指令码,CS : IP,12,例2:JMP BX+DI 设指令执行前: (DS)=3000H,(BX)=1300H, (DI)=1200H,(32500H)=2350H; 则指令执行后:(IP)=2350H 在

5、汇编语言中,段内间接寻址通常写成: JMPWORD PTRBX+DI 表示所取得的目标地址是一个字。,13,段间直接转移 在指令中直接给出要转移到的目的段地址和偏移地址。 例:JMP2000H:1000H ;远距离 执行时,(IP)1000H,(CS)2000H 注意:直接地址为符号地址时,段间直接转移指令中的符号地址前应加操作符FAR PTR。 例:JMP FAR PTR far_label ;远距离 其中的far_label为远类型的标号。,14,无条件段间转移,直接转移: JMP FAR PTR Lable,远地址标号,JMP,Label,代码段1,代码段2,XXH,XXH,XXH,XX

6、H,IP,CS,CS : IP=,15,转移的目的地址(段和偏移)在两个相邻的字存储单元中。例如: JMPDWORD PTRSI ; 远距离 设指令执行前:(DS)=4000H,(SI)=1212H, (41212H)=1000H,(41214H)=4A00H 则指令执行后:(IP)=1000H,(CS)=4A00H 于是转到4B000H处开始执行指令。 例中的DWORD PTR表示转移地址是一个双字。,段间间接转移,16,4000,1212,+),41212,DS,SI,00,10,00,4A,41212 41213 41214 41215,1000,4A00,IP,CS,段间间接转移操作示

7、意图,11111111,11101100,JMP DWORD PTR SI的机器码,DS:SI,17,无条件段间转移,间接转移: JMP DWORD PTRBX,XXH,XXH,XXH,XXH,BX,IP,CS,JMP,指令码,代码段1,代码段2,数据段,CS : IP,18,条件转移指令可实现程序的条件分支。 条件转移指令根据前一条指令执行后标志位的状态来决定是否进行分支转移。 所有的条件转移都是直接寻址方式的短转移。 格式:JXX label;xx为条件名称缩写 指令的转移范围为-128+127字节(短跳转)。 主要的条件转移指令参见p132表3-4。,(2)条件转移指令 JXX,19,

8、根据单个标志位设置的条件转移指令 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, 则转移,20,这类指令主要用来判断两个数的大小。一般指令序列为: CMP dist,src ;比较 Jxx label ;根据比较结果转移 判断无符

9、号数的大小 JA 高于则转移(distsrc) 转移条件为: CF=0ZF=0 JNA/JBE 低于或等于则转移(distsrc) 转移条件为: CF=1ZF=1, 根据组合条件设置的条件转移指令,21,JG ;大于则转移(distsrc) 转移条件为: (SFOF=0)ZF=0 JGE ;大于或等于则转移(distsrc) 转移条件为: (SFOF=0)ZF=1 JL ;小于则转移(distsrc) 转移条件为: (SFOF=1)ZF=0 JLE ;小于或等于则转移(distsrc) 转移条件为: (SFOF=1)ZF=1,判断有符号数的大小,22,根据CX内容来决定是否转移的转移指令 JC

10、XZ label 若(CX)=0,则转移到label处开始执行。,23,条件转移指令举例:以十六进制数形式显示BX中的内容。 MOVBX, 1234H MOVCH, 4 ; CH做循环计数器 ROT: MOVCL, 4; CL做移位计数器 ROLBX, CL; 将最高4位移到低4位 MOVAL, BL ANDAL, 0FH; 取出低4位 ADDAL, 30H; 转换为ASCII码 CMPAL, 39H; 与 9 比较 JBE DISP; 若(AL)9, 则转显示 ADDAL, 7; 若(AL)9, 再加7转为A-F DISP: MOVDL, AL; (DL)字符 MOVAH, 2 INT21H

11、; 显示输出 DECCH; 4个十六进制数显示完否? JNZROT; 没有, 循环 MOVDL, 48H; H MOVAH, 2 INT21H; 最后显示H,24,2.循环控制指令,用在循环程序中以确定是否要继续循环。 循环次数通常置于CX中。 转移的目标应在距离本指令-128+127的范围之内(短跳转)。 循环控制指令不影响标志位。,25,(1) LOOP 格式:LOOP label 类比 串前缀REP 操作:(CX)-1CX; 若(CX)0,则转至label处执行; 否则退出循环,执行LOOP后面的指令。 注:LOOP指令与下面的指令段等价: DEC CX JNZ label,26,(2)

12、LOOPZ (LOOPE) 类比 串前缀REPZ/E 格式:LOOPZ label 操作:(CX)-1CX; 若(CX)0ZF=1,则转至label处执行; 否则退出循环,执行LOOP后面的指令。 (3)LOOPNZ (LOOPNE) 类比 串前缀REPNZ/NE 格式:LOOPNZ label 操作:(CX)-1CX; 若(CX)0ZF=0,则转至label处执行; 否则退出循环,执行LOOP后面的指令。,27,例1:给1A000H开始的256个内存单元均减去1,若发现某个单元减为0则立即退出循环,其后的单元不再减1。程序段如下:(逻辑地址为1A00:0H) MOV AX, 1A00H MO

13、V DS, AX ; 1A00H段 MOV DI, -1 MOV CX, 256 GOON: INC DI DEC BYTE PTRDI LOOPNZ GOON HLT,28,例2:在8000H开始的长度为1000字节的字符串中查找S,若找到,把其偏移地址记录在ADDR中,否则ADDR单元置为0FFFFH。 MOV DI, 8000H MOV CX, 1000 MOV AL, S MOV ADDR, 0FFFFH GOON: SCASB INC DI LOOPNZ GOON ; 两条可并为REPNZ SCASB JNZ DONE DEC DI MOV ADDR,DI DONE: HLT,29,

14、3. 过程调用和返回指令,过程(子程序) 一段具有特定功能的,供其它程序调用的公用程序。 特点 调用子程序时,IP(或CS:IP)的内容被压入堆栈栈顶。从子程序返回时,栈顶的内容又被弹出到IP(或CS:IP)。 子程序执行结束后一般均要返回调用程序。 一次定义,多次调用; 可带参数调用,以完成不同的功能。 优点 程序代码短,结构清晰,便于编程、调试、修改和阅读。 两条相关指令: 子程序调用指令 CALL 子程序返回指令 RET,30,断点,入口地址,用于调用一个子过程; 调用前须保护断点地址(断点=CALL的下一条指令地址CS:IP);再跳转到子程序入口地址(子程序入口地址=子程序的第一条指令

15、地址CS:IP或CS:IP); 子过程执行结束后要返回原调用处继续执行原程序 断点恢复(RET指令)。,调用指令CALL与转移指令JMP的比较,RET,CALL,CALL 子程序入口地址 = JMP 子程序入口地址 + PUSH CALL的下一条指令地址,CALL指令功能:,31,主程序调用子程序的执行过程:,将调用指令的下一条指令的地址(断点)压入堆栈 (CALL指令); -相当于 PUSH 下一条指令的地址(IP或 CS:IP) 获取子过程的入口地址(子过程第1条指令的偏移地址) (CALL指令) ; -相当于JMP入口地址(CS:IP或CS:IP) 执行子过程,含相应参数的保存及恢复(其

16、它指令); 将断点偏移地址由堆栈弹出,返回原程序(RET指令)。 -相当于 POP IP或 CS:IP,32,一般格式:CALL sub ;sub为子程序的入口 根据子程序入口的寻址方式,子程序调用有4类。 段内直接调用 子程序的偏移地址直接由CALL指令给出。 格式:CALL near_proc ;近调用 CALL执行时,它首先将IP内容压栈,然后把指令中给出的位移量加到IP上得到新IP跳转到子程序入口地址。 注意:汇编以后的调用地址是相对于CALL的下一条指令的位移量。 例:CALL 0120H ;子程序偏移地址由指令给出,(1)调用指令 CALL,33,位移量由汇编程序在汇编时进行计算,

17、如下例: CS:0102CALL 0120H;3字节 CS:0105 则位移量为: 0120-0105H=001BH 于是CALL0120H的机器码为E8 1B 00 CS:0102E8 CS:01031B CALL 0120H CS:010400 CS:0105 ,34,子程序的偏移地址在寄存器或存储器中。 格式:CALL mem16/reg16 ;近调用 CALL执行时,它首先将IP内容压栈,然后把指定的寄存器/存储器的内容送入IP得到新IP跳转。 例: CALLBX ;子程序地址由BX给出 CALLWORD PTRSI ;子程序地址在存储器中,段内间接调用,35,IPH IPL,代码段,

18、数据段,CALL WORD PTR SI指令的操作图示: 假定:(DS) = 8000H,(SI) = 1200H,81200H,81201H,36,子程序的段地址和偏移地址直接由CALL指令给出。 格式:CALL far_proc ;far_proc为远过程的地址 ;远调用 指令的操作为: CS内容压栈 IP内容压栈 CS段地址 IP偏移地址 例:CALL 2000H:1000H CALL TIMER ;TIMER为远过程,段间直接调用,保护断点,跳转,37,子程序的段和偏移地址为存储器的连续4个单元中的内容。 格式:CALL mem32 ;远调用 指令的操作为:(含保护断点和跳转两步) S

19、P(SP)-2 (SP)+1,(SP)(CS) ;CS压栈 CS(mem32+2) SP(SP)-2 (SP)+1,(SP)(IP) ;IP压栈 IP(mem32) 例:CALL DWORD PTRDI 调用地址在DI,DI+1,DI+2,DI+3四个存储单元中。低字内容为偏移地址,高字内容为段地址。,段间间接调用,38,CALL,代码段,数据段,IPH IPL,CSH CSL,DI,DI+1,DI+2,DI+3,段间间接调用示意图,CALL DWORD PTRDI,39,段内返回指令RET的操作为: 恢复子程序执行前IP的内容。-相当于POP IP 段间返回指令RET的操作为: 恢复子程序执

20、行前IP和CS的内容。-相当于POP CS:IP 另有一种带立即数的返回指令 “ RET n ”,其中n为偶数,表示从栈顶弹出地址后另外丢弃的字节数。 例:RET 4 ;返回后再丢弃栈顶的4个字节,(2)返回指令 RET,40,中断的定义: CPU执行程序时,由于发生了某种随机的事件(外部或内部),引起CPU暂时中断正在运行的程序,转去执行一段特殊的服务程序(称为中断服务程序或中断处理程序),以处理该事件,该事件处理完后又返回被中断的程序继续执行,这一过程称为中断。 中断源分类:外部中断、内部中断 内部中断(软件中断):CPU内部执行程序(INT n或INTO)时自身产生的中断。 外部中断(硬

21、件中断):CPU以外的设备、部件产生的中断。用于处理外设与CPU间的通信。,4.中断指令,41,中断指令用于产生软件中断,以执行一段特殊的中断处理过程(即中断服务子程序)。 中断指令的主要作用: (1)调用操作系统(OS)提供的特殊子程序(系统功能调用) (2)实现一些特殊功能,如调试程序时单步运行、断点等。 (3)调用基本I/O系统(BIOS)提供的硬件低层服务。 8086/8088 CPU在程序中允许安排一条中断指令来引起一个中断过程,这种中断叫内部中断,或叫软中断。被中断的指令地址处称为“断点”。有关中断的详细情况将在第六章讨论。 中断指令共有三条: (1)INT n 执行类型n的中断服

22、务程序,n=0255 (2)INTO 执行溢出(OF)中断的中断服务程序,=INT 4 (3)IRET 从中断服务程序返回调用程序,42,中断INT n与过程CALL 段间间接调用: 中断是随机事件或异常事件引起,调用则是事先已在程序中安排好 ; 响应中断请求不仅要保护断点地址,还要保护FLAGS内容; 调用指令在指令中直接给出子程序入口地址,中断指令只给出中断向量码n,入口地址则在向量码n指向的内存单元中。,CALL,INT,RET,IRET,43,(1) INT n,格式: INT n 说明: n4 = 中断向量地址。该向量地址中的内容即为中断服务程序入口地址(段:偏移),入口地址也称为“

23、中断向量”。,0000 : n4,XXH,XXH,YYH,YYH,中断服务程序入口的偏移地址(IP),中断服务程序入口的段地址(CS),中断类型码 n = 0255,内存,中断向量,中断向量地址=,44,INT指令的操作: 将FLAGS压入堆栈;-相当于 PUSH FLAGS 将INT指令下一条指令的地址压栈(即把CS和IP的内容压栈); -相当于 PUSH CS:IP 取中断服务程序入口地址送入CS和IP。 -相当于 JMP CS:IP INT指令只影响IF=0和TF=0, 对其余标志位无影响 INT指令可用于调用系统服务程序,如INT 21H,45,INT指令的操作例:,INT 21H(软

24、中断),IPL,IPH,CSL,CSH,SP=1200,FLAGSL,FLAGSH,SP=11FA,执行INT 21H指令后,保护断点,堆栈,执行INT 21H指令前,(1)先做: 保护标志FLAGS和 保护断点地址CS:IP,46,(2)再做:跳转到子程序(入口地址CS:IP),执行INT 21H指令后, CS=? IP=? 因为n=21H,所以n4=84H。 下图中,(0:0084H)=2000H:1123H 所以: CS=2000H IP=1123H,0000:0084H,23H,11H,00H,20H,IP,CS,0000 : 21H4,47,格式: INTO INTO检查溢出标志OF

25、,如果OF=1,则启动一个类型4的中断过程;如果OF=0,不做任何操作。 通常INTO指令安排在有符号数算术运算指令后面。如 IMULDX INTO ;若溢出,则启动INT 4, 否则往下执行 MOVRESULT,AX MOVRESULT+2,DX ,(2)溢出中断 INTO,相当于,INT 4,48,用于从中断服务程序返回被中断的程序。IRET负责恢复断点(CS和IP)和恢复标志寄存器FLAGS内容。 任何中断服务程序不管是外部中断引起的,还是内部中断引起的,最后都要用IRET返回。IRET指令执行的操作为: 栈顶内容弹出到IP 栈顶内容弹出到CS 栈顶内容弹出到FLAGS,(3)中断返回指令 IRET,49,表 3- 5 处理器控制类指令,3.3.6 处理器控制指令,50,续表(2),51,3.3.6 处理器控制指令,1.标志操作指令 用来设置标志位的状态。 (1)CF设置指令 CLC 0CF STC 1CF CMC CF变反 (2)DF设置指令 CLD 0DF (串操作的指针移动方向从低到高) STD 1DF (串操作的指针移动方向从高到

温馨提示

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

最新文档

评论

0/150

提交评论