您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 建筑材料 > 微机原理与接口技术第4章ppt
微机原理与接口技术·第4版——基于IA-32处理器和32位汇编语言第4章汇编语言程序设计4.1分支程序结构4.2循环程序结构4.3子程序结构4.4Windows应用程序编程4.5与C++语言的混合编程微机原理与接口技术·第4版机械工业出版社4.1分支程序结构改变程序执行顺序、形成分支、循环、调用等程序结构是很常见的程序设计问题高级语言采用IF等语句表达条件,并根据条件是否成立转向不同的程序分支汇编语言需要首先利用比较CMP、测试TEST、加减运算、逻辑运算等影响状态标志的指令形成条件然后利用条件转移指令判断由标志表达的条件,并根据标志状态控制程序转移到不同的程序段微机原理与接口技术·第4版机械工业出版社4.1.1无条件转移指令程序代码在代码段CS:指明代码段在主存中的段基地址EIP:给出将要执行指令的偏移地址程序顺序执行,处理器自动增量EIP程序控制转移,EIP随之改变程序转移到另外的代码段,EIP和CS都改变控制转移类指令:改变EIP(有些也改变CS),即改变程序执行顺序(实现程序控制转移)的指令本章学习控制转移类指令微机原理与接口技术·第4版机械工业出版社1.转移范围段内转移在当前代码段范围内的程序转移不需更改CS,只要改变EIP(偏移地址)近转移(Near):32位近转移NEAR32,16位近转移NEAR16短转移(Short):转移范围在127~-128字节段间转移从当前代码段跳转到另一个代码段需要更改CS(段地址)和EIP(偏移地址)远转移(Far):48位远转移FAR32,32位远转移FAR16微机原理与接口技术·第4版机械工业出版社2.指令寻址方式相对寻址方式提供目标地址相对于当前指令指针EIP的位移量目标地址(转移后的EIP)=当前EIP+位移量相对寻址都是段内转移,最常用、最灵活直接寻址方式直接提供目标地址目标地址(转移后的CS和EIP)=指令操作数间接寻址方式指示寄存器或存储单元目标地址来自寄存器或存储单元、间接获得寄存器间接寻址:用寄存器保存目标地址存储器间接寻址:用存储单元保存目标地址目标地址=目的地址=转移地址微机原理与接口技术·第4版机械工业出版社3.JMP指令无条件转移:程序无条件改变执行顺序JMP指令相当于高级语言的goto语句JMPlabel;程序转向label标号指定的地址;段内相对寻址,段间直接寻址JMPreg32/reg16;程序转向寄存器指定的地址;寄存器间接寻址JMPmem32/mem16;程序转向存储单元指定的地址;存储器间接寻址微机原理与接口技术·第4版机械工业出版社JMP指令的4种类型1.段内转移、相对寻址标号指明目标地址,指令代码包含位移量2.段内转移、间接寻址通用寄存器或主存单元包含目标指令偏移地址3.段间转移、直接寻址标号包含目标指令的段地址和偏移地址4.段间转移、间接寻址32位段用3字存储单元包含目标地址16位段用双字存储单元包含目标地址MASM会根据存储模式等信息自动识别微机原理与接口技术·第4版机械工业出版社〔例4-1〕无条件转移程序-1;数据段0000000000000000nvardword?;代码段00000000EB01jmplabl1;相对寻址0000000290nop00000003E900000001labl1:jmpnearptrlabl2;相对近转移0000000890nop00000009B800000011Rlabl2:moveax,offsetlabl3微机原理与接口技术·第4版机械工业出版社〔例4-1〕无条件转移程序-20000000EFFE0jmpeax;寄存器间接寻址0000001090nop00000011B800000022Rlabl3:moveax,offsetlabl400000016A300000000Rmovnvar,eax0000001BFF2500000000Rjmpnvar;存储器间接寻址0000002190noplabl4:movebx,offsetnvarjmpnearptr[ebx];数据的寄存器间接寻址数据的存储器直接寻址微机原理与接口技术·第4版机械工业出版社4.1.2条件转移指令根据指定的条件确定程序是否发生转移Jcclabel;条件满足,发生转移;否则,顺序执行下条指令LABEL表示目标地址,采用段内相对寻址32位IA-32处理器:达到32位的全偏移量16位80x86处理器:-128~+127间的短转移条件转移指令不影响标志,但要利用标志cc表示利用标志判断的条件,16种、两类单个标志状态作为条件两数大小关系作为条件微机原理与接口技术·第4版机械工业出版社转移条件cc:单个标志状态JZ/JEZF=1JumpifZero/EqualJNZ/JNEZF=0JumpifNotZero/NotEqualJSSF=1JumpifSignJNSSF=0JumpifNotSignJP/JPEPF=1JumpifParity/ParityEvenJNP/JPOPF=0JumpifNotParity/ParityOddJOOF=1JumpifOverflowJNOOF=0JumpifNotOverflowJCCF=1JumpifCarryJNCCF=0JumpifNotCarry多个助记符方便记忆微机原理与接口技术·第4版机械工业出版社转移条件cc:两数大小关系JB/JNAECF=1JumpifBelow/NotAboveorEqualJNB/JAECF=0JumpifNotBelow/AboveorEqualJBE/JNACF=1或ZF=1JumpifBelow/NotAboveJNBE/JACF=0且ZF=0JumpifNotBeloworEqual/AboveJL/JNGESF≠OFJumpifLess/NotGreaterorEqualJNL/JGESF=OFJumpifNotLess/GreaterorEqualJLE/JNGZF≠OF或ZF=1JumpifLessorEqual/NotGreaterJNLE/JGSF=OF且ZF=0JumpifNotLessorEqual/Greater微机原理与接口技术·第4版机械工业出版社1.单个标志状态作为条件的条件转移指令JZ(JE)和JNZ(JNE):利用零位标志ZF判断结果是零(相等)还是非零(不等)JS和JNS:利用符号标志SF判断结果是负还是正JO和JNO:利用溢出标志OF判断结果是溢出还是没有溢出JP(JPE)和JNP(JPO):利用奇偶标志PF判断结果低字节“1”的个数是偶数还是奇数JC和JNC:利用进位标志CF判断结果是有进位(为1)还是无进位(为0)微机原理与接口技术·第4版机械工业出版社〔例4-2〕个数折半程序-1moveax,885;假设一个数据shreax,1;数据右移进行折半jncgoeven;余数为0,即CF=0条件成立,转移addeax,1;否则余数为1,即CF=1,进行加1操作goeven:calldispuid;显示结果443运行结果微机原理与接口技术·第4版机械工业出版社〔例4-2〕个数折半程序-2moveax,886;假设一个数据shreax,1;数据右移进行折半jcgoodd;余数为1,即CF=1条件成立,转移到分支体,进行加1操作jmpgoeven;余数为0,即CF=0,不需要处理,转移到显示!goodd:addeax,1;进行加1操作goeven:calldispuid;显示结果jncgoeven何不合二为一?微机原理与接口技术·第4版机械工业出版社〔例4-2〕个数折半程序-3moveax,887;假设一个数据shreax,1;数据右移进行折半adceax,0;余数=CF=1,进行加1操作;余数=CF=0,没有加1calldispuid;显示结果moveax,888;假设一个数据addeax,1;个数加1rcreax,1;数据右移进行折半calldispuid;显示结果改进算法消除分支微机原理与接口技术·第4版机械工业出版社〔例4-3〕位测试程序-1;数据段no_msgbyte'NotReady!',0yes_msgbyte'ReadytoGo!',0;代码段moveax,56h;假设一个数据testeax,02h;测试D1位(D1=1,其他位为0)jznom;D1=0条件成立,转移moveax,offsetyes_msg;D1=1,显示准备好jmpdone;跳转过另一个分支体!nom:moveax,offsetno_msg;显示没有准备好done:calldispmsgjnzyesm;D1=1条件成立,转移moveax,offsetno_msg;D1=0,显示没有准备好jmpdone;跳转过另一个分支体!yesm:moveax,offsetyes_msg;显示准备好微机原理与接口技术·第4版机械工业出版社〔例4-4〕奇校验程序callreadc;键盘输入,AL=返回值calldispcrlf;回车换行(用于分隔)calldispbb;以二进制形式显示数据calldispcrlf;回车换行(用于分隔)andal,7fh;最高位置“0”、其他位不变;同时标志PF反映“1”的个数jnpnext;个数为奇数,不需处理,转移oral,80h;个数为偶数,最高位置“1”、其他位不变next:calldispbb;显示含校验位的数据微机原理与接口技术·第4版机械工业出版社2.两数大小关系作为条件的条件转移指令无符号数用高(Above)、低(Below)低于(不高于等于):JB(JNAE)不低于(高于等于):JNB(JAE)低于等于(不高于):JBE(JNA)不低于等于(高于):JNBE(JA)有符号数用大(Greater)、小(Less)小于(不大于等于):JL(JNGE)不小于(大于等于):JNL(JGE)小于等于(不大于):JLE(JNG)不小于等于(大于):JNLE(JG)微机原理与接口技术·第4版机械工业出版社〔例4-5〕数据比较程序-1;数据段in_msg1byte'Enteranumber:',0in_msg2byte'Enteranothernumber:',0out_msg1byte'Twonumbersareequal:',0out_msg2byte'Thelessnumberis:',0out_msg3byte13,10,'Thegreaternumberis:',0;代码段moveax,offsetin_msg1;提示输入calldispmsgcallreadsid;输入第一个数据movebx,eax;保存到EBXmoveax,offsetin_msg2;提示输入calldispmsgcallreadsid;输入第二个数据movecx,eax;保存到ECX微机原理与接口技术·第4版机械工业出版社〔例4-5〕数据比较程序-2cmpebx,ecx;二个数据进行比较jnenequal;两数不相等,转移moveax,offsetout_msg1calldispmsg;显示两数相等moveax,ebxcalldispsid;显示相等的数据jmpdone;转移到结束nequal:jlfirst;EBX较小,不需要交换,转移xchgebx,ecx;EBX保存较小数,ECX保存较大数微机原理与接口技术·第4版机械工业出版社〔例4-5〕数据比较程序-3first:moveax,offsetout_msg2;显示较小数calldispmsgmoveax,ebx;较小数在EBX中calldispsidmoveax,offsetout_msg3;显示较大数calldispmsgmoveax,ecx;较大数在ECX中calldispsiddone:微机原理与接口技术·第4版机械工业出版社4.1.3单分支结构只有一个分支的程序类似高级语言的IF-THEN语句结构注意采用正确的条件转移指令当条件满足(成立),发生转移,跳过分支体条件不满足,顺序向下执行分支体条件转移指令与高级
本文标题:微机原理与接口技术第4章ppt
链接地址:https://www.777doc.com/doc-4012309 .html