第4章程序结构.ppt
《第4章程序结构.ppt》由会员分享,可在线阅读,更多相关《第4章程序结构.ppt(62页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第4 4章章 程序结构程序结构第4章程序结构 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望第第4 4章章 程序结构程序结构以顺序、分支和循环程序结构为主线以顺序、分支和循环程序结构为主线结合数值运算、数组处理等示例程序结合数值运算、数组处理等示例程序掌掌握握控控制制转转移移指指令令以以及及编编写写基基本本程程序序的方法的方法第第4 4章章 程序结构程序结构4.1 4.1 顺序程序结构顺序程序结构按照指令书写的前后顺序执行每条指令按照指令书写的前后顺序执行每条指
2、令最基本的程序片段最基本的程序片段构成复杂程序的基础构成复杂程序的基础3 3个示例程序个示例程序n知道知道“1 12 23 3N”N”等于多少吗?等于多少吗?n知道处理器内置的识别字符串是什么吗?知道处理器内置的识别字符串是什么吗?n知道知道“01100100”01100100”代表什么吗?代表什么吗?3 3第第4 4章章 程序结构程序结构例例4-14-1自然数求和程序自然数求和程序;数据段数据段numnumdword 3456dword 3456;假设一个假设一个N N值(小于值(小于2 23232-1-1)sumsumqword?qword?;代码段代码段mov eax,nummov ea
3、x,num;EAX=N;EAX=Nadd eax,1add eax,1;EAX=N+1;EAX=N+1imul numimul num;EDX.EAX=(1+N)N;EDX.EAX=(1+N)Nshr edx,1shr edx,1;64;64位逻辑右移一位位逻辑右移一位(除以除以2)2)rcr eax,1rcr eax,1;EDX.EAX=EDX.EAX2;EDX.EAX=EDX.EAX2mov dword ptr sum,eaxmov dword ptr sum,eax;小端方式保存小端方式保存mov dword ptr sum+4,edxmov dword ptr sum+4,edx1 1
4、2 2N N(1 1N N)N2N24 4第第4 4章章 程序结构程序结构例例4-24-2处理器识别程序处理器识别程序;数据段数据段bufferbufferbyte The processor is,12 dup(0),0byte The processor is,12 dup(0),0bufsizebufsize=sizeof buffer=sizeof buffer;代码段代码段mov eax,0mov eax,0cpuidcpuid;执行处理器识别指令执行处理器识别指令mov dword ptr buffer+bufsize-13,ebxmov dword ptr buffer+bufs
5、ize-13,ebxmov dword ptr buffer+bufsize-9,edxmov dword ptr buffer+bufsize-9,edxmov dword ptr buffer+bufsize-5,ecxmov dword ptr buffer+bufsize-5,ecxmov eax,offset buffermov eax,offset buffer;显示信息显示信息call dispmsgcall dispmsgGenuineIntelGenuineIntel5 5第第4 4章章 程序结构程序结构例例4-34-3不同格式显示程序不同格式显示程序mov al,varmo
6、v al,varcall dispbbcall dispbbcall dispcrlfcall dispcrlfmov al,varmov al,varcall disphbcall disphbcall dispcrlfcall dispcrlfmov al,varmov al,varcall dispuibcall dispuibcall dispcrlfcall dispcrlfmov al,varmov al,varcall dispccall dispcvarvar byte 01100100bbyte 01100100b二进制形式二进制形式十六十六进制形式进制形式十十进制形式进制形
7、式字符字符形式形式运行结果6 6第第4 4章章 程序结构程序结构4.2 4.2 分支程序结构分支程序结构改改变变程程序序执执行行顺顺序序、形形成成分分支支、循循环环、调调用用等等程程序序结结构是很常见的程序设计问题构是很常见的程序设计问题高高级级语语言言采采用用IFIF等等语语句句表表达达条条件件,并并根根据据条条件件是是否否成成立转向不同的程序分支立转向不同的程序分支汇编语言需要汇编语言需要n首先利用比较首先利用比较CMPCMP、测试、测试TESTTEST、加减、加减运算、逻辑运算等影响状态标志的运算、逻辑运算等影响状态标志的指令形成条件指令形成条件n然后利用条件转移指令判断由标志然后利用条
8、件转移指令判断由标志表达的条件表达的条件,并根据标志状态控制程序并根据标志状态控制程序转移到不同的程序段转移到不同的程序段7 7第第4 4章章 程序结构程序结构4.2.1 4.2.1 无条件转移指令无条件转移指令程序代码在代码段程序代码在代码段nCSCS:指明代码段在主存中的段基地址:指明代码段在主存中的段基地址nEIPEIP:给出将要执行指令的偏移地址:给出将要执行指令的偏移地址程序顺序执行,处理器自动增量程序顺序执行,处理器自动增量EIPEIP程序控制转移,程序控制转移,EIPEIP随之改变随之改变程序转移到另外的代码段,程序转移到另外的代码段,EIPEIP和和CSCS都改变都改变控控制制
9、转转移移类类指指令令:改改变变EIPEIP(有有些些也也改改变变CSCS),即即改改变变程程序序执执行行顺顺序序(实实现现程程序序控控制制转转移移)的的指令指令本章学习本章学习控制转移类指令控制转移类指令8 8第第4 4章章 程序结构程序结构1.1.转移范围转移范围段内转移段内转移n在当前代码段范围内的程序转移在当前代码段范围内的程序转移n不需更改不需更改CSCS,只要改变只要改变EIPEIP(偏移地址)(偏移地址)n近转移(近转移(NearNear):3232位近转移位近转移NEAR32NEAR32、1616位近转移位近转移NEAR16NEAR16n短转移(短转移(ShortShort):转
10、移范围在:转移范围在127127-128-128字节字节段间转移段间转移n从当前代码段跳转到另一个代码段从当前代码段跳转到另一个代码段n需要更改需要更改CSCS(段地址)和(段地址)和EIPEIP(偏移地址)(偏移地址)n远转移(远转移(FarFar):4848位远转移位远转移FAR32FAR32、3232位远转移位远转移FAR16FAR169 9第第4 4章章 程序结构程序结构2.2.指令寻址方式指令寻址方式相对寻址方式相对寻址方式n提供目标地址相对于当前指令指针提供目标地址相对于当前指令指针EIPEIP的位移量的位移量n目标地址(转移后的目标地址(转移后的EIPEIP)当前)当前EIPEI
11、P位移量位移量n相对寻址都是段内转移,最常用、最灵活相对寻址都是段内转移,最常用、最灵活直接寻址方式直接寻址方式n直接提供目标地址直接提供目标地址n目标地址(转移后的目标地址(转移后的CSCS和和EIPEIP)指令操作数)指令操作数间接寻址方式间接寻址方式n指示寄存器或存储单元指示寄存器或存储单元n目标地址来自寄存器或存储单元、间接获得目标地址来自寄存器或存储单元、间接获得n寄存器间接寻址:用寄存器保存目标地址寄存器间接寻址:用寄存器保存目标地址n存储器间接寻址:用存储单元保存目标地址存储器间接寻址:用存储单元保存目标地址目标地址目标地址目的地址目的地址转移地址转移地址1010第第4 4章章
12、程序结构程序结构3.JMP3.JMP指令指令无条件转移:程序无条件改变执行顺序无条件转移:程序无条件改变执行顺序JMPJMP指令相当于高级语言的指令相当于高级语言的gotogoto语句语句JMP labelJMP label;程序转向程序转向labellabel标号指定的地址标号指定的地址;段内相对寻址,段间直接寻址段内相对寻址,段间直接寻址JMP reg32/reg16JMP reg32/reg16;程序转向寄存器指定的地址程序转向寄存器指定的地址;寄存器间接寻址寄存器间接寻址JMP mem48/mem32/mem16JMP mem48/mem32/mem16;程序转向存储单元指定的地址程序
13、转向存储单元指定的地址;存储器间接寻址存储器间接寻址1111第第4 4章章 程序结构程序结构JMPJMP指令的指令的4 4种类型种类型1.1.段内转移、相对寻址段内转移、相对寻址n标号指明目标地址,指令代码包含位移量标号指明目标地址,指令代码包含位移量2.2.段内转移、间接寻址段内转移、间接寻址n通用寄存器或主存单元包含目标指令偏移地址通用寄存器或主存单元包含目标指令偏移地址3.3.段间转移、直接寻址段间转移、直接寻址n标号包含目标指令的段地址和偏移地址标号包含目标指令的段地址和偏移地址4.4.段间转移、间接寻址段间转移、间接寻址n3232位段用位段用3 3字存储单元包含目标地址字存储单元包含
14、目标地址n1616位段用双字存储单元包含目标地址位段用双字存储单元包含目标地址MASM会根据存储模式等信息自动识别会根据存储模式等信息自动识别1212第第4 4章章 程序结构程序结构例例4-44-4无条件转移程序无条件转移程序1 1;数据段数据段00000000000000000000000000000000nvarnvardword?dword?;代码段代码段0000000000000000EB 01EB 01jmp labl1jmp labl1;相对寻址相对寻址00000002000000029090nopnop0000000300000003E9 00000001E9 00000001l
15、abl1:labl1:jmp near ptr labl2jmp near ptr labl2;相对近转移相对近转移00000008000000089090nopnop0000000900000009B8 00000011 RB8 00000011 Rlabl2:labl2:mov eax,offset labl3mov eax,offset labl30000000E0000000EFF E0FF E0jmp eaxjmp eax;寄存器间接寻址寄存器间接寻址1313第第4 4章章 程序结构程序结构例例4-44-4无条件转移程序无条件转移程序2 200000010000000109090no
16、pnop0000001100000011B8 00000022 RB8 00000022 Rlabl3:labl3:mov eax,offset labl4mov eax,offset labl40000001600000016A3 00000000 RA3 00000000 Rmov nvar,eaxmov nvar,eax0000001B0000001BFF 25 00000000 RFF 25 00000000 Rjmp nvarjmp nvar;存储器间接寻址存储器间接寻址00000021000000219090nopnoplabl4:labl4:mov ebx,offset nvar
17、mov ebx,offset nvarjmp near ptr ebxjmp near ptr ebx;数据的寄存器间接寻址数据的寄存器间接寻址数据的存储器直接寻址数据的存储器直接寻址1414第第4 4章章 程序结构程序结构4.2.2 4.2.2 条件转移指令条件转移指令根据指定的条件确定程序是否发生转移根据指定的条件确定程序是否发生转移Jcc labelJcc label;条件满足,发生转移;否则,顺序执行下条指令条件满足,发生转移;否则,顺序执行下条指令LABELLABEL表示目标地址,采用段内相对寻址表示目标地址,采用段内相对寻址n3232位位IA-32IA-32处理器:达到处理器:达到
18、3232位的全偏移量位的全偏移量n1616位位80 x8680 x86处理器:处理器:-128-128+127+127间的短转移间的短转移n条件转移指令不影响标志,但要利用标志条件转移指令不影响标志,但要利用标志cccc表示利用标志判断的条件,表示利用标志判断的条件,1616种、两类种、两类n单个标志状态作为条件单个标志状态作为条件n两数大小关系作为条件两数大小关系作为条件1515第第4 4章章 程序结构程序结构转移条件转移条件cccc:单个标志状态:单个标志状态JZ/JEJZ/JEZF=1ZF=1Jump if Zero/EqualJump if Zero/EqualJNZ/JNEJNZ/J
19、NEZF=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 OddJump if Not Parity/Parity OddJOJO
20、OF=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 Carry多个助记符方便记忆多个助记符方便记忆1616第第4 4章章 程序结构程序结构转移条件转移条件cccc:两数大小关系:两数大小关系JB/JNAEJB/JNAECF=1CF=1Jump if Below/Not Above or EqualJu
21、mp if Below/Not Above 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/
22、JNGESFOFSFOFJump 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=1Jump if Less or Equal/Not GreaterJump if Less or Equal/Not GreaterJNLE/JGJNLE/JGSF=OFSF=OF且且ZF=0ZF=0
23、Jump if Not Less or Equal/GreaterJump if Not Less or Equal/Greater1717第第4 4章章 程序结构程序结构1.1.单个标志状态作为条件的条件转移指令单个标志状态作为条件的条件转移指令JZ(JE)JZ(JE)和和JNZ(JNE)JNZ(JNE):利用零位标志:利用零位标志ZFZFn判断结果是零(相等)还是非零(不等)判断结果是零(相等)还是非零(不等)JSJS和和JNSJNS:利用符号标志:利用符号标志SFSFn判断结果是负还是正判断结果是负还是正JOJO和和JNOJNO:利用溢出标志:利用溢出标志OFOFn判断结果是溢出还是没有
24、溢出判断结果是溢出还是没有溢出JP(JPE)JP(JPE)和和JNP(JPO)JNP(JPO):利用奇偶标志:利用奇偶标志PFPFn判断结果低字节判断结果低字节“1”1”的个数是偶数还是奇数的个数是偶数还是奇数JCJC和和JNCJNC:利用进位标志:利用进位标志CFCFn判断结果是有进位(为判断结果是有进位(为1 1)还是无进位(为)还是无进位(为0 0)1818第第4 4章章 程序结构程序结构例例4-54-5个数折半程序个数折半程序1 1mov eax,885mov eax,885;假设一个数据假设一个数据shr eax,1shr eax,1;数据右移进行折半数据右移进行折半jnc goev
25、enjnc goeven;余数为余数为0 0,即,即CFCF0 0条件成立,转移条件成立,转移add eax,1add eax,1;否则余数为否则余数为1 1,即,即CFCF1 1,进行加,进行加1 1操作操作goeven:goeven:call dispuidcall dispuid;显示结果显示结果 443运行结果1919第第4 4章章 程序结构程序结构例例4-54-5个数折半程序个数折半程序2 2mov eax,886mov eax,886;假设一个数据假设一个数据shr eax,1shr eax,1;数据右移进行折半数据右移进行折半jc gooddjc goodd;余数为余数为1 1,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 章程 结构
限制150内