第5章控制转移和程序结构.ppt

上传人:王** 文档编号:613876 上传时间:2023-12-08 格式:PPT 页数:72 大小:621.50KB
下载 相关 举报
第5章控制转移和程序结构.ppt_第1页
第1页 / 共72页
第5章控制转移和程序结构.ppt_第2页
第2页 / 共72页
第5章控制转移和程序结构.ppt_第3页
第3页 / 共72页
第5章控制转移和程序结构.ppt_第4页
第4页 / 共72页
第5章控制转移和程序结构.ppt_第5页
第5页 / 共72页
第5章控制转移和程序结构.ppt_第6页
第6页 / 共72页
第5章控制转移和程序结构.ppt_第7页
第7页 / 共72页
第5章控制转移和程序结构.ppt_第8页
第8页 / 共72页
第5章控制转移和程序结构.ppt_第9页
第9页 / 共72页
第5章控制转移和程序结构.ppt_第10页
第10页 / 共72页
亲,该文档总共72页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第5章控制转移和程序结构.ppt》由会员分享,可在线阅读,更多相关《第5章控制转移和程序结构.ppt(72页珍藏版)》请在优知文库上搜索。

1、微型计算机原理及应用微型计算机原理及应用l5.1 5.1 目标地址寻址方式目标地址寻址方式l5.2 5.2 分支程序结构分支程序结构l5.3 5.3 循环程序结构循环程序结构l5.4 5.4 子程序结构子程序结构25.1 目标地址的寻址方式l 程序代码在代码段;程序代码在代码段;CSCS:指明代码段在主存中的开始位置、即段基地址;:指明代码段在主存中的开始位置、即段基地址;EIPEIP:给出将要执行指令的偏移地址;:给出将要执行指令的偏移地址;l 程序顺序执行,微处理器自动增量程序顺序执行,微处理器自动增量EIPEIP;程序控制转;程序控制转移,移,EIPEIP随之改变;随之改变;l 程序转移

2、到另外的代码段,程序转移到另外的代码段,EIPEIP和和CSCS都将改变;都将改变;l 控制转移类指令:改变控制转移类指令:改变EIPEIP(有时(有时CSCS),即改变程序),即改变程序执行顺序(实现程序控制转移)的指令;执行顺序(实现程序控制转移)的指令;l 目标地址寻址方式目标地址寻址方式:指明目的地、即目标地址的方法;:指明目的地、即目标地址的方法;目标地址目标地址目的地址目的地址转移地址转移地址35.1.1 转移范围l1.1.段内转移段内转移 在当前代码段范围内的程序转移;在当前代码段范围内的程序转移;不需更改不需更改CSCS,只改只改EIPEIP(偏移地址);(偏移地址);近转移近

3、转移(NearNear):):1616位段是位段是1616位近转移位近转移NEAR16NEAR16,3232位段是位段是3232位近转移位近转移NEAR32NEAR32;短转移短转移(ShortShort):转移范围在):转移范围在127127-128-128字节;字节;l2.2.段间转移段间转移 需要更改需要更改CSCS(段地址)和(段地址)和EIPEIP(偏移地址);(偏移地址);远转移远转移(FarFar):):1616位段是位段是3232位远转移位远转移FAR16FAR16,3232位段是位段是4848位远转移位远转移FAR32FAR32;45.1.2 目标地址寻址方式l 1.1.相对

4、寻址方式相对寻址方式 提供目标地址相对于当前指令指针提供目标地址相对于当前指令指针EIPEIP的位移量;的位移量;目标地址(转移后的目标地址(转移后的EIPEIP)当前当前EIPEIP位移量;位移量;相对寻址都是段内转移,最常用、最灵活;相对寻址都是段内转移,最常用、最灵活;l 2.2.直接寻址方式直接寻址方式 直接提供目标地址;直接提供目标地址;目标地址(转移后的目标地址(转移后的CSCS和和EIPEIP)指令操作数;)指令操作数;l 3.3.间接寻址方式间接寻址方式 由寄存器或存储单元提供跳转地址;由寄存器或存储单元提供跳转地址;目标地址来自寄存器或存储单元、间接获得;目标地址来自寄存器或

5、存储单元、间接获得;寄存器间接寻址:用寄存器保存目标地址;寄存器间接寻址:用寄存器保存目标地址;存储器间接寻址:用存储单元保存目标地址;存储器间接寻址:用存储单元保存目标地址;55.1.3 无条件转移指令JMPl JMP labelJMP label;程序转向程序转向labellabel标号指定的地址标号指定的地址;有段内相对寻址,段间直接寻址有段内相对寻址,段间直接寻址;JMP reg16/reg32JMP reg16/reg32;程序转向寄存器指定的地址程序转向寄存器指定的地址;为寄存器间接寻址为寄存器间接寻址;JMP mem16/mem32JMP mem16/mem32;程序转向存储单元

6、指定的地址程序转向存储单元指定的地址;为存储器间接寻址为存储器间接寻址;6JMP指令的4种类型1.1.段内转移、相对寻址段内转移、相对寻址 标号指明目标地址,指令代码包含位移量;标号指明目标地址,指令代码包含位移量;2.2.段内转移、间接寻址段内转移、间接寻址 通用寄存器或主存单元包含目标指令的偏移地址;通用寄存器或主存单元包含目标指令的偏移地址;3.3.段间转移、直接寻址段间转移、直接寻址 标号包含目标指令的段地址和偏移地址;标号包含目标指令的段地址和偏移地址;4.4.段间转移、间接寻址段间转移、间接寻址 1616位段用双字存储单元包含目标地址;位段用双字存储单元包含目标地址;3232位段用

7、位段用3 3字存储单元包含目标地址;字存储单元包含目标地址;MASM会根据存储模式等信息自动识别会根据存储模式等信息自动识别7例题5-1无条件转移程序-1;数据段数据段00000000 0000 0000nvarnvardw?dw?;代码段代码段00100010 EB 01 EB 01jmpjmp labl1 labl1;8 8位位移量位位移量00120012 90 90nopnop00130013 B8 FF02 B8 FF02labl1:labl1:mov ax,type labl1mov ax,type labl100160016 E9 0001 E9 0001jmpjmp near p

8、tr labl2 near ptr labl2;1616位位移量位位移量00190019 90 90nopnop001A001A B8 0020 R B8 0020 Rlabl2:labl2:mov ax,offset labl3 mov ax,offset labl3;001D001D FF E0 FF E0jmpjmp ax ax001F001F 90 90nopnop00200020 B8 002B R B8 002B Rlabl3:labl3:mov ax,offset labl4mov ax,offset labl400230023 A3 0000 R A3 0000 Rmov nv

9、ar,axmov nvar,ax00260026 FF 26 0000 R FF 26 0000 Rjmpjmp nvar nvar002A002A 90 90nopnop 相对短转移相对短转移 相对近转移相对近转移 寄存器间接近转移寄存器间接近转移 存储器间接近转移存储器间接近转移85.2 分支程序结构5.2.1 条件转移指令Jcc J Jcccc label labell 根据指定的条件确定程序是否发生转移;根据指定的条件确定程序是否发生转移;条件满足,发生转移;否则,顺序执行下一条指令;条件满足,发生转移;否则,顺序执行下一条指令;l LABELLABEL表示目标地址,采用段内相对寻址方

10、式;表示目标地址,采用段内相对寻址方式;1616位位CPUCPU:字节位移量(:字节位移量(-128-128+127+127短转移);短转移);3232位位CPU:CPU:多字节位移量(达到多字节位移量(达到3232位的全偏移量);位的全偏移量);l 条件转移指令不影响标志,但要利用标志;条件转移指令不影响标志,但要利用标志;l cccc表示利用标志判断的条件,表示利用标志判断的条件,1616种、两类;种、两类;单个标志状态作为条件;单个标志状态作为条件;两数大小关系作为条件;两数大小关系作为条件;9转移条件cc:单个标志状态JZ/JEJZ/JEZF=1ZF=1Jump if Zero/Equ

11、alJump if Zero/EqualJNZ/JNEJNZ/JNEZF=0ZF=0Jump if Not Zero/Not EqualJump if Not Zero/Not EqualJSJSSF=1SF=1Jump if SignJump if SignJNSJNSSF=0SF=0Jump if Not SignJump if Not SignJP/JPEJP/JPEPF=1PF=1Jump if Parity/Parity EvenJump if Parity/Parity EvenJNP/JPOJNP/JPOPF=0PF=0Jump if Not Parity/Parity OddJ

12、ump if Not Parity/Parity OddJOJOOF=1OF=1Jump if OverflowJump if OverflowJNOJNOOF=0OF=0Jump if Not OverflowJump if Not OverflowJCJCCF=1CF=1Jump if CarryJump if CarryJNCJNCCF=0CF=0Jump if Not CarryJump if Not Carry10转移条件cc:两数大小关系JB/JNAEJB/JNAECF=1CF=1Jump if Below/Not Above or EqualJump if Below/Not A

13、bove or EqualJNB/JAEJNB/JAECF=0CF=0Jump if Not Below/Above or EqualJump if Not Below/Above or EqualJBE/JNAJBE/JNACF=1CF=1或或ZF=1ZF=1Jump if Below/Not AboveJump if Below/Not AboveJNBE/JAJNBE/JACF=0CF=0且且ZF=0ZF=0Jump if Not Below or Equal/AboveJump if Not Below or Equal/AboveJL/JNGEJL/JNGESFOFSFOFJump

14、if Less/Not Greater or EqualJump if Less/Not Greater or EqualJNL/JGEJNL/JGESF=OFSF=OFJump if Not Less/Greater or EqualJump if Not Less/Greater or EqualJLE/JNGJLE/JNGZFOFZFOF或或ZF=1ZF=1 Jump if Less or Equal/Not GreaterJump if Less or Equal/Not GreaterJNLE/JGJNLE/JGSF=OFSF=OF且且ZF=0ZF=0Jump if Not Less

15、 or Equal/GreaterJump if Not Less or Equal/Greater11例题5-2实现指令CBW功能的程序-1l80868086指令指令CBWCBW(等于(等于IA-32IA-32指令指令MOVSX AX,ALMOVSX AX,AL)如果如果ALAL最高位为最高位为0 0,则设置,则设置AHAH0 0;如果如果ALAL最高位为最高位为1 1,则设置,则设置AHAHFFHFFH;l如何判断如何判断ALAL最高位是最高位是“0”0”,还是,还是“1”1”;逻辑与逻辑与“80H”80H”结果为结果为0 0,ALAL最高位最高位0 0;否则是;否则是1 1 运算结果是否

16、为运算结果是否为0 0,零位标志,零位标志ZFZF反映;反映;JZJZ或或JNZJNZ指令判断并转移;指令判断并转移;12例题5-2实现指令CBW功能的程序-2 mov al,bvar mov al,bvar;取出要判断的数据取出要判断的数据 test al,80h test al,80h;测试最高位测试最高位 jz jz next1 next1 ;最高位为最高位为0 0(ZFZF1 1)转移到标号)转移到标号NEXT1NEXT1;mov ah,0ffh mov ah,0ffh;最高位为最高位为1 1,顺序执行:设置,顺序执行:设置AHAHFFHFFH;jmp jmp done done ;无条件跳过另一个分支无条件跳过另一个分支next1:mov ah,0next1:mov ah,0;最高位为最高位为0 0转移到此执行:设置转移到此执行:设置AHAH0 0 done:done:不等于零转移不等于零转移等于零转移等于零转移13例题5-2实现指令CBW功能的程序-3mov al,bvarmov al,bvar;取出要判断的数据取出要判断的数据cmp al,0cmp al,0;与与0 0比

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

copyright@ 2008-2023 yzwku网站版权所有

经营许可证编号:宁ICP备2022001189号-2

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