- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
3.5 控制转移指令
复习 1、逻辑运算指令: AND OR XOR NOT TEST 移位指令小结 3.6 控制转移类指令 用于实现分支、循环、过程等程序结构 1 无条件转移指令 指令格式: JMP label ;程序转向label标号指定的地址 段内转移、直接寻址 JMP label ;IP←IP+位移量 位移量是紧接着JMP指令后的那条指令的偏移地址到目标指令的偏移地址的地址位移 2. 条件转移指令 相对寻址方式 Jcc指令的操作数label是一个标号 条件转移指令的目的地址必须在现行的代码段内一个8位位移量,表示Jcc指令后的那条指令的偏移地址,到目标指令的偏移地址的地址位移 8位位移量是相对于当前IP的,且距当前IP地址-128~+127个单元的范围之内,属于段内短距离转移 Jcc指令的分类 Jcc指令不影响标志,但要利用标志位。根据利用的标志位不同,16条指令分成3种情况: (1)判断单个标志位状态 例:JZ/JNZ指令 test al,80h ;测试AL的最高位 jz next1 ;D7=0(ZF=1),转移 mov ah,0ffh ;D7=1,顺序执行 jmp done ;无条件转向 next1: mov ah,0 done: ... 例:JS/JNS指令 例:JO/JNO指令 ;计算X-Y ;若溢出,则转移到overflow处理 例:JP/JNP指令 ;设字符的ASCII码在AL寄存器中 例:JC/JNC指令 ;记录BX中1的个数——方法1 记录BX中“1”的个数——方法2 (2)比较无符号数高低 无符号数的大小用 高(Above)、低(Below)表示,利用CF确定高低 (3)比较有符号数大小 有符号数的大小用 大(Greater)小(Less)表示 Jcc M,N M N 无符号数(A,B) 有符号数(G,L) (? =) JB(JNAE) JL(JNGE) = (?) JBE(JNA) JLE(JNG) (?=) JA(JNBE) JG(JNLE) = (?) JNB(JAE) JNL(JGE) = JE/JZ ≠ JNE/JNZ 例:比较无符号数 cmp ax , bx ;比较ax和bx jnb next ;若ax≥bx,转移 xchg ax , bx ;若ax<bx,交换 next: ... 例:比较有符号数 cmp ax,bx ;比较ax和bx jnl next ;若ax≥bx,转移 xchg ax,bx ;若ax<bx,交换 next: ... 例、分析下列程序段,程序如何执行? ② AX = 42C8H,BX = 608DH 举例:比较AL、BL、CL中带符号数的大小,将 最小数放在AL中。 例、找出有符号数的最大值 CMP A , B JG 大于(AB)时转移 JNE 不等于(A ≠ B)时转移 例:X50,转到TOO_HIGH; 计算X-Y: 溢出转到OVERFLOW, 否则 |X-Y|→RESULT 3. 循环指令(loop) LOOP 格式:LOOP label 操作:(CX)-1→CX; 若(CX)≠0,则转至label处执行; 否则退出循环,执行LOOP后面的指令。 不影响标志位。 例、编写指令序列,确定AL中“1”的个数。 MOV AX, X CMP AX, 50 JG TOO_HIGH SUB AX, Y JO OVERFLOW JNS NONNEG NEG AX NONNEG: MOV RESULT, AX TOO_HIGH: … OVERFLOW: … 控制某程序段反复执行的次数。循环指令默认利用CX计数器,方便实现计数循环的程序结构 label操作数采用相对寻址方式 LOOP label ;CX←CX-1, ;CX≠0,循环到标号label LOOPZ label ;CX←CX-1, ;CX≠0且ZF=1,循环到标号label LOOPNZ label ;CX←CX-1, ;CX≠0且ZF=0,循环到标号label JCXZ label ;CX=0,转移到标号label 实际上,该指令可以等价两条指令: DEC CX ;CX-1→CX JNZ dst ;ZF=0,转向
原创力文档


文档评论(0)