32位微机原理与接口技术钱晓捷课件04.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《32位微机原理与接口技术钱晓捷课件04.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 32 微机 原理 接口 技术 钱晓捷 课件 04
- 资源描述:
-
1、钱晓捷,微机原理与接口技术钱晓捷,微机原理与接口技术基于基于IA-32IA-32处理器和处理器和3232位汇编语言位汇编语言第第 4 4 章章汇编语言程序设计汇编语言程序设计4.1 4.1 分支程序结构分支程序结构4.2 4.2 循环程序结构循环程序结构4.3 4.3 子程序结构子程序结构4.4 Windows4.4 Windows应用程序编程应用程序编程4.5 4.5 与与C+C+语言的混合编程语言的混合编程微机原理与接口技术第5版机械工业出版社4.1 4.1 分支程序结构分支程序结构改变程序执行顺序、形成分支、循环、调用改变程序执行顺序、形成分支、循环、调用等程序结构是很常见的程序设计问题
2、等程序结构是很常见的程序设计问题高级语言采用高级语言采用IFIF等语句表达条件,并根据条等语句表达条件,并根据条件是否成立转向不同的程序分支件是否成立转向不同的程序分支汇编语言需要汇编语言需要首先利用比较首先利用比较CMPCMP、测试、测试TESTTEST、加减、加减运算、逻辑运算等影响状态标志的运算、逻辑运算等影响状态标志的指令形成条件指令形成条件然后利用条件转移指令判断由标志然后利用条件转移指令判断由标志表达的条件表达的条件, ,并根据标志状态控制程序并根据标志状态控制程序转移到不同的程序段转移到不同的程序段微机原理与接口技术第5版机械工业出版社4.1.1 4.1.1 无条件转移指令无条件
3、转移指令程序代码在代码段程序代码在代码段CSCS:指明代码段在主存中的段基地址:指明代码段在主存中的段基地址EIPEIP:给出将要执行指令的偏移地址:给出将要执行指令的偏移地址程序顺序执行,处理器自动增量程序顺序执行,处理器自动增量EIPEIP程序控制转移,程序控制转移,EIPEIP随之改变随之改变程序转移到另外的代码段,程序转移到另外的代码段,EIPEIP和和CSCS都改变都改变控制转移类指令:改变控制转移类指令:改变EIPEIP(有些也改变(有些也改变CSCS),即改变程序执行顺序(实现程序控制),即改变程序执行顺序(实现程序控制转移)的指令转移)的指令本章学习本章学习控制转移类指令控制转
4、移类指令微机原理与接口技术第5版机械工业出版社1. 1. 转移范围转移范围段内转移段内转移在当前代码段范围内的程序转移在当前代码段范围内的程序转移不需更改不需更改CSCS,只要改变只要改变EIPEIP(偏移地址)(偏移地址)近转移(近转移(NearNear):3232位近转移位近转移NEAR32NEAR32,1616位近位近转移转移NEAR16NEAR16短转移(短转移(ShortShort):转移范围在:转移范围在127127-128-128字节字节段间转移段间转移从当前代码段跳转到另一个代码段从当前代码段跳转到另一个代码段需要更改需要更改CSCS(段地址)和(段地址)和EIPEIP(偏移地
5、址)(偏移地址)远转移(远转移(FarFar): 4848位远转移位远转移FAR32FAR32,3232位远转位远转移移FAR16FAR16微机原理与接口技术第5版机械工业出版社2. 2. 指令寻址方式指令寻址方式相对寻址方式相对寻址方式提供目标地址相对于当前指令指针提供目标地址相对于当前指令指针EIPEIP的位移量的位移量目标地址(转移后的目标地址(转移后的EIPEIP)当前)当前EIPEIP位移量位移量相对寻址都是段内转移,最常用、最灵活相对寻址都是段内转移,最常用、最灵活直接寻址方式直接寻址方式直接提供目标地址直接提供目标地址目标地址(转移后的目标地址(转移后的CSCS和和EIPEIP)
6、指令操作数)指令操作数间接寻址方式间接寻址方式指示寄存器或存储单元指示寄存器或存储单元目标地址来自寄存器或存储单元、间接获得目标地址来自寄存器或存储单元、间接获得寄存器间接寻址:用寄存器保存目标地址寄存器间接寻址:用寄存器保存目标地址存储器间接寻址:用存储单元保存目标地址存储器间接寻址:用存储单元保存目标地址目标地址目标地址目的地址目的地址转移地址转移地址微机原理与接口技术第5版机械工业出版社3. JMP3. JMP指令指令无条件转移:程序无条件改变执行顺序无条件转移:程序无条件改变执行顺序JMPJMP指令相当于高级语言的指令相当于高级语言的gotogoto语句语句JMP labelJMP l
7、abel; ;程序转向程序转向labellabel标号指定的地址标号指定的地址; ;段内相对寻址,段间直接寻址段内相对寻址,段间直接寻址JMP reg32/reg16JMP reg32/reg16; ;程序转向寄存器指定的地址程序转向寄存器指定的地址; ;寄存器间接寻址寄存器间接寻址JMP mem48/mem32/mem16JMP mem48/mem32/mem16; ;程序转向存储单元指定的地址程序转向存储单元指定的地址; ;存储器间接寻址存储器间接寻址微机原理与接口技术第5版机械工业出版社JMPJMP指令的指令的4 4种类型种类型1. 1. 段内转移、相对寻址段内转移、相对寻址标号指明目标
8、地址,指令代码包含位移量标号指明目标地址,指令代码包含位移量2. 2. 段内转移、间接寻址段内转移、间接寻址通用寄存器或主存单元包含目标指令偏移地址通用寄存器或主存单元包含目标指令偏移地址3. 3. 段间转移、直接寻址段间转移、直接寻址标号包含目标指令的段地址和偏移地址标号包含目标指令的段地址和偏移地址4. 4. 段间转移、间接寻址段间转移、间接寻址3232位段用位段用3 3字存储单元包含目标地址字存储单元包含目标地址1616位段用双字存储单元包含目标地址位段用双字存储单元包含目标地址MASM会根据存储模式等信息自动识别会根据存储模式等信息自动识别微机原理与接口技术第5版机械工业出版社例例4-
9、14-1无条件转移程序无条件转移程序1 1; ; 数据段数据段00000000000000000000000000000000nvarnvardword ?dword ? ; ; 代码段代码段0000000000000000EB 01EB 01jmp labl1jmp labl1; ; 相对寻址相对寻址00000002000000029090nopnop0000000300000003E9 00000001E9 00000001labl1:labl1:jmpjmp near near ptrptr labl2 labl2; ; 相对近转移相对近转移00000008000000089090nop
10、nop0000000900000009B8 00000011 RB8 00000011 Rlabl2:labl2:movmov eax,offseteax,offset labl3 labl3 微机原理与接口技术第5版机械工业出版社例例4-14-1无条件转移程序无条件转移程序2 20000000E0000000EFF E0FF E0jmp eaxjmp eax; ; 寄存器间接寻址寄存器间接寻址00000010000000109090nopnop0000001100000011B8 00000022 RB8 00000022 Rlabl3:labl3:mov eax,offset labl4m
11、ov eax,offset labl40000001600000016A3 00000000 RA3 00000000 Rmov nvar,eaxmov nvar,eax0000001B0000001BFF 25 00000000 RFF 25 00000000 Rjmp nvarjmp nvar; ; 存储器间接寻址存储器间接寻址00000021000000219090nopnoplabl4:labl4: movmov ebx,offsetebx,offset nvarnvarjmpjmp near near ptrptr ebxebx ; ;数据的寄存器间接寻址数据的寄存器间接寻址数据的存
12、储器直接寻址数据的存储器直接寻址微机原理与接口技术第5版机械工业出版社4.1.2 4.1.2 条件转移指令条件转移指令根据指定的条件确定程序是否发生转移根据指定的条件确定程序是否发生转移JccJcc label label; ;条件满足,发生转移;否则,顺序执行下条指令条件满足,发生转移;否则,顺序执行下条指令LABELLABEL表示目标地址,采用段内相对寻址表示目标地址,采用段内相对寻址3232位位IA-32IA-32处理器:达到处理器:达到3232位的全偏移量位的全偏移量1616位位80 x8680 x86处理器:处理器:-128-128+127+127间的短转移间的短转移条件转移指令不影
13、响标志,但要利用标志条件转移指令不影响标志,但要利用标志cccc表示利用标志判断的条件,表示利用标志判断的条件,1616种、两类种、两类单个标志状态作为条件单个标志状态作为条件两数大小关系作为条件两数大小关系作为条件微机原理与接口技术第5版机械工业出版社转移条件转移条件cccc:单个标志状态:单个标志状态JZ/JEJZ/JEZF=1ZF=1Jump if Zero/EqualJump if Zero/EqualJNZ/JNEJNZ/JNEZF=0ZF=0Jump if Not Zero/Not EqualJump if Not Zero/Not EqualJSJSSF=1SF=1Jump if
14、 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 OddJump if Not Parity/Parity OddJOJOOF=1OF=1Jump if OverflowJump if OverflowJNOJNOOF=0OF=0Jump if Not OverflowJump if
15、 Not OverflowJCJCCF=1CF=1Jump if CarryJump if CarryJNCJNCCF=0CF=0Jump if Not CarryJump if Not Carry多个助记符方便记忆多个助记符方便记忆微机原理与接口技术第5版机械工业出版社转移条件转移条件cccc:两数大小关系:两数大小关系JB/JNAEJB/JNAECF=1CF=1Jump if Below/Not Above or EqualJump if Below/Not Above or EqualJNB/JAEJNB/JAECF=0CF=0Jump if Not Below/Above or Equ
16、alJump 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 if Less/Not Greater or EqualJump if Less/Not Greater or EqualJNL/
17、JGEJNL/JGESF=OFSF=OFJump if Not Less/Greater or EqualJump if Not Less/Greater or EqualJLE/JNGJLE/JNGSFOFSFOF或或ZF=1ZF=1Jump if Less or Equal/Not GreaterJump if Less or Equal/Not GreaterJNLE/JGJNLE/JGSF=OFSF=OF且且ZF=0ZF=0Jump if Not Less or Equal/GreaterJump if Not Less or Equal/Greater微机原理与接口技术第5版机械工业
18、出版社1. 1. 单个标志状态作为条件的条件转移指令单个标志状态作为条件的条件转移指令JZ(JE)JZ(JE)和和JNZ(JNE)JNZ(JNE):利用零位标志:利用零位标志ZFZF判断结果是零(相等)还是非零(不等)判断结果是零(相等)还是非零(不等)JSJS和和JNSJNS:利用符号标志:利用符号标志SFSF判断结果是负还是正判断结果是负还是正JOJO和和JNOJNO:利用溢出标志:利用溢出标志OFOF判断结果是溢出还是没有溢出判断结果是溢出还是没有溢出JP(JPE)JP(JPE)和和JNP(JPO)JNP(JPO):利用奇偶标志:利用奇偶标志PFPF判断结果低字节判断结果低字节“1”1”
19、的个数是偶数还是奇数的个数是偶数还是奇数JCJC和和JNCJNC:利用进位标志:利用进位标志CFCF判断结果是有进位(为判断结果是有进位(为1 1)还是无进位(为)还是无进位(为0 0)微机原理与接口技术第5版机械工业出版社例例4-24-2个数折半程序个数折半程序1 1mov eax,885mov eax,885; ; 假设一个数据假设一个数据shr eax,1shr eax,1; ; 数据右移进行折半数据右移进行折半jncjnc goeven goeven; ; 余数为余数为0 0,即,即CFCF0 0条件成立,转移条件成立,转移add eax,1add eax,1; ; 否则余数为否则余数
20、为1 1,即,即CFCF1 1,进行加,进行加1 1操作操作goeven:goeven: call dispuidcall dispuid; ; 显示结果显示结果 443运行结果微机原理与接口技术第5版机械工业出版社例例4-24-2个数折半程序个数折半程序2 2mov eax,886mov eax,886; ; 假设一个数据假设一个数据shr eax,1shr eax,1; ; 数据右移进行折半数据右移进行折半jcjc goodd goodd; ; 余数为余数为1 1,即,即CFCF1 1条件成立,转移到分条件成立,转移到分支体,进行加支体,进行加1 1操作操作jmpjmp goeven go
21、even; ; 余数为余数为0 0,即,即CFCF0 0,不需要处理,转移,不需要处理,转移到显示!到显示!goodd:goodd:add eax,1add eax,1; ; 进行加进行加1 1操作操作goeven:goeven: call dispuidcall dispuid; ; 显示结果显示结果jnc goeven 何不合二为一?何不合二为一?微机原理与接口技术第5版机械工业出版社例例4-24-2个数折半程序个数折半程序3 3mov eax,887mov eax,887; ; 假设一个数据假设一个数据shr eax,1shr eax,1; ; 数据右移进行折半数据右移进行折半adc e
22、ax,0adc eax,0; ; 余数余数CFCF1 1,进行加,进行加1 1操作操作;余数;余数CFCF0 0,没有加,没有加1 1call dispuidcall dispuid; ; 显示结果显示结果movmov eax,888 eax,888; ; 假设一个数据假设一个数据add eax,1add eax,1; ; 个数加个数加1 1rcrrcr eax,1 eax,1; ; 数据右移进行折半数据右移进行折半call call dispuiddispuid; ; 显示结果显示结果改进算法改进算法消除分支消除分支微机原理与接口技术第5版机械工业出版社例例4-34-3位测试程序位测试程序1
23、 1; ; 数据段数据段no_msgno_msgbyte Not Ready!,0byte Not Ready!,0yes_msgyes_msgbyte Ready to Go!,0byte Ready to Go!,0; ; 代码段代码段mov eax,56hmov eax,56h; ; 假设一个数据假设一个数据test eax,02htest eax,02h; ; 测试测试D1D1位位(D1(D11 1,其他位为,其他位为0)0)jzjz nom nom; D1; D10 0条件成立,转移条件成立,转移mov eax,offset yes_msgmov eax,offset yes_msg
24、; D1; D11 1,显示准备好,显示准备好jmp jmp donedone; ; 跳转过另一个分支体!跳转过另一个分支体!nom:nom:mov eax,offset no_msgmov eax,offset no_msg; ; 显示没有准备好显示没有准备好done:done:call dispmsgcall dispmsg微机原理与接口技术第5版机械工业出版社例例4-34-3位测试程序位测试程序2 2; ; 数据段数据段no_msgno_msgbyte Not Ready!,0byte Not Ready!,0yes_msgyes_msgbyte Ready to Go!,0byte R
25、eady to Go!,0; ; 代码段代码段mov eax,56hmov eax,56h; ; 假设一个数据假设一个数据test eax,02htest eax,02h; ; 测试测试D1D1位位(D1(D11 1,其他位为,其他位为0)0)jnzjnz yesm yesm; D1; D11 1条件成立,转移条件成立,转移mov eax,offset no_msgmov eax,offset no_msg; D1; D10 0,显示没有准备好,显示没有准备好jmpjmp done done; ; 跳转过另一个分支体!跳转过另一个分支体!yesm:yesm:mov eax,offset yes
展开阅读全文