- 1、本文档共18页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
?/WanJun * 汇编语言程序设计 条件转移指令 指定的条件cc如果成立,程序转移到由标号label指定的目标地址去执行指令;条件不成立,则程序将顺序执行下一条指令 操作数label是采用短转移,称为相对寻址方式 Jcc Jcc label ;条件满足,发生转移:IP←IP+8位位移量 ;条件不满足,顺序执行 相对寻址方式 Jcc指令的操作数label是一个标号 一个8位位移量 Jcc指令后的那条指令的偏移地址,到目标指令的偏移地址的地址位移,且距当前IP地址-128~+127个单元的范围之内,属于段内短距离转移 相对寻址方式 Jcc指令为2个字节,条件不满足时的顺序执行就是当前指令偏移指针IP加2 Jcc Jcc指令的分类 不影响标志,但要利用标志。 根据利用的标志位不同,16条指令分成3种情况: 1. 判断单个标志位状态 2. 比较无符号数高低 3. 比较有符号数大小 Jcc 条件转移指令中的条件cc Jcc 1. 判断单个标志位状态 这组指令单独判断5个状态标志之一 ⑴JZ/JE和JNZ/JNE:利用零标志ZF,判断结果是否为零(或相等) ⑵JS和JNS:利用符号标志SF,判断结果是正是负 ⑶JO和JNO:利用溢出标志OF,判断结果是否产生溢出 ⑷JP/JPE和JNP/JPO:利用奇偶标志PF,判断结果中“1”的个数是偶是奇 ⑸JC/JB/JNAE和JNC/JNB/JAE:利用进位标志CF,判断结果是否进位或借位 Jcc 例:JZ/JNZ指令 test al,80h ;测试最高位 jz next0 ;D7=0(ZF=1),转移 mov ah,0ffh ;D7=1,顺序执行 jmp done ;无条件转向 next0: mov ah,0 done: ... test al,80h ;测试最高位 jnz next1 ;D7=1(ZF=0),转移 mov ah,0 ;D7=0,顺序执行 jmp done ;无条件转向 next1: mov ah,0ffh done: ... 例:JS/JNS指令 ;计算|X-Y|(绝对值) ;X和Y为存放于X单元和Y单元的16位操作数 ;结果存入result mov ax,X sub ax,Y jns nonneg neg ax ;neg是求补指令 nonneg: mov result,ax 例:JO/JNO指令 ;计算X-Y; ;X和Y为存放于X单元和Y单元的16位操作数 ;若溢出,则转移到overflow处理 mov ax,X sub ax,Y jo overflow ... ;无溢出,结果正确 overflow: ... ;有溢出处理 例:JP/JNP指令 and al,7fh ;最高位置“0”,同时判断“1”的个数 jnp next ;个数已为奇数,则转向next or al,80h ;否则,最高位置“1” next: ... ;设字符的ASCII码在AL寄存器中 ;将字符加上奇校验位 ;在字符ASCII码中为“1”的个数已为奇数时 ;则令其最高位为“0”;否则令最高位为“1” 例:JC/JNC指令 xor al,al ;AL=0,CF=0 again: test bx,0ffffh ;等价于 cmp bx,0 je next shl bx,1 jnc again inc al jmp again next: ... ;AL保存1的个数 ;记录BX中1的个数 记录BX中“1”的个数 xor al,al ;AL=0,CF=0 again: cmp bx,0 jz next shl bx,1 ;也可使用 shr bx,1 adc al,0 jmp again next: ... ;AL保存1的个数 另一种做法 比较无符号数高低 无符号数的大小用高(Above)低(Below)表示 利用CF确定高低、利用ZF标志确定相等(Equal) 两数的高低分成4种关系: ⑴ 低于(不高于等于):JB(JNAE) ⑵ 不低于(高于等于):JNB(JAE) ⑶ 低于等于(不高于):JBE(JNA) ⑷ 不低于等于(高于):JNBE(JA ) Jcc 例:比较无符号数 cmp ax,bx ;比较ax和bx jnb next ;若ax≥bx,转移 xchg ax,bx ;若ax<bx,交换 next: ... 比较有符号数大小 有符号数的大(Greater)小(Less)需要组合OF、SF标志,并利用ZF标志确定相等(Equal) 两数的大小分成4种关系: ⑴ 小于(不大于等
文档评论(0)