欢迎来到天天文库
浏览记录
ID:56475047
大小:744.50 KB
页数:142页
时间:2020-06-19
《微机原理与接口技术第4章课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第4章汇编语言程序设计4.1分支程序结构4.2循环程序结构4.3子程序结构4.4Windows应用程序编程4.5与C++语言的混合编程4.1分支程序结构改变程序执行顺序、形成分支、循环、调用等程序结构是很常见的程序设计问题高级语言采用IF等语句表达条件,并根据条件是否成立转向不同的程序分支汇编语言需要首先利用比较CMP、测试TEST、加减运算、逻辑运算等影响状态标志的指令形成条件然后利用条件转移指令判断由标志表达的条件,并根据标志状态控制程序转移到不同的程序段4.1.1无条件转移指令程序代码在代码段CS:指明代码段在主存中的段基地址EIP:给出将要执行指令的偏移地址程
2、序顺序执行,处理器自动增量EIP程序控制转移,EIP随之改变程序转移到另外的代码段,EIP和CS都改变控制转移类指令:改变EIP(有些也改变CS),即改变程序执行顺序(实现程序控制转移)的指令本章学习控制转移类指令1.转移范围段内转移在当前代码段范围内的程序转移不需更改CS,只要改变EIP(偏移地址)近转移(Near):32位近转移NEAR32,16位近转移NEAR16短转移(Short):转移范围在127~-128字节段间转移从当前代码段跳转到另一个代码段需要更改CS(段地址)和EIP(偏移地址)远转移(Far):48位远转移FAR32,32位远转移FAR162.指
3、令寻址方式相对寻址方式提供目标地址相对于当前指令指针EIP的位移量目标地址(转移后的EIP)=当前EIP+位移量相对寻址都是段内转移,最常用、最灵活直接寻址方式直接提供目标地址目标地址(转移后的CS和EIP)=指令操作数间接寻址方式指示寄存器或存储单元目标地址来自寄存器或存储单元、间接获得寄存器间接寻址:用寄存器保存目标地址存储器间接寻址:用存储单元保存目标地址目标地址=目的地址=转移地址3.JMP指令无条件转移:程序无条件改变执行顺序JMP指令相当于高级语言的goto语句JMPlabel;程序转向label标号指定的地址;段内相对寻址,段间直接寻址JMPreg32/
4、reg16;程序转向寄存器指定的地址;寄存器间接寻址JMPmem32/mem16;程序转向存储单元指定的地址;存储器间接寻址JMP指令的4种类型1.段内转移、相对寻址标号指明目标地址,指令代码包含位移量2.段内转移、间接寻址通用寄存器或主存单元包含目标指令偏移地址3.段间转移、直接寻址标号包含目标指令的段地址和偏移地址4.段间转移、间接寻址32位段用3字存储单元包含目标地址16位段用双字存储单元包含目标地址MASM会根据存储模式等信息自动识别〔例4-1〕无条件转移程序-1;数据段0000000000000000nvardword?;代码段00000000EB01jmp
5、labl1;相对寻址0000000290nop00000003E900000001labl1:jmpnearptrlabl2;相对近转移0000000890nop00000009B800000011Rlabl2:moveax,offsetlabl3〔例4-1〕无条件转移程序-20000000EFFE0jmpeax;寄存器间接寻址0000001090nop00000011B800000022Rlabl3:moveax,offsetlabl400000016A300000000Rmovnvar,eax0000001BFF2500000000Rjmpnvar;存储器间接寻址
6、0000002190noplabl4:movebx,offsetnvarjmpnearptr[ebx];数据的寄存器间接寻址数据的存储器直接寻址4.1.2条件转移指令根据指定的条件确定程序是否发生转移Jcclabel;条件满足,发生转移;否则,顺序执行下条指令LABEL表示目标地址,采用段内相对寻址32位IA-32处理器:达到32位的全偏移量16位80x86处理器:-128~+127间的短转移条件转移指令不影响标志,但要利用标志cc表示利用标志判断的条件,16种、两类单个标志状态作为条件两数大小关系作为条件转移条件cc:单个标志状态JZ/JEZF=1JumpifZer
7、o/EqualJNZ/JNEZF=0JumpifNotZero/NotEqualJSSF=1JumpifSignJNSSF=0JumpifNotSignJP/JPEPF=1JumpifParity/ParityEvenJNP/JPOPF=0JumpifNotParity/ParityOddJOOF=1JumpifOverflowJNOOF=0JumpifNotOverflowJCCF=1JumpifCarryJNCCF=0JumpifNotCarry多个助记符方便记忆转移条件cc:两数大小关系JB/JNAECF=1JumpifBelow/NotAbo
此文档下载收益归作者所有