程序控制类指令_第1页
程序控制类指令_第2页
程序控制类指令_第3页
程序控制类指令_第4页
程序控制类指令_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

程序控制类指令转移指令循环控制子程序调用中断控制3.9转移指令通过修改指令的偏移地址或段地址及偏移地址实现程序的转移无条件转移指令

无条件转移到目标地址,执行新的指令有条件转移指令

在具备一定条件的情况下转移到目标地址无条件转移指令格式:JMPOPRD目标地址与JMP在同一代码段与JMP不在同一代码段原则上可实现在整个内存空间的转移无条件转移指令段内转移转移的目标地址在当前代码段内指令中直接给出目标地址由指令中的寄存器或存储器操作数指出目标地址段内直接寻址段内间接寻址无条件段内转移段内直接寻址JMPLabel近地址标号位移量下一条要执行指令的偏移地址=当前IP+位移量┇JMP┇┇Label代码段无条件段内转移段内间接寻址JMPBXJMPWORDPTR[BX]JMP┇┇┇代码段数据段BX=1200┇XXHXXHIP指令码无条件转移指令——段间转移转移的目标地址不在当前代码段内指令中直接给出目标地址由指令中的32位存储器操作数指出目标地址段间直接寻址段间间接寻址无条件段间转移段内直接寻址JMPFARLabel远地址标号JMPLabel┇┇┇代码段1Label与JMP之间的位移量代码段2XXHXXHXXHXXHIPCS无条件段间转移段内间接寻址JMPDWORDPTR[BX]XXHXXHXXHXXH[BX]IPCSJMP┇┇┇┇指令码代码段1代码段2数据段条件转移指令在满足一定条件下,程序转移到目标地址继续执行条件转移指令均为段内短转移,即转移范围为:-128~+127条件转移指令的应用1)简单条件(直接标志)转移指令(共10条)根据CF、ZF、SF、OF、PF分别为1或0,共有10种状态,设置了10种转移指令:JE/JZJSJOJCJP;标志为1转移JNE/JNZJNSJNOJNCJNP;标志为0转2)用于无符号数的条件转移指令

JA/JNBE;高于/不低于等于转移,CF∨ZF=0 ②

JNA/JBE;不高于/低于等于转移,CF∨ZF=1 ③

JB/JNAE;低于/不高于等于转移,CF=1 ④

JNB/JAE;不低于/高于等于转移,CF=03)用于带符号数的条件转移指令

JG/JNLE 大于/不小于等于转移,(SF∨OF)∨ZF=0 ②

JGE/JNL 大于等于/不小于转移,(SF∨OF)=0 ③

JL/JNGE 小于/不大于等于转移,(SF∨OF)=1 ④JLE/JNG 小于等于/不大于转移,(SF∨OF)∨ZF=1

转移指令例统计内存数据段中以TABLE为首地址的100个8位符号数中正数、负数和零元数的个数。转移指令例(流程图)将存放各元素个数的单元清零取首地址设串长度取一个字节数正数个数加1零元素加1为负?为零?负数个数加1NYNY3.10循环控制指令控制程序在以当前IP为中心的-128~+127范围内循环执行循环次数由CX寄存器指定

LOOPLOOPZLOOPNZ无条件循环指令格式:LOOPLABEL循环条件:CX≠0操作:DECCXJNZ符号地址条件循环指令格式:LOOPZLABELLOOPELABEL循环条件:CX≠0ZF=1格式:LOOPNZLABELLOOPNELABEL循环条件:CX≠0ZF=0例:在一个由17个字符组成的字符串STRING中,现在查找该字符串中是否包含空格字符(其ASCII码为20H),若未找到或尚未查完,则继续查找,直到找到第一个空格字符或查完了才退出循环。STRINGDB‘PersonalComputer’…MOVBX,OFFSETSTRINGDECBXMOVCX,17NEXT:INCBXCMP[BX],BYTEPTR20HLOOPNENEXT…方法二:MOVDI,OFFSETSTRINGMOVAL,20HMOVCX,17

REPNESACSBJZNEXTJMPNFOUNDNEXT:…NFOUND:…3.11子程序调用返回指令段内调用段间调用段内直接调用段内间接调用段间直接调用段间间接调用调用指令与转移指令的比较用于调用一个子过程调用前须保护断点地址子过程执行结束后要返回原调用处继续执行原程序断点恢复段内调用子过程与原调用程序在同一代码段,在调用之前只需保护断点的偏移地址格式:CALLNEARPROC近过程名断点入口地址段内调用例CALLTIMRECALLWORDPTR[SI]直接调用间接调用段间调用子过程与原调用程序不在同一代码段,在调用之前需保护断点的段基地址和偏移地址。先将断点的CS压栈,再压入IP格式:CALLFARPROC段间调用例CALLFARTIMRECALLDWORDPTR[SI]段间调用例格式:CALLFARPROC格式例:CALLFARTIMRECALLDWORDPTR[SI]XXHXXHCALL代码段数据段┇SIXXHXXHCSIP返回指令从堆栈中弹出断点地址,返回原程序格式:

RETRET指令一般位于子程序的最后3.12中断指令中断与过程调用:中断是随机事件或异常事件引起,调用则是事先已在程序中安排好响应中断请求不仅要保护断点地址,还要保护PSW内容调用指令在指令中直接给出子程序入口地址,中断指令只给出中断向量码,入口地址则在向量码指向的内存单元中1.中断指令格式:INTn说明:nх4中断类型码n=0〜255nх4

XXHXXHXXHXXH入口的段地址入口的偏移地址存放中断服务子程序入口地址的单元的偏移地址代码段数据段┇该单元在数据段,段地址=DS┇中断指令的执行过程将PSW压入堆栈;将INT指令的下一条指令的CS、IP压栈;由n×4得到存放中断向量的地址;将中断向量(中断服务程序入口地址)送CS和IP寄存器;转入中断服务程序。中断指令的执行过程n×4

22H11H00H67HIPCS68122HMOV代码段数据段┇堆栈段SPFLAGSHFLAGSLIPHCSLCSHIPL┇SPSPSP中断指令例执行程序段:

CSIP

┇6200H:0110HINT21H6200H:0112HMOVAX,BX

┇12H01H00H62HSP=1200PSWLPSWHSP=11FA执行INT指令后堆栈段中断指令例执行INT21H指令后IP=[21Hх4]CS==[(21Hх4)+2]0084H

23H11H00H20HIP

CS数据段┇

温馨提示

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

评论

0/150

提交评论