第三章5微机原理与接口技术

上传人:痛*** 文档编号:193612135 上传时间:2023-03-11 格式:PPT 页数:35 大小:477KB
收藏 版权申诉 举报 下载
第三章5微机原理与接口技术_第1页
第1页 / 共35页
第三章5微机原理与接口技术_第2页
第2页 / 共35页
第三章5微机原理与接口技术_第3页
第3页 / 共35页
资源描述:

《第三章5微机原理与接口技术》由会员分享,可在线阅读,更多相关《第三章5微机原理与接口技术(35页珍藏版)》请在装配图网上搜索。

1、3.3.6 3.3.6 程序控制指令程序控制指令控制转移指令分为:控制转移指令分为:循环控制指令循环控制指令调用和返回指令调用和返回指令中断指令中断指令转移指令的实质:改变转移指令的实质:改变IP(IP(或或CS)CS)的内容。的内容。所有转移指令不会影响标志位。所有转移指令不会影响标志位。分为分为无条件转移无条件转移和和条件转移条件转移两种。两种。1.1.转移指令转移指令(1)无条件转移指令无条件转移指令-JMP本指令无条件转移到指定的目标地址本指令无条件转移到指定的目标地址,以执行从该以执行从该地址开始的程序段。根据设置地址开始的程序段。根据设置CS、IP的方法,的方法,JMP指令分成指令

2、分成4种情况种情况。段内直接转移:段内直接转移:指令中给出的指令中给出的8/168/16位的位移量位的位移量加到加到IP。CS保持不变。保持不变。段内间接转移:段内间接转移:REG/MEMREG/MEM中的中的1616位偏移地址位偏移地址送送IP。CS保持不变。保持不变。段间直接转移段间直接转移 指令中给出的指令中给出的16位的段和位的段和16位的偏移地址位的偏移地址送到送到CS和和IP。段间间接转移段间间接转移 MEMMEM中给出的中给出的16位的段和位的段和16位的偏移地址位的偏移地址送到送到CS和和IP。转移的目标地址由指令直接给出。指令中给出转移的目标地址由指令直接给出。指令中给出的目

3、标地址实际上是一个的目标地址实际上是一个相对于相对于IPIP的位移量的位移量:位移量位移量 转移范围转移范围 汇编语言中格式汇编语言中格式 8 8位位 -128-128+127 JMP SHORT OPRD+127 JMP SHORT OPRD 16 16位位 -32768-32768+32767 JMP NEAR PTR OPRD+32767 JMP NEAR PTR OPRD例:例:JMPJMP0120H0120H ;直接转向;直接转向0120H0120H JMP JMPSHORT LPISHORT LPI ;转向;转向LPILPI JMP JMPNEAR PTR BBBNEAR PTR

4、BBB;转向;转向BBBBBB由于是由于是段内段内转移转移,故转移后故转移后CSCS内容保持不变内容保持不变。段内直接转移段内直接转移段内间接转移段内间接转移转移的目标地址由转移的目标地址由寄存器寄存器或或存储单元存储单元的内容给出。的内容给出。例:例:JMP SI若指令执行前若指令执行前(SI)=1200H(SI)=1200H,则指令执行后,则指令执行后,(IP)=1200H,(IP)=1200H,于是转向代码段的偏移地址于是转向代码段的偏移地址1200H1200H处执行。处执行。注意:注意:目标地址以段内偏移的形式给出,而不是相对于目标地址以段内偏移的形式给出,而不是相对于IPIP的位移量

5、,所以它是一个的位移量,所以它是一个1616位的操作数。位的操作数。例例2:JMP BX+DI设指令执行前设指令执行前:(DS)=3000H,(BX)=1300H,(DS)=3000H,(BX)=1300H,(DI)=1200H,(32500H)=2350H (DI)=1200H,(32500H)=2350H;则指令执行后则指令执行后:(IP)=2350H:(IP)=2350H在汇编语言中在汇编语言中,段内间接寻址通常写成:段内间接寻址通常写成:JMPJMP WORDWORD PTR PTR BX+DIBX+DI表示所取得的目标地址是一个字。表示所取得的目标地址是一个字。段间直接转移段间直接转

6、移在指令中直接给出要转移到的目的段地址和在指令中直接给出要转移到的目的段地址和偏移地址。偏移地址。例:例:JMP2000:1000H执行时执行时,(IP)1000H,(CS)2000H,(IP)1000H,(CS)2000H注:注:直接地址为符号地址时,段间直接转移直接地址为符号地址时,段间直接转移指令中的符号地址前应加操作符指令中的符号地址前应加操作符FAR PTRFAR PTR。例:例:JMPFAR PTR far_label其中的其中的far_labelfar_label为远类型的标号。为远类型的标号。转移的目的地址转移的目的地址(段和偏移段和偏移)在两个相邻的在两个相邻的字存字存储单元

7、储单元中。例如:中。例如:JMPJMPDWORD PTRSIDWORD PTRSI设指令执行前设指令执行前:(DS)=4000H,(SI)=1212H,:(DS)=4000H,(SI)=1212H,(41212H)=1000H,(41214H)=4A00H (41212H)=1000H,(41214H)=4A00H则指令执行后则指令执行后:(IP)=1000H,(CS)=4A00H:(IP)=1000H,(CS)=4A00H于是转到于是转到4B000H4B000H处开始执行指令。处开始执行指令。例中的例中的DWORD PTRDWORD PTR表示转移地址是一个双字。表示转移地址是一个双字。段间

8、间接转移段间间接转移条件转移指令可实现程序的条件分支。条件转移指令可实现程序的条件分支。条件转移指令根据标志位的状态来决定是否进条件转移指令根据标志位的状态来决定是否进行分支转移。行分支转移。格式:格式:JCC label;CC为条件名称缩写为条件名称缩写指令的转移范围为指令的转移范围为-128-128+127+127字节。字节。(2)(2)条件转移指令条件转移指令 -J-JCCCC 根据单个标志位设置的条件转移指令根据单个标志位设置的条件转移指令JB/JC JB/JC ;低于;低于,或或CF=1,CF=1,则转移则转移JNB/JNC/JAE JNB/JNC/JAE;高于或等于;高于或等于,或

9、或CF=0,CF=0,则转移则转移JP/JPE JP/JPE ;奇偶标志;奇偶标志PF=1(PF=1(偶偶),),则转移则转移JNP/JPO JNP/JPO ;奇偶标志;奇偶标志PF=0(PF=0(奇奇),),则转移则转移JZ/JE JZ/JE ;结果为零;结果为零(ZF=1),(ZF=1),则转移则转移JNZ/JNE JNZ/JNE ;结果不为零;结果不为零(ZF=0),(ZF=0),则转移则转移JS JS ;SF=1,SF=1,则转移则转移JNS JNS ;SF=0,SF=0,则转移则转移JOJO ;OF=1,OF=1,则转移则转移JNOJNO ;OF=0,OF=0,则转移则转移这类指令主

10、要用来判断两个数的大小。这类指令主要用来判断两个数的大小。判断无符号数的大小判断无符号数的大小JA JA 高于则转移高于则转移 条件为条件为:CF=0:CF=0ZF=0ZF=0,即,即A AB BJNA/JBE JNA/JBE 低于或等于则转移低于或等于则转移 条件为条件为:CF=1:CF=1ZF=1ZF=1,即,即ABAB 根据组合条件设置的条件转移指令根据组合条件设置的条件转移指令lJG JG ;大于则转移;大于则转移(A(AB)B)条件为条件为:(SFOF=0):(SFOF=0)ZF=0ZF=0lJGE JGE ;大于或等于则转移;大于或等于则转移(AB)(AB)条件为条件为:(SFOF

11、=0):(SFOF=0)ZF=1ZF=1lJLE JLE ;小于或等于则转移;小于或等于则转移(AB)(AB)条件为条件为:(SFOF=1):(SFOF=1)ZF=1ZF=1lJL JL ;小于则转移;小于则转移(A(AB)B)条件为条件为:(SFOF=1):(SFOF=1)ZF=0ZF=0判断有符号数的大小判断有符号数的大小2.2.循环控制指令循环控制指令用在循环程序中以确定是否要继续循环。用在循环程序中以确定是否要继续循环。循环次数通常置于循环次数通常置于CXCX中。中。转移的目标应在距离本指令转移的目标应在距离本指令-128-128+127+127的的范围之内。范围之内。循环控制指令不影

12、响标志位。循环控制指令不影响标志位。(1)LOOP(1)LOOP格式:格式:LOOP LOOP label操作:操作:(CX)-1(CX)-1CXCX;若若(CX)0,(CX)0,则转至则转至label处执行;处执行;否则退出循环否则退出循环,执行执行LOOPLOOP后面的指令。后面的指令。LOOPLOOP指令与下面的指令段等价:指令与下面的指令段等价:DEC CXDEC CX JNZ JNZ label(2)LOOPZ(LOOPE)(2)LOOPZ(LOOPE)格式:格式:LOOPZ LOOPZ label操作:操作:(CX)-1(CX)-1CXCX;若若(CX)0(CX)0ZF=1,ZF=

13、1,则转至则转至label处执行;处执行;否则退出循环否则退出循环,执行执行LOOPLOOP后面的指令。后面的指令。(3)LOOPNZ(LOOPNE)格式:格式:LOOPNZ LOOPNZ label操作:操作:(CX)-1(CX)-1CXCX;若若(CX)0(CX)0ZF=0,ZF=0,则转至则转至label处执行;处执行;否则退出循环否则退出循环,执行执行LOOPLOOP后面的指令。后面的指令。循环指令的例子见下页。循环指令的例子见下页。例例1:给:给1A000H开始的开始的256个内存单元均减去个内存单元均减去1,若,若 发现某个单元减为发现某个单元减为0则立即退出循环,其后的单则立即退

14、出循环,其后的单元不再减元不再减1。MOV AX,1A00H MOV DS,AX MOV DI,0 MOV CX,256 GOON:DEC BYTE PTRDI INC DI CMP BYTE PTRDI-1,0 LOOPNZ GOON HLT 例例2:在:在8000H开始的长度为开始的长度为1000字节的字符串中查找字节的字符串中查找S,若找到,把其偏移地址记录在若找到,把其偏移地址记录在ADDR中,否则中,否则ADDR单元单元置为置为0FFFFH。MOV DI,8000H MOV CX,1000 MOV AL,S MOV ADDR,0FFFFH GOON:SCASB LOOPNZ GOON

15、 JNZ DONE DEC DI MOV ADDR,DI DONE:HLT 2.2.子程序调用和返回子程序调用和返回 子程序是完成特定功能的一段程序。子程序是完成特定功能的一段程序。当主程序(调用程序)需要执行这个功能时,当主程序(调用程序)需要执行这个功能时,采用采用CALL调用指令转移到该子程序的起始处执行;调用指令转移到该子程序的起始处执行;当运行完子程序功能后,当运行完子程序功能后,采用采用RET返回指令回到主程序继续执行。返回指令回到主程序继续执行。主程序与子程序主程序与子程序CALL label主程序主程序RET子程序子程序回到回到CALL指令后的指令处指令后的指令处返回地址返回地

16、址子程序调用指令子程序调用指令CALLCALL 类似类似JMP指令,指令,CALL指令可分成指令可分成 4 种类型:种类型:CALL label ;段内调用、直接寻址段内调用、直接寻址CALL r16/m16 ;段内调用、间接寻址段内调用、间接寻址CALL far ptr label;段间调用、直接寻址段间调用、直接寻址CALL far ptr mem;段间调用、间接寻址段间调用、间接寻址 但不同于但不同于JMP指令,指令,CALL指令需要保存返回地址:指令需要保存返回地址:段内调用段内调用入栈偏移地址入栈偏移地址IP:SPSP2,SS:SPIP段间调用段间调用入栈偏移地址入栈偏移地址IP和段

17、地址和段地址CS:SPSP2,SS:SPIP;SPSP2,SS:SPCS子程序返回指令子程序返回指令RETRET 根据段内和段间、有无参数,根据段内和段间、有无参数,RET指令分成指令分成 4 种类型:种类型:RET;无参数段内返回无参数段内返回RET i16;有参数段内返回有参数段内返回RET;无参数段间返回无参数段间返回RET i16;有参数段间返回有参数段间返回 RET指令弹出指令弹出CALL指令压入堆栈的返回地址:指令压入堆栈的返回地址:段内返回段内返回出栈偏移地址出栈偏移地址IP:IPSS:SP,SPSP2段间返回段间返回出栈偏移地址出栈偏移地址IP和段地址和段地址CS:IPSS:S

18、P,SPSP2;CSSS:SP,SPSP2i16参数的作用参数的作用调整堆栈指针调整堆栈指针SP返回指令RET的参数RET i16;有参数返回有参数返回 RET指令可以带有一个立即数指令可以带有一个立即数 i16,返回时堆栈指针返回时堆栈指针SP将增加,即将增加,即SPSP+i16。相当于一批参数出栈相当于一批参数出栈 这个特点使得程序可以方便地废除若干执行这个特点使得程序可以方便地废除若干执行CALL指令以前指令以前入栈的参数入栈的参数。返回指令RET的参数断点地址断点地址IP向子程序传向子程序传递的参数递的参数SP(返回前)(返回前)SP(返回后)(返回后)RET 5;主程序主程序mov

19、al,0fh;提供参数ALcall htoasc;调用子程序.;子程序:将子程序:将AL低低4位位(1位位16进制数进制数)转换成转换成ASCII码码htoasc:and al,0fh;只取al的低4位or al,30h;al高4位变成3cmp al,39h;是09,还是0Ah0Fhjbe htoendadd al,7;是0Ah0Fh,加上7htoend:ret;子程序返回例2.47:主程序与子程序3.3.中断指令中断指令 8086/8088 CPU 8086/8088 CPU在程序中允许安排一条中断指令在程序中允许安排一条中断指令来引起一个中断过程来引起一个中断过程,这种中断叫内部中断这种中

20、断叫内部中断,或叫软或叫软中断。中断。中断指令共有三条:中断指令共有三条:(1)INT n (1)INT n 执行类型执行类型n n的中断服务程序,的中断服务程序,N=0N=0255255 (2)INTO (2)INTO 执行溢出中断的中断服务程序执行溢出中断的中断服务程序 (3)IRET (3)IRET 从中断服务程序返回调用程序从中断服务程序返回调用程序(1)INT n ;n=0(1)INT n ;n=0255,255,为中断类型号为中断类型号本指令的操作步骤为:本指令的操作步骤为:(SP)-1,(SP)-2)(SP)-1,(SP)-2)(FLAGSFLAGS),SP(SP)-2SP(SP

21、)-2 保护标志寄存器的内容保护标志寄存器的内容IF0,TF0IF0,TF0 中断服务程序中禁止外部中断服务程序中禁止外部INTRINTR中断和单步中断中断和单步中断(SP)-1,(SP)-2)(SP)-1,(SP)-2)(CSCS),SP(SP)-2SP(SP)-2,CS(nCS(n*4+2)4+2)中断服务程序的段地址送入中断服务程序的段地址送入CSCS。n n*4 4为向量地址。该向量地址为向量地址。该向量地址中的内容即为中断服务程序入口地址。中的内容即为中断服务程序入口地址。(SP)-1,(SP)-2)(SP)-1,(SP)-2)(IPIP),SP(SP)-2SP(SP)-2,IP(n

22、IP(n*4)4)中断服务程序的偏移地址送中断服务程序的偏移地址送IPIP。INTINT指令只影响指令只影响IFIF和和TF,TF,对其余标志位无影响。对其余标志位无影响。INTINT指令可用于调用系统服务程序,如指令可用于调用系统服务程序,如INT 21HINT 21H(2)(2)溢出中断溢出中断INTO INTO检查溢出标志检查溢出标志OF,如果如果OF=1,=1,则启动则启动一个类型一个类型4 4的中断过程;如果的中断过程;如果OF=0 0,不做任何不做任何操作。操作。通常通常INTO指令安排在有符号数算术运算指令指令安排在有符号数算术运算指令后面。如后面。如IMUL DXINTO ;若

23、溢出,则启动若溢出,则启动INT 4,否则继续否则继续MOV RESULT,AXMOV RESULT+2,DX 用于从中断服务程序返回被中断的程序。用于从中断服务程序返回被中断的程序。任何中断服务程序不任何中断服务程序不管是外部中断引起的管是外部中断引起的,还是内部中断引起的还是内部中断引起的,最后都要用最后都要用IRETIRET返回。返回。该指令执行的操作为:该指令执行的操作为:IP(SP)+1,(SP);IP(SP)+1,(SP);栈顶内容弹出到栈顶内容弹出到IPIP SP(SP)+2 SP(SP)+2 CS(SP)+1,(SP);CS(SP)+1,(SP);栈顶内容弹出到栈顶内容弹出到C

24、SCS SP(SP)+2 SP(SP)+2 FLAGS(SP)+1,(SP);FLAGS(SP)+1,(SP);栈顶内容弹出到栈顶内容弹出到FLAGFLAG SP(SP)+2 SP(SP)+2(3)(3)中断返回指令中断返回指令IRETIRET3.3.7 3.3.7 处理器控制指令处理器控制指令1.1.标志操作指令标志操作指令 用来设置标志位的状态。用来设置标志位的状态。(1 1)CFCF设置指令设置指令 CLC 0 0CFCF STC 1 1CFCF CMC CF CF变反变反 (2 2)DFDF设置指令设置指令 CLD 0 0DF(DF(串操作的指针移动方向从低到高串操作的指针移动方向从低

25、到高)STD 1 1DF(DF(串操作的指针移动方向从高到低串操作的指针移动方向从高到低)(3 3)IFIF设置指令设置指令CLI 0 0IF(IF(禁止禁止INTRINTR中断中断)STI 1 1IF(IF(开放开放INTRINTR中断中断)2.2.外部同步指令外部同步指令(1 1)ESCESC换码指令换码指令(2)WAITWAIT等待指令等待指令(3)LOCKLOCK封锁总线指令封锁总线指令执行执行HLTHLT指令时指令时,CPU,CPU进入暂停状态进入暂停状态,设置该指令通设置该指令通常是为了等待中断。常是为了等待中断。外部中断外部中断(包括包括IF=1IF=1时的可屏蔽中断请求时的可屏

26、蔽中断请求INTRINTR及及非屏蔽中断请求非屏蔽中断请求NMI)NMI)或复位信号可让或复位信号可让CPUCPU退出暂停退出暂停状态。状态。HLTHLT不影响标志位。不影响标志位。3.3.停机指令和空操作指令停机指令和空操作指令(1)停机指令停机指令HLT(2)(2)空操作指令空操作指令NOPNOPNOPNOP指令不做任何实质性的操作指令不做任何实质性的操作,但占用但占用3 3个时钟周期个时钟周期,然后执行下一条指令。然后执行下一条指令。多用于延时或预留存储空间多用于延时或预留存储空间(占位子占位子)。1、假设、假设(CS)=3000H,(DS)=4000H,(ES)=2000H,(SS)=

27、5000H,(AX)=2060H,(BX)=3000H,(CX)=5,(DX)=0,(SI)=2060H,(DI)=3000H,(43000H)=0A006H,(23000H)=0B116H,(33000H)=0F802H,(25060H)=00B0H,.(SP)=0FFFEH,(CF)=1,(DF)=1,请写出下列各条指令单独执行完后请写出下列各条指令单独执行完后,有关寄存器及存储单元有关寄存器及存储单元的内容的内容,若影响标志位请给出标志位若影响标志位请给出标志位SF、ZF、OF、CF的值。的值。(1)SBB AX,BX (2)MUL BYTE PTRBX (3)AAM (4)DIVBH

28、(5)SARAX,CL (6)XORAX,0FFE7H (7)REPSTOSB (8)JMPWORD PTRBX (9)XCHG AX,ES:BX+SI 二、下列程序段是比较二、下列程序段是比较AX,BX,CX中带符号中带符号数的大小,将最大数放在数的大小,将最大数放在AX中。请将程序中。请将程序填充完整。填充完整。CMP AX,BX (1)NEXT XCHG AX,BXNEXT:(2)AX,CX JGE OUT (3)AX,CXOUT:三、执行完下列程序后,回答指定的问题。三、执行完下列程序后,回答指定的问题。MOV AX,0 MOV BX,2 MOV CX,50LP:ADD AX,BX ADD BX,2 LOOP LP问:问:(1)该程序的功能是该程序的功能是 。(2)程序执行完成后,(程序执行完成后,(AX)=。

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!