- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
GLUT_C 2013-08 J.CB 3.3.2 分支程序的设计 就是利用CPU的条件转移指令,通过判断某个标志为的状态,控制程序的执行过程。 PF=0 奇转移 JNP/JPO PF=1 偶转移 JP/JPE OF=0 无溢出转移 JNO OF=1 溢出转移 JO SF=0 为正转移 JNS SF=1 为负转移 JS CF=0 无进(借)位转移 JNC CF=1 有进(借)位转移 JC ZF=0 不相等/不等于0转移 JNE/JNZ ZF=1 相等/等于0转移 JE/JZ 标志设置 功能 指令助记符 二分支结构 分支结构 判断 A B N Y ABC1 ABC2 ABC3 分支结构 判断 B N Y ABC1 ABC2 多分支结构 条件判断1 Y …… 程序1 N 条件判断2 Y 程序2 条件判断n 程序n Y 程序n+1 N N 也可以按照条件编码实现多分枝转移 例如段内间接转移指令 JMP REG 转移到CS:AX JMP WORD PTR MEM 转移到CS:[MEM] AX←条件编码COD AX←AX*k JMP AX 分支程序0 分支程序1 分支程序n COD=0 COD=1 COD=n K是一个不小于2的整数。 我们还是通过实例来讨论。 例:内存单元M中有一个16位的带符号数,求它的绝对值,并将结果放回原处。 算法:求一个数的绝对值时,如果是正数,绝对值不变,如果是负数,则求它的机器负数(连同符号位一起每位取反,最低位+1,就是使用NEG指令)。 有了算法,可以画出程序流程图。 转移目的指令给出标号(符号地址) 开始 设置DS SI ?M AX? [SI] ORL AX,AX SF=0 NEG AX N Y DONE [SI]?(AX) 结束 N_DATA N_DATA,负数,该标号为了阅读程序方便 判断数据的符号,在X86中就是判断SF标志位,数据传送指令不改变标志位,因此用一条逻辑运算指令 ORL Ax,AX, 它不改变AX的值,但设置标志位SF DATA SEGMENT M DW 789AH ;可以任意输入一个数 DATA ENDS CODE SEGMENT ASSUME CS:CODE2,DS:DATA2 START: MOV AX,DATA MOV DS,AX LEA SI, M ;MOV SI,OFFSET M MOV AX,[SI] ORL AX,AX ;AND AX,AX JNS DONE ;符号为SF=0转移到DONE N_DATA: NEG AX ;负数,利用NEG指令求负 DONE: MOV [SI],AX MOV AH,4CH INT 21H CODE ENDS END 多分支程序 对分支程序,可以由这种2分支程序构成。 满足条件1? N Y FUN1 满足条件2? 满足条件3? 分支4 分支3 分支2 分支1 Y Y N N FUN2 FUN3 FUN4 FUN5 TST2 TST1 TST3 * 3.3. 程序的基本结构 最基本的程序结构:顺序结构、分支结构、循环结构。 A B 顺序结构 分支结构 判断 A B N Y ABC1 ABC2 ABC3 子程序、中断服务程序是一种特殊的程序,它们也是由以上三种基本结构构成的。 i=初值 A 修改并判断i Y N 循环结构 B 3.3.1 简单程序设计 例:编写程序将字变量W中的无符号数W=65525除以8,将商保存在字变量QOUT中,将余数保存在字节变量REMA中。 算法分析: 可以使用除法指令,也可以使用右移三位实现除以8的运算。 65525 →0FFF5H 1111 1111 1111 0101B (1)右移3位,移出的三位就是余数,剩余的就是商。 余数的保留:可以选择两种方法 1111 1111 1111 0101 C REMA → → 01111 1111 1111 010 C 1000 0000 → → 001111 1111 1111 01 C 0100 0000 → → 000111 1111 1111 0 C 1010 0000 → → 1010 0000 右移5位开始 定义W、QOUT、REMA AX←W, BL
文档评论(0)