北航微机原理第八讲-课件_第1页
北航微机原理第八讲-课件_第2页
北航微机原理第八讲-课件_第3页
北航微机原理第八讲-课件_第4页
北航微机原理第八讲-课件_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

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

文档简介

第八讲8088指令系统(续)

2009.4.7(星期二)课程内容:

五、控制传送指令 六、处理器控制指令2020/12/271第八讲8088指令系统(续)

2009.4.7(星期二如何利用地址线产生脉冲三态总线两态总线KKK:MOVAL,(BX)CALLDELAY INCBX MOVAL,(BX) CALLDELAY JMPKKK2020/12/272如何利用地址线产生脉冲三态总线两态总线KKK:MOVAL精品资料精品资料你怎么称呼老师?如果老师最后没有总结一节课的重点的难点,你是否会认为老师的教学方法需要改进?你所经历的课堂,是讲座式还是讨论式?教师的教鞭“不怕太阳晒,也不怕那风雨狂,只怕先生骂我笨,没有学问无颜见爹娘……”“太阳当空照,花儿对我笑,小鸟说早早早……”北航微机原理第八讲-ppt课件精品资料5精品资料5你怎么称呼老师?如果老师最后没有总结一节课的重点的难点,你是否会认为老师的教学方法需要改进?你所经历的课堂,是讲座式还是讨论式?教师的教鞭“不怕太阳晒,也不怕那风雨狂,只怕先生骂我笨,没有学问无颜见爹娘……”“太阳当空照,花儿对我笑,小鸟说早早早……”66五.控制传送指令(Controltransferinstructions)控制传送指令概述

控制传送指令包括四种:

转移指令,循环控制指令,过程调用指令,中断指令。指令类型助记符无条件转移JMP条件转移JE/JZ,JNE/JNZ,JS,JNS,JP/JPE,JNP/JPO,JO,JNO,JC,JNC,JB/JNAE,JAE/JNB,JA/JNBE,JBE/JNA,JG/JNLE,JGE/JNL,JL/JNGE,JLE/JNG,JCXZ循环控制LOOP,LOOPE/LOOPZ,LOOPNE/LOOPNZ过程调用CALL,RET中断指令INT,INTO,IRET2020/12/277五.控制传送指令(Controltransferinst(一)、无条件转移指令 1.JMP(jmp)目标标号 JMP指令必须指定转移的目标地址(或转向地址)。 转移分成两类:段内或段间转移。

(1)段内直接转移:只要改变IP寄存器的内容 指在同一段的范围之内进行转移 (IP)←(IP)当前+目标标号所代表的地址偏移量 地址偏移量又称为符号地址 目标标号为8位,称为短转移。 目标标号为16位,称为近转移。

2020/12/278(一)、无条件转移指令2020/12/278例如:代码段内有一条无条件转移指令在汇编语言中使用符号地址。 JMPSHORTNEXT指令执行过程: NEXT—在汇编语言中使用符号地址 (IP)←(IP)当前+D8(8位带符号数)源程序:条件转移指令:JMPSHORTnext.........

next:MOVAL,03HOP......OP03H......3000:1000H3000:1050H(IP)当前(NEXT的值定义为50H)(IP)=(IP)当前+D8内存向前跳,D8为正数,往回跳,D8用补码JMPSHORTABC若ABC=0F0H,则回跳16字节2020/12/279例如:代码段内有一条无条件转移指令在汇编语言中使用符号地址。

(2)

段内间接转移:(CS)不变,只改变(IP)格式:JMPOPR

OPR—为16位寄存器、 或存储器(除立即数以外的任何一种寻址方式)执行操作: (IP)

(EA) 或(IP)

(reg16)

IP指针的内容根据寄存器或存储器(数据段、附加段、堆栈段)的内容而改变。指令格式举例:JMPBX JMPSIJMPTABLE[BX] ;操作数已定义为16位存储器JMPALPHA_WORD ;操作数已定义为16位存储器JMPWORDPTR[BP][DI];操作数已定义为16位存储器2020/12/2710(2)段内间接转移:(CS)不变,只改变(IP)例:(IP)=5000H,(CS)=3000H,(DS)=1000H,(BX)=1000H(11000H)=1234H,JMPBX ;(IP)=1000H,在当前段内,属于 ;寄存器寻址JMPWORDPTR[BX] ;(CS)=3000H,(IP)=1234H在当前段内,(PA)=(16d

(DS)+(BX))=(11000H)为1234H将PA地址存储器的内容(1234H)给IP;属于寄存器间接寻址。2020/12/2711例:2020/12/2711(3)段间直接转移:要修改IP、CS寄存器的内容。转到另一段去执行程序。

转移目标地址=新的段地址和偏移地址两部分组成。格式:JMPFARPTROPR;

OPR—在汇编语言中使用符号地址(如标号AKK,假设定义在另一程序段CC00:0044)。

转移地址与指令不在同一个段里。在机器语言中则要指定转向地址的偏移地址和段地址

JMPFARPTRAKK执行操作:

(IP)←OPR所在的段内偏移地址0044H。 (CS)←OPR所在的段的段址CC00H。直接转移通过符号地址加载IP和CS,间接转移通过存储器内容加载IP和CS.

2020/12/2712(3)段间直接转移:要修改IP、CS寄存器的内容。转到(4)段间间接转移:(CS)、(IP)都改变格式:JMP DWORDPTROPR

OPR—存储器操作数

(除立即数和寄存器以外的任何一种寻址方式)执行操作:将4字节连续地址分别送给IP和CS

(IP)←(EA)(CS)←(EA+2)例:已知(BX)=1000H,(SI)=2000H,(DS)=2000H (23000H)=2212H,(23002H)=4434H

JMPDWORDPTR[BX][SI]则:(BX)+(SI)=3000H(IP)=(PA)=(16d

(DS)+(BX)+(SI))=(23000H)=2212H(CS)=(PA+2)=4434H2020/12/2713(4)段间间接转移:(CS)、(IP)都改变202.条件转移指令

指令格式:JccOPR操作:根据上一条指令所设置的条件码来判别测试条件转移。 每一种条件转移指令都有它的测试条件。满足条件时: (IP)←(IP)当前+OPR(D8)

使用相对寻址方式,范围-128~+127个字节不满足条件时:(IP)不变,顺序执行下一条指令(该指令为两字节长度,一字节为指令功能码,一指令为一个字节的相对跳转地址偏移量)2020/12/27142.条件转移指令2020/12/2714按转移条件不同,条件转移指令可以分为四大类:①以单个状态标志作为转移条件助记符 转移条件助记符转移条件助记符转移条件JZ/JEZF=1JNZ/JNEZF=0JSSF=1JNSSF=0JOOF=1JNOOF=0JP/JPEPF=1JNP/JPOPF=0JCCF=1JNCCF=0②以CX的值为0作为转移条件助记符转移条件JCXZ CX=02020/12/2715按转移条件不同,条件转移指令可以分为四大类:助记符转移条件助助记符 转移条件JA/JNBECF∨ZF=0 高于/不低于等于JAE/JNB/JNCCF=0高于或等于/不低于/无进位JB/JNAE/JCCF=1 低于/不高于等于/有进位JBE/JNACF∨ZF=1 低于或等于/不高于③以两个无符号数比较的结果作为转移条件④以两个带符号数比较的结果作为转移条件助记符

转移条件

JG/JNLE(SF⊕OF)∨ZF=0 大于/不小于等于JGE/JNLSF⊕OF=0 大于或等于/不小于JL/JNGESF⊕OF=1 小于/不大于等于JLE/JNG(SF⊕OF)∨ZF=1 小于或等于/不大于2020/12/2716助记符 转移条件JA/JNBECF∨ZF=0 高于/不低于等注意几点:所有条件转移指令都是相对转移形式,(两字节指令) 范围(-128~+127)。 当需往一个较远地方进行条件转移时, 选用条件转移转到附近一个单元, 然后,再用无条件转移转到较远的目的地。②条件转移指令中,相当一部分指令是在比较完二个数大小后,根据结果而决定是否转移,③条件转移指令不影响标志位例:程序段2000H:3040HDONE:MOVAX,05H

…………

2000H:3079HJNEDONE

求DONE为何值2020/12/2717注意几点:2020/12/2717(IP)=(IP)当前程序段2000H:3040HDONE:MOVAX,05H…………2000H:3079HJNEDONE执行此指令时,IP指针为何OP05H......OPC5H......2000:3079H2000:3040H(IP)当前内存2000:307BHDONE1101100000+307BHC5H2020/12/2718(IP)=(IP)当前程序段执行此指令时,OP05H条件转移指令应用

例:比较二个数是否相等如相等做动作1否则做动作2

…… CMPAX,BX

JEaction_1Action_2:…………action_1:……

或 …… CMPAX,BX

JNZaction_2action_1: ……action_2: ……=?AXBXYaction_1action_2N=?AXBXNaction_2action_1Y2020/12/2719条件转移指令应用或 …

例:在M中有一个首地址为array的N字数组, 要求测试其中正数、0及负数的个数.(带符号数判断)正数个数放在:(DI)中,0的个数放在:(SI)中,负数的个数放在:N-(DI)-(SI)送(AX)如果没有负数转skip,如果有负数转neg_val程序:movcx,N;N字数组

movbx,0 movdi,bx movsi,bx again:cmpwordptrarrary[bx],0 jleless_or_ag

incdi ;正数个数 jmpshortneat less_or_ag:jlneat incsi ;0的个数neat: addbx,2 deccx jnzagain

movax,N subax,di

subax,si jzskip;没有负数 jmpnearptrneg_val;有负数skip:……neg_val:……

2020/12/2720例:在M中有一个首地址为array的N字数组,程序:m(三)过程(子程序)调用指令子程序—程序中具有独立功能的部分编写成独立程序模块。子程序(过程)定义格式:符号名(AA) PROC类型(FAR/NEAR) …… RET(RETURN) 符号名(AA) ENDP

子程序调用和返回指令:CALLAA过程有两种类型: 按过程与调用语句间的位置,过程有两种类型。 NEAR类型:调用指令与过程在同一个段中 FAR类型:调用指令与过程不在同一个段中CALL指令和RET指令都不影响条件码。2020/12/2721(三)过程(子程序)调用指令2020/12/2721CALL(Callaprocedure)调用CALL调用指令 调用地址由指令给出调用时:将当前地址入栈(CS)。 (IP)。CALL调用指令有4种:

段内直接调用 段间直接调用 段内间接调用 段间间接调用2020/12/2722CALL(Callaprocedure)调用2020/例:CSEG1 SEGMENT

CALLFARPTRsubp;此处的CS:IP入栈转subp

…CSEG1ENDSCSEG2SEGMENT …

subpPROCFAR

RETsubpENDPCSEG2ENDS2020/12/2723例:202(2)、RET(Returefromprocedure)返回RET返回指令 放在子程序的末尾 使子程序在功能完成后返回调用程序继续执行。*为能准确返回,返回指令类型与调用指令类型相对应。RET返回指令有4种: 段内返回 段间返回 段内带立即数返回 段间带立即数返回在子程序调用时,返回地址入栈返回时:将返回地址出栈(IP)(段内或段间)。 (CS)(段间)。2020/12/2724(2)、RET(Returefromproce操作数执行操作符号地址(SHORT) (IP)←(IP)当前+8位符号地址位移量(段内短跳)符号地址(NEAR属性)(IP)←(IP)当前+16位符号地址位移量(段内近跳)reg(16位)或mem(W类型)(IP)←(reg)或(IP)←(mem)(段内间接跳)符号地址(FAR属性)(IP)←符号地址的偏值(段间直接跳)(CS)←符号地址的段值mem(DW类型) (IP)←(mem),(CS)←(mem+2)(段内短跳)

◢当前IP的值为控制转移指令下一条指令的偏移地址。

◢位移量=符号地址的偏移量-当前IP的值。◢符号地址(目标地址)=当前IP的值+位移量(3)、小结:指令格式:JMP操作数2020/12/2725操作数执行操作符号地址(SHORT) (IP)←(转移方式:由CS是否变化、以及操作数类型决定情况如下表转移方式CS操作数跳转范围段内直接短方式不变符号地址(SHORT)-128~127即0~FFH段内直接近方式不变符号地址(NEAR属性)一个段内0~FFFFH段内间接方式不变Regmem(W类型)一个段内0~FFFFH段间直接方式变符号地址(FAR属性)整个内存0~FFFFFH段间间接方式变mem(DW类型)整个内存0~FFFFFH2020/12/2726转移方式:由CS是否变化、以及操作数类型决定情况如下表各控制转移指令允许使用的转移方式转移方式无条件转移JMP条件转移Jcc循环转移LOOPxx子程调用CALL段内直接短方式√ √√×段内直接近方式√××√段内间接方式√××√段间直接方式√××√段间间接√××√2020/12/2727各控制转移指令允许使用的转移方式转移方式无条件转移J例: JMPagain (√) JMPBX (√) JMPWORDPTR[BX] (√) JMPDWORDPTR (√) JZAX(不能是字,AX) (×) JNZnext (?) (若next的位移量超出-128~127)2020/12/2728例: JMPagain (四)循环控制指令格式:LOOPxx符号地址执行操作:①(CX)←(CX)-1此操作不影响标志②检查转移条件xx,满足转向目标地址去执行;不满足执行LOOPxx后一条指令转移方式只允许段内直接短方式,跳转范围-128~127助记符转移条件不转移条件LOOPCX≠0CX=0LOOPZCX≠0且ZF=1(相等)CX=0或ZF=0(不等)LOOPNZCX≠0且ZF=0(不等)CX=0或ZF=1(相等)

2020/12/2729(四)循环控制指令助记符转移条件不转移条件LOOPCX≠0C与条件转移指令不同的是:循环指令隐含(CX)减1操作。例:用循环指令将BL寄存器的内容按二进制形式显示出来学习:LOOP指令

MOVCX,8next:ROLBL,1 MOVDL,BL ANDDL,00000001B

ADDDL,00110000B MOVAH,2 INT21H

DECCX JNZnext ……LOOPnext2020/12/2730与条件转移指令不同的是:循环指令隐含(CX)减1操作循环指令说明:

LOOP退出循环条件是(CX)=0LOOPZ和LOOPNZ提供了提前结束循环的可能, 不一定要等到(CX)=0才退出循环。▲在串中查找字符,查到了,就可退出,可用LOOPNZ,不相等时继续查找。▲比较两串时,当有字符不等,就可退出,说明两字符串不等。可用LOOPZ,当相等时继续比较。▲执行完LOOPNZ或LOOPZ后,根据ZF标志的值判断结果 对查找字符,ZF=1,说明找到;否则没有找到。 对串比较,ZF=1,说明两串相等;否则不等。2020/12/2731循环指令说明:2020/12/2731

例:在string字符串中查找空格字符,串长度为N。用条件转移:JZ

MOVCX,NMOVAX,SEGstringMOVDS,AXLEABX,stringMOVAL,20Hnext:CMPAL,[BX] JZfind INCBX DECCX JNZnext 未找到处理

……Find:找到处理

……修改偏址BXYNAL

关键字CX串长度NDS:BX串首址判[BX]是关键字?

(CX)(CX)-1找到处理未找到处理

(CX)=0?YN结束出口2020/12/2732例:在string字符串中查找空格字符,串长度为N。用 MOVCX,28H MOVSI,0FFFFHNEXT1:INCSI CMPBYTEPTR[SI],0

LOOPZNEXT1

;当Z=1、(CX)≠0循环; 当Z=0,或(CX)=0结束循环。

JNZOKK ;当找到非零元素转OKK。 CALLDISPLAY1 ;当找不到非零元素转DISPLAY1 ……OKK:CALLDISPLAY2 ……用LOOPZ和LOOPNZ指令提供提前结束循环的可能性。有时需要字符串中查找一个字符,找到后可提前结束循环, 用LOOPZ、LOOPNZ来处理。例:40个元素构成的数组,找出第一个非零元素。

DISPLAY1…… RETDISPLAY2…… RET指令JMP、CALL、Jcc、LOOPxx本身对标志无影响。2020/12/2733 MOVCX,28H 用LOO4、中断指令中断(Interrupt): 有时当系统运行或程序运行期间遇到某些特殊情况,需要计算机自动执行一组专门的例行程序来进行处理。中断例行程序(或中断子程序)(Interruptroutine): 所执行的这组程序就称为中断子程序。种类:中断分为内部(软)中断和外部(硬)中断两种。内部中断—如除法运算中除数为0、中断指令引起的中断。外部中断—处理I/O设备与CPU之间的通信。2020/12/27344、中断指令2020/12/2734CPU响应一次中断自动完成三件事情:(PSW)入栈—保护现场,(CS),(IP)保存入栈—保留断点,转中断例行程序去执行。

中断返回时:

恢复(IP)、(CS)及(PSW)中断向量:中断例行程序入口地址。IBM-PC中,存储器的最底地址00000H——003FFH为中断向量区,存放256种类型中断例行程序入口地址,每个中断向量占4个单元。中断指定类型号N×4——取得指定类型的中断向量地址。2020/12/2735CPU响应一次中断自动完成三件事情:2020/12/2735例:中断类型9,9×

4=36

00024H——00027H单元中放中断向量。IBM-PC机中为每个类型规定了一种功能。中断类型功能类型0除数为0中断例行程序类型1单步类型2非屏蔽中断,NMI类型3设置断点类型4溢出处理中断,INTO指令类型10显示设备中断类型20程序结束中断类型21DOS系统功能调用功能程序*除非特别注明,类型号是以16进制形式表示的。2020/12/2736例:中断类型9,9×4=36中断类型功能类型0除数(1).介绍几条指令:INTn,IRET格式:INTn ;n—常数或表达式,n=0—255 或INT执行操作: (SP)←(SP)-2,(SP))←(PSW) (SP)←(SP)-2,(SP))←(CS) (SP)←(SP)-2,←(IP)

(IP)←(N×4) (CS)←(N×4+2)清除IF、TF,避免进入中断以后不被外面其它中断所打断 及进入中断以后按单步执行。2020/12/2737(1).介绍几条指令:INTn,IRET2020/1

类型0~3的中断称为内部中断。

类型0:指令系统没有INT0这条指令

除数为0中断 除数为0:它既不是外部中断也不是软件中断。 是由CPU自身产生的,所以无对应中断指令。

有符号数进行除法所得的商超出规定范围 有符号数进行除法运算,所得的商超出规定范围,

CPU自动产生类型为0的中断,转入响应的中断处理程序。。2020/12/2738类型0~3的中断称为内部中断。2020/12/273内存0:0000H~0:03FFH区域中,构成中断向量表,存放中断处理程序入口地址。每4个单元对应1个中断源。关系如下表:中断处理程序入口地址的地址类型00000H~00001H类型0(IP)00002H~00003H类型0(CS)00004H~00005H类型1(IP)00006H~00007H类型1(CS)00008H~00009H类型2(IP)0000AH~0000BH类型2(CS)0000CH~0000DH类型3(IP)0000EH~0000FH类型3(CS)00010H~00011H类型4(IP)00012H~00013H类型4(CS)…………003FCH~003FDH类型255(IP)003FEH~003FFH类型255(CS)2020/12/2739内存0:0000H~0:03FFH区域中,构成中断向量表,存∴INTO跟在有符号数+、-后面:*这条指令可以写在一条算术指令后面。若产生溢出,OF=1,则启动中断过程,不进行任何操作。(2)IRET——从中断返回指令(Interruptreturn)所有中断过程(服务程序)不管是硬还是软,最后一条指令一定是: IRET退出中断过程,返回中断时断点。格式:IRET执行操作:

(IP)←((SP)+1,(SP)),(SP)←

温馨提示

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

评论

0/150

提交评论