微机原理及接口技术 第3章 第5节 课件PPT课件_第1页
微机原理及接口技术 第3章 第5节 课件PPT课件_第2页
微机原理及接口技术 第3章 第5节 课件PPT课件_第3页
微机原理及接口技术 第3章 第5节 课件PPT课件_第4页
微机原理及接口技术 第3章 第5节 课件PPT课件_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

. 1、1、1、1,3.3.5在程序控制命令、程序控制命令中,转换命令环路控制命令调用和恢复命令中断命令、2、将程序转换到指定的目的地地址,从该地址执行新的段。 传输命令的本质:改变IP (或CS )的内容。 所有迁移命令都不会影响标志位。 分为无条件转移和条件转移。 1 .转移命令,3,(1)无条件转移命令-JMP本命令无条件地移动到指定的地址,执行从该地址开始的段。 根据CS、IP的设定方法,JMP指令可分为4种情况。 段内直接转移:由JMPdisp指令给出的8/16位的位移量加在IP中。 CS不变。 段内间接传送: JMPreg/memreg/mem的16位偏移地址发送IP。 CS不变。 将段间由jmp段:offset命令给出的16位段和16位偏移地址直接传输给CS和IP。 段间转发jmxmmem32em32中的16比特段和16比特偏移地址被转发给CS和IP。 4、转移地址由命令直接给出。 命令给出的目的地地址实际上是对于IP的位移量:在位移量过渡范围汇编语言中,格式为8比特- 128至127 jmpshortoprd 16比特- 32768至32767 jmpnearptroprd示例: JMP0120H; 由于向直接向0120HJMPSHORTLP转移的LPJMPNEARPTRBBB向BBB的转移是段内转移,因此转移后CS内容不变,段内直接转移,5、段内间接转移的目标地址由寄存器或存储单元的内容给出。 例1:JMPSI为(SI)=1200H时,执行指令后,为(IP)=1200H时,转移到代码段偏移地址1200H,开始执行。 注意:目标地址是16位操作数,因为它是作为段中的偏移量给出的,而不是相对于IP的位移量。 6、例2 :执行2:JMPBX DI命令前:(DS)=3000H、(BX)=1300H、(DI)=1200H、(32500H)=2350H; 在命令执行之后:(IP)=2350H汇集语言中,段内间接地址通常指示由JMPWORDPTRBX DI获取的目的地地址是单字。7、段间直接转送将转送目的地的段地址和偏移地址直接提供给命令。 例如:执行JMP2000H:1000H时,(IP)1000H、(CS)2000H注:直接地址是符号地址的情况下,在段间直接转换命令中的符号地址前附加运算符FARPTR。 示例:在JMPFARPTRfar_label中,far_label是远距离类型的标签。8、转送地址(段和偏移)在相邻的2个字存储单元中。 例如,当设置命令执行前:(DS)=4000H、(SI)=1212H、(41212H)=1000H、(41214H)=4A00H时,JMPDWORDPTRSI在执行命令之后变为:(IP)=1000H、(CS)=4A00H 示例中的DWORDPTR指示传输目的地为两个字。 段间转移,9,1212,4000,41212,DS,SI,00,10,00,4a,412121441215,1000,4a 00,IP,CS,段间转移操作图像,1111111,11101100,和条件分支指令根据标志比特的状态来决定是否进行分支。 型号: jxx标签; xx是条件名省略形式命令的迁移范围为-128 127字节。 主要条件分支指令见p132表3-4。 (2)条件分支命令-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等的指令主要用于判断两个个数的大小。通用命令序列包括CMPdist、src; 根据比较jxx标签的比较结果可知,无符号数的大小JA较高时,迁移(distsrc )迁移条件为:CF=0ZF=0JNA/JBE以下时,迁移(distsrc )迁移条件为:CF=1ZF=1,根据组合条件设定的条件迁移指令,13,jna/jbe 如果大于,则转变(distsrc )的转变条件为:(SFOF=0)ZF=0JGE; 如上所述,转移(distsrc )的转移条件为:(SFOF=0)ZF=1JL; 如果小于,则转变(dist(MAX ),则与转移到LARGERCMPAX,MIN的MIN单元的内容相比较,JLSMALL; (AX)(MIN )时,不需要转移到SMALLJMPGOON进行交换,GOONLARGER:MOVMAX、将转移到AX的数量在MAX单元中交换为JMPGOON的GOONSMALL:MOVMIN、将转移到AX的小数交换为MIN单元(CX)-1,CX不为0时,转移到NEXTHLT,16,2 .循环控制命令,决定是否在循环过程中继续循环。 循环数通常放置在CX上。 转移的目标必须在本指令-128 127的范围内。 循环控制命令不影响标志位。 17,(1)LOOP格式: 1)LOOP标签动作: (CX)-1CX; (CX)0时,在label中执行其他情况下,结束循环,执行循环后的命令。 注意: LOOP命令是DECCXJNZlabel,18,(2)LOOPZ(LOOPE )格式: LOOPZlabel动作: (CX)-1CX; 如果(CX)0ZF=1,则在label中执行其他操作时退出循环,然后执行循环后面的命令。 (3)LOOPNZ(LOOPNE )格式: loopnz标签动作: (CX)-1CX; 如果(CX)0ZF=0,则在label中执行其他操作时退出循环,然后执行循环后面的命令。从19,例如1A000H开始的256个存储单元减1,一个单元减0就结束循环,其后不再减1。 段如下:(逻辑地址为1A00:0H)MOVAX,1A00HMOVDS,AX; 1A00H段MOVDI,-1; 偏移地址设定初始化MOVCX,256的周期计数器GOON:INCDI偏移地址从0到DECBYTEPTRDI; (ds : di )-1 (ds : di ) looppnzgoon; (CX)0ZF=0时,到旋转的GOON为止,利用从HLT、20,例如8000H开始的长度1000字节的字符串检索s,如果发现,则将该偏移地址记录到ADDR,否则,将ADDR单元设为0FFFFH。 MOVDI、8000HMOVCX、1000MOVAL、smovaddr、0FFFFH; 如果找不到“s”,则发送0FFFFH,ADDR单元GOON:SCASB; LOOPNZGOON与文字s相比较; (CX)0ZF=0时JNZDONE; (CX)=0但不等于s(ZF )=0; 程序结束DECDI DI记录以下单元的地址MOVADDR、DI检查“s”的单元地址,在ADDRDONE:HLT,21,3 .过程调用和返回命令、过程(子程序)的一部分中输入特定功能特征性地调用子程序的话,IP(CS )的内容被压入堆栈顶端。 从子程序返回时,堆栈顶端的内容也弹出到IP(CS )。 子程序执行结束后,通常返回调用程序。 您可以使用一次定义并重复调用的参数调用来执行各种功能。 优点程序代码短,结构清晰,编程、调试、修改、易读。两个相关命令:子例程调用命令CALL子例程返回命令RET,22,一般格式: CALLsub; sub是子程序的入口,根据子程序入口的地址方式,子程序调用有4种。 段内直接调用子程序的偏移地址由CALL命令直接给出。 格式:执行CALLnear_procCALL时,首先堆叠IP内容,然后将命令提供的位移量与IP相加。 注:装配后的调用目标是对CALL的下一个命令的位移量。 例如CALL0120H; 子例程的偏移地址由指令给出,(1)调用指令CALL,23,其中在组件时计算位移量; 在3字节cs :0105001 BHcs :0120中,由于位移量为:0120-0105H=001BH,因此CALL0120H的机械代码为e 81 b 00 cs :0102 E8 cs 336001031 BC all 0120 HCC 形式:执行呼叫me m 16/reg 16呼叫时,首先堆栈IP内容,接着将指定的寄存器/存储器的内容发送给IP。 示例: CALLBX; 子程序地址从BX到CALLWORDPTRSI; 子例程地址位于存储器中,在段内间接地调用,25、IPHIPL、代码段、数据段、(DS)=8000H、(SI)=1200H、8120h、81201H、26、与子例程的段地址无关格式: CALLfar_proc far_proc为远程进程的地址命令的操作是cs内容堆栈ip内容堆栈cs片段地址ip偏移地址示例: CALL2000H:1000HCALLTIMER; TIMER是远程过程,段间直接调用,27,子例程的段和偏移地址是存储器中连续4个单元的内容。 格式: CALLmem32指令的行为是SP(SP)-2(SP) 1、(SP)(CS ); CS栈cs(mem 32 ) sp-2 (sp ) 1、(sp ) ) IP栈IP(mem32例如CALLDWORDPTRDI调用地址位于DI、DI 1、DI 2、DI 3个存储单元中。 字内容为偏置地址,高字内容为段地址。 段间间接调用,28,CALL,代码段,数据段,IPHIPL,CSHCSL,DI,DI 1,DI 2,DI 3,段间间接调用映像,calldword (DX)=? CS:2000HMOVAX,2012H; 2012HAX2003HMOVCX,200通道; 200chx2006hpushausx; CX的内容分发堆栈2007HCALL4000H 200A堆栈保存4000H堆栈200AHADDAX,BXSP200CHADDAX,dx 200 eh hltspcs :000 HMO vbx,200AH; 200A是BXPOPDX; 200A返回到向DXRET排出堆栈的主程序,0A,20,0c,20,30,段内的返回指令RET的操作,使子程序执行前的IP的内容复原。 段间返回命令RET的动作是恢复子例程执行前的IP和CS的内容。 还有另一个即时数的返回命令“RETn”。 n是偶数,表示从堆栈顶端弹出地址后丢弃的字节数。 例如返回RET4并丢弃堆栈的最高4字节,(2)返回指令RET,31,4 .中断指令8086/8088CPU允许在程序中放置中断指令以引起中断进程。 该中断称为内部中断或软中断。 中断的命令地址称为“断点”。 中断的详情将在第六章讨论。 中断命令包括: (1)INTn执行类型n的中断服务程序,n=0到255 (2) into执行溢出中断的中断服务程序;(3)IRET从中断服务程序返回到调用程序格式: INTn说明: CPU根据n的值计算中断向量的地址,其地址放在存储器的固定位置n4=向量地址上。 该矢量地址的内容是中断服务程序的入口地址(段:偏置),入口地址也称为“中断矢量”。0000:n4,XXH,XXH,yh,yh,中断服务程序入口的偏移地址(IP ),中断服务程序入口的段地址(CS ),中断类型代码n=0255,存储器,中断向量, INT命令的操作:将FLAGS推入堆栈INT命令的下一个命令的地址堆栈(堆栈CS和IP的内容)取得中断服务器程序的入口地址发送给CS和IP。INT命令仅影响IF (中断许可标志)和TF (跟踪标志),而不影响其馀标志位的INT命令可以包括INT21H,34,INT命令的操作实例:INT21H,

温馨提示

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

评论

0/150

提交评论