80X86指令系统13课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《80X86指令系统13课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 80 X86 指令系统 13 课件
- 资源描述:
-
1、1(Control transfer instructions)(一)、(一)、第1页,共74页。2无条件地将控制转移到指令中规定的目的地无条件地将控制转移到指令中规定的目的地目标地址可以是:直接方式目标地址可以是:直接方式/间接方式给出。间接方式给出。JMP指令不影响标志位。指令不影响标志位。转移分成两类:段内或段间转移。转移分成两类:段内或段间转移。无条件转移指令有五种格式:无条件转移指令有五种格式:q 段内直接短转移段内直接短转移q 段内直接近转移段内直接近转移q 段内间接转移段内间接转移q 段间直接远转移段间直接远转移q 段间间接转移段间间接转移第2页,共74页。3汇编程序设计中常利用
2、条件转移指令来实现分支。汇编程序设计中常利用条件转移指令来实现分支。操作数必须是短标号。操作数必须是短标号。JZ(JE)/JNZ(JNE),),JS/JNS,JO/JNO,JP(JPE)/JNP(JPO),JB(JNAE、JC)/JNB(JAE、JNC),),JB(JNAE、JC)/JNB(JAE、JNC),),JBE(JNA)/JNBE(JA)JL(JNGE)/JNL(JGE),),JLE(JNG)/JNLE(JG)JCXZ第3页,共74页。4 如果有一些程序段在不同地方反复出现,可以将这些程序如果有一些程序段在不同地方反复出现,可以将这些程序段设计成为过程(子程序)供调用。过程结束,返回调
3、用处。段设计成为过程(子程序)供调用。过程结束,返回调用处。过程调用指令和返回指令过程调用指令和返回指令(1)、CALL(Call a procedure)调用调用 CALL调用指令调用指令 段内直接调用段内直接调用段间直接调用段间直接调用 段内间接调用段内间接调用段间间接调用段间间接调用(2)、RET(Reture from procedure)返回返回 RET返回指令返回指令段内返回段内返回段间返回段间返回 段内带立即数返回段内带立即数返回段间带立即数返回段间带立即数返回第4页,共74页。5 循环控制指令用于使一些程序段反复执行形成循环程序循环控制指令用于使一些程序段反复执行形成循环程序。
4、循环控制指令有三种:循环控制指令有三种:(1)、LOOP (Loop)循环指令循环指令(2)、LOOPE/LOOPZ (Loop if equal/Loop if zero)当相等当相等/为为“0”循环循环(3)、LOOPNE/LOOPNZ (Loop if not equal/Loop if not zero)当不相等当不相等/不为不为“0”循环循环第5页,共74页。6 8086/8088CPU 可以在程序中安排一条中断指令引起可以在程序中安排一条中断指令引起中断过程中断过程,这种中断称为,这种中断称为软中断软中断。(1)、INT(Interrupt)(2)、INTO(Interrupt i
5、f overflow)(3)、IRET(Interrupt Return)第6页,共74页。7第7页,共74页。8(Control transfer instructions)转移转移将程序控制从一处转换到另一处的最直接方法。将程序控制从一处转换到另一处的最直接方法。在在CPU内部,转移是通过将目标地址传送给内部,转移是通过将目标地址传送给CS:IP来实现的。来实现的。第8页,共74页。9q 先介绍控制和非控制转移指令的概念先介绍控制和非控制转移指令的概念 非控制转移指令非控制转移指令:指令本身对指令本身对CS和和IP均无操作,形成顺序均无操作,形成顺序 执行结构。执行结构。顺序执行结构:顺序
6、执行结构:顺序存放,顺序执行顺序存放,顺序执行 控制转移指令控制转移指令:以以CS和和IP为主要操作对象,为主要操作对象,改变改变CS和和IP寄存器的值,寄存器的值,就改变了程序执行的流程。就改变了程序执行的流程。第9页,共74页。10在在8086/8088中,指令的地址固定由中,指令的地址固定由CS和和IP两个寄存器决定。两个寄存器决定。CS和和IP两寄存器的内容决定了程序的流程两寄存器的内容决定了程序的流程,q ,CS =FFFFH,IP =0 故故 第一条指令在内存的第一条指令在内存的ROM区。区。q CPU取来一条指令后,取来一条指令后,自动将自动将IP的值加上该指令的字节数,的值加上
7、该指令的字节数,使使IP顺序指向下一条指令,顺序指向下一条指令,CPU取来紧接着的指令执行。取来紧接着的指令执行。(此时此时IP的变化由的变化由CPU内部的硬件自动完成内部的硬件自动完成)第10页,共74页。11 控制转移指令改变控制转移指令改变CS和和IP的值,的值,使程序产生分支、调用结构。使程序产生分支、调用结构。例:比较例:比较 AX、BX 的大小,将大数存于(的大小,将大数存于(max)单元)单元 CMP AX,BX great XCHG AX,BX great:MOV max,AX第11页,共74页。12JMP(jmp)跳转指令。)跳转指令。JMP指令必须指定转移的目标地址(或转向
8、地址)。指令必须指定转移的目标地址(或转向地址)。转移分成两类:段内或段间转移。转移分成两类:段内或段间转移。段内转移:只要改变段内转移:只要改变IPIP寄存器的内容寄存器的内容 指在同一段的范围之内进行转移指在同一段的范围之内进行转移 即用新的转移目标地址代替原有的即用新的转移目标地址代替原有的IP值。值。段间转移:要修改段间转移:要修改IPIP、CSCS寄存器的内容寄存器的内容 转到另一段去执行程序。转到另一段去执行程序。即即转移目标地址转移目标地址=新的段地址和偏移地址两部分组成新的段地址和偏移地址两部分组成。第12页,共74页。13段内直接短转移:段内直接短转移:格式:格式:JMP S
9、HORT OPR OPR在汇编语言中使用符号地址。在汇编语言中使用符号地址。在机器语言中存放位移量在机器语言中存放位移量D8位移量位移量D8=符号地址的偏移地址符号地址的偏移地址-当前当前IP的值的值 执行操作:执行操作:IP IP 当前当前+D8 SHORT 短属性标号短属性标号8位位移量位位移量D8的范围在(的范围在(-128 127)之间)之间,占有一个字节。,占有一个字节。而指令本身占有两个字节。而指令本身占有两个字节。第13页,共74页。14例如:代码段内有一条无条件转移指令,在汇编语言中使用符号例如:代码段内有一条无条件转移指令,在汇编语言中使用符号地址地址JMP SHORT NE
10、XT指令执行过程:指令执行过程:NEXT在汇编语言中使用符号地址在汇编语言中使用符号地址 IP IP当前当前+D8源程序:源程序:条件转移指令:JMP SHORT 条件转移指令:JMP SHORT nextnext.next:next:MOV AL,03HMOV AL,03HOPOP50H50H.OPOP03H03H.3000:1000H3000:1000H3000:1050H3000:1050H(IP)(IP)当前当前D D8 8=50H=50H=1050H-1000H=1050H-1000H(IP)=(IP)当前+D8(IP)=(IP)当前+D8内存内存第14页,共74页。15 段内直接近
11、转移:段内直接近转移:格式:格式:JMP NEAR PTR OPR OPR在汇编语言中使用符号地址在汇编语言中使用符号地址。在机器语言中存放位移量在机器语言中存放位移量D16位移量位移量D16=符号地址的偏移地址符号地址的偏移地址 -当前当前IP的值的值 执行操作:执行操作:IP IP 当前当前+D16 NEAR近属性标号近属性标号位移量为位移量为D16范围:范围:-32768+32767H,占有两个字节。,占有两个字节。而指令本身占有三个字节。而指令本身占有三个字节。可以转移到段内的任一位置。可以转移到段内的任一位置。过程:如同过程:如同SHORT,只是位移量为,只是位移量为D16范围范围-
12、32768+32767H,占有两个字节。占有两个字节。第15页,共74页。16 段内间接转移段内间接转移:CS 不变,只改变不变,只改变 IP 格式:格式:JMP WORD PTR OPROPR 为为16位寄存器、位寄存器、或存储器(除立即数以外的任何一种寻址方式)或存储器(除立即数以外的任何一种寻址方式)执行操作:执行操作:IP (EA)或或 IP reg16指令格式举例:指令格式举例:JMP AXJMP SIJMP TABLE BX;操作数已定义为操作数已定义为16位存储器位存储器JMP ALPHA_WORD;操作数已定义为;操作数已定义为16位存储器位存储器JMP WORD PTR BP
13、DI第16页,共74页。17例:例:DS =1000H,BX=1000H,CX=5000H,CS=3000H (11000H)=1234H,(11002H)=5678HJMP CX;IP=5000HJMP WORD PTR BX;CS=3000H,IP=1234H(PA)=(16d DS+BX)=(11000H)=1234H 第17页,共74页。18 段间直接(远)转移:段间直接(远)转移:(CS)、(IP)都改变都改变 格式:格式:JMP FAR PTR OPR;OPR在汇编语言中使用符号地址。在汇编语言中使用符号地址。符号地址与指令不在同一个段里。符号地址与指令不在同一个段里。在机器语言中
14、则要指定转向地址的偏移地址和段地址在机器语言中则要指定转向地址的偏移地址和段地址执行操作:执行操作:IP OPR所在的段内偏移地址。所在的段内偏移地址。CS OPR所在的段的段址。所在的段的段址。而指令本身占有而指令本身占有5个字节:个字节:用用2个字分别存放符号地址的段值、偏移值,个字分别存放符号地址的段值、偏移值,用用1个字节存放操作码。个字节存放操作码。第18页,共74页。19FAR 远属性标号远属性标号,标号与控制转移指令不在同一段中。标号与控制转移指令不在同一段中。在汇编语言中,在机器语言中存放如下:在汇编语言中,在机器语言中存放如下:例:例:C1 SEGMENT JMP FAR P
15、TR next_prog C1 ENDS C2 SEGMINT next_prog:C2 ENDS2000:0250HE AE A5 05 00 20 20 00 02 02 0OPOP码码新新(IP)=0250H(IP)=0250H新新(CS)=2000H(CS)=2000HJMPJMP指令指令C1C1段段C2C2段段20000H20000Hnext_prog:next_prog:20250H20250H第19页,共74页。20 段间间接转移:段间间接转移:(CS)、(IP)都改变都改变格式:格式:JMP DWORD PTR OPR OPR 使用存储器使用存储器(除立即数和寄存器以外的任何一
16、种寻址方式)(除立即数和寄存器以外的任何一种寻址方式)执行操作:执行操作:IP(EA)CS(EA+2)例:已知例:已知 BX=1000H,SI=2000H ,DS=2000H(23000H)=2211H,(23002H)=4433HJMP DWORD PTR BXSI则:则:BX+SI=3000H IP=(PA)=(16d(DS)+(BX)+(SI)=(23000H)=2211H CS=(PA+2)=4433H第20页,共74页。21(2)Jcc 条件转移指令条件转移指令 根据单个条件标志的设置情况转移根据单个条件标志的设置情况转移(10种种)JZ(JE)/JNZ(JNE),JP(JPE)/J
17、NP(JPO),JS/JNS,JO/JNO,JC/JNC 根据两个无符号数比较结果转移(根据两个无符号数比较结果转移(4种)种)JB(JNAE)/JNB(JAE),JBE(JNA)/JNBE(JA)比较两个带符号数,并根据比较结果转移(比较两个带符号数,并根据比较结果转移(4种)种)JL(JNGE)/JNL(JGE),JLE(JNG)/JNLE(JG)第21页,共74页。22指令格式:指令格式:J cc OPR操作:根据上一条指令所设置的操作:根据上一条指令所设置的条件码条件码来判别测试条件转移。来判别测试条件转移。每一种条件转移指令都有它的测试条件。每一种条件转移指令都有它的测试条件。满足条
18、件时满足条件时:IP IP 当前当前+使用相对寻址方式,范围使用相对寻址方式,范围-128+127个字节个字节 即条件转移指令都是即条件转移指令都是“直接短转移直接短转移”不满足条件时:不满足条件时:IP 不变,顺序执行下一条指令不变,顺序执行下一条指令第22页,共74页。23所有条件转移指令都是所有条件转移指令都是相对转移形式相对转移形式,范围(范围(-128+127)。)。当需往一个较远地方进行条件转移时,当需往一个较远地方进行条件转移时,选用条件转移转到附近一个单元,选用条件转移转到附近一个单元,然后,再用无条件转移转到较远的目的地。然后,再用无条件转移转到较远的目的地。条件转移指令中,
19、相当一部分指令是在条件转移指令中,相当一部分指令是在比较比较完二个数大完二个数大小后,根据结果而决定是否转移,小后,根据结果而决定是否转移,条件转移指令不影响标志位条件转移指令不影响标志位第23页,共74页。24按转移条件不同,条件转移指令可以分为四大类:按转移条件不同,条件转移指令可以分为四大类:以单个状态标志作为转移条件助记符以单个状态标志作为转移条件助记符 转移条件转移条件 以以CX的值为的值为0作为转移条件作为转移条件JCXZCX=0第24页,共74页。25JA/JNBECFZF=0高于高于/JAE/JNBCF=0 高于等于高于等于/JB/JNAECF=1 /不高于等于不高于等于JBE
20、/JNACFZF=1/不高于不高于以两个无符号数比较的结果作为转移条件以两个无符号数比较的结果作为转移条件以两个带符号数比较的结果作为转移条件以两个带符号数比较的结果作为转移条件JG/JNLE(SF OF)ZF=0大于大于/JGE/JNL SF OF=0 大于或等于大于或等于/JL/JNGE SF OF=1 /不大于等于不大于等于JLE/JNG(SF OF)ZF=1/不大于不大于第25页,共74页。26条件转移指令应用条件转移指令应用 例:比较二个数是否相等例:比较二个数是否相等 如相等做动作如相等做动作1 否则做动作否则做动作2 CMP AX,BX Action_2:或或 CMP AX,BX
21、 action_1:第26页,共74页。27例:例:两个数放在两个数放在X,Y单元里,单元里,(带符号数判断带符号数判断)先判先判X50,YEStoo_high,NO 做做X-Y,溢出溢出overflow,否则求,否则求|X-Y|result MOV AX,X CMP AX,50 JG too_high ;大于转大于转too_highSUB AX,YJO overflow ;溢出转溢出转overflowJNS nonneg ;S=0转转nonneg NEG AX nonneg:MOV result,AX too_high:overflow:第27页,共74页。28 例:在存储器中有一个首地例:
22、在存储器中有一个首地址为址为array的的N个个字的字的数组,要数组,要求测试其中正数、求测试其中正数、0及负数的及负数的个数个数.(带符号数判断带符号数判断)正数个数放在正数个数放在:DI 中,中,0的个数放在的个数放在:SI 中,中,负数个数负数个数N-DI-SI 送送AX 如果没有负数转如果没有负数转skip,如果有负数转如果有负数转neg_val程序:程序:mov cx,N ;N字数组字数组 mov bx,0 mov di,bx mov si,bx again:cmp word ptr arrarybx,0 jle less_or_ag inc di ;正数个数正数个数jmp shor
23、t neat less_or_ag:jl neat inc si ;0的个数的个数neat:add bx,2dec cx jnz again mov ax,Nsub ax,disub ax,sijz skip ;没有负数没有负数jmp near ptr neg_val;有负数有负数skip:neg_val:第28页,共74页。292、过程过程(子程序子程序)调用指令调用指令过程过程程序中具有独立功能的部分编写成独立程序模块。程序中具有独立功能的部分编写成独立程序模块。过程(子程序)定义过程(子程序)定义格式:格式:符号名符号名 PROC 类型类型 符号名符号名 ENDP 子程序调用和返回指令:
24、子程序调用和返回指令:过程有两种类型:过程有两种类型:按过程与调用语句间的位置,过程有两种类型。按过程与调用语句间的位置,过程有两种类型。NEAR类型:调用指令与过程在同一个段中类型:调用指令与过程在同一个段中FAR类型:调用指令与过程不在同一个段中类型:调用指令与过程不在同一个段中CALL指令和指令和RET指令都不影响条件码。指令都不影响条件码。第29页,共74页。30(1)、)、CALL(Call a procedure)调用调用 CALL调用指令调用指令调用地址由指令给出调用地址由指令给出CALL调用指令有调用指令有4 4种:种:段内直接调用段内直接调用段间直接调用段间直接调用 段内间接
25、调用段内间接调用段间间接调用段间间接调用第30页,共74页。31 段内直接调用段内直接调用格式:格式:;SP SP -2,(SP+1),(SP)IP ;IP IP+D16 DST给出转向地址(子程序的入口地址)。给出转向地址(子程序的入口地址)。D16机器指令中的位移量(转向地址和返回地址之差)机器指令中的位移量(转向地址和返回地址之差)位移量为位移量为D16范围范围-32768+32767H,占有两个字节。,占有两个字节。第31页,共74页。32工作过程如下:工作过程如下:例:例:过程过程 code SEGMENT ;code段段 CALL subp ;指令指令YYY的的IP入栈入栈,D16
展开阅读全文