汇编教程 条件转移指令

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
...
实验内容
➢ 1、设X,Y为存放在X,Y单元中的16位 操作数,判断X>Y,若成立执行X-Y, 否 则计算|X-Y|,并把结果存入RESULT中
➢ 2、假设有100个16位无符号数存放在 数据段,把它们的和求出来,作为32 位数存在DX和AX中
➢ 3、数据段有一个首地址为ARRAY的N 字数组,要求测试其中正数、0、负数 的个数,正数个数放在DI中,0的个数 放在SI中,并根据N-(DI)-(SI)求得负数 的个数放在AX中。
➢ 两数的大小分成4种关系:
⑴ 小于(不大于等于):JL(JNGE) ⑵ 不小于(大于等于):JNL(JGE) ⑶ 小于等于(不大于):JLE(JNG) ⑷ 不小于等于(大于):JNLE(JG )
例:比较有符号数
next:
cmp ax,bx ;比较ax和bx jnl next ;若ax≥bx,转移 xchg ax,bx;若ax<bx,交换
and al,7fh ;最高位置“0”,同时判断“1”的个数 jnp next ;个数已为奇数,则转向next or al,80h ;否则,最高位置“1” next: ...
例:JC/JNC指令
;记录BX中1的个数
again: next:
xor al,al ;AL=0,CF=0
test bx,0ffffh ;等价于 cmp bx,0
;测试最高位 ;D7=1(ZF=0),转移 ;D7=0,顺序执行 ;无条件转向
例: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指令
;设字符的ASCII码在AL寄存器中 ;将字符加上奇校验位 ;在字符ASCII码中为“1”的个数已为奇数时 ;则令其最高位为“0”;否则令最高位为“1”
果是否为零(或相等) ⑵JS和JNS:利用符号标志SF,判断结果是
正是负 ⑶JO和JNO:利用溢出标志OF,判断结果是
否产生溢出 ⑷JP/JPE和JNP/JPO:利用奇偶标志PF,判
断结果中“1”的个数是偶是奇 ⑸ JC/JB/JNAE 和 JNC/JNB/JAE : 利 用 进 位
标志CF,判断结果是否进位或借位
⑷ 不低于等于(高于):JNBE(JA )
例:比较无符号数
next:
cmp ax,bx ;比较ax和bx jnb next ;若ax≥bx,转移 xchg ax,bx;若ax<bx,交换
...
比较有符号数大小
Jcc
➢ 有符号数的大(Greater)小(Less) 需 要 组 合 OF 、 SF 标 志 , 并 利 用 ZF 标 志确定相等(Equal)
Jcc指令的分类
Jcc
➢不影响标志,但要利用标志。 ➢根 据 利 用 的 标 志 位 不 同 , 16 条 指
令分成3种情况:
1. 判断单个标志位状态 2. 比较无符号数高低 3. 比较有符号数大小
1. 判断单个标志位状态 Jcc
➢ 这组指令单独判断5个状态标志之一 ⑴JZ/JE和JNZ/JNE:利用零标志ZF,判断结
例:JZ/JNZ指令
next0: done:
next1: done:
test al,80h jz next0 mov ah,0ffh jmp done mov ah,0 ...
test al,80h jnz next1 mov ah,0 jmp done mov ah,0ffh ...
;测试最高位 ;D7=0(ZF=1),转移 ;D7=1,顺序执行 ;无条件转向
je next
shl bx,1
jnc again
inc al
jmp again
...
;AL保存1的个数
另一种做法
again: next:
xor al,al cmp bx,0 jz next shl bx,1 adc al,0 jmp again ...
记录BX中“1”的个数 ;AL=0,CF=0 ;也可使用 shr bx,1 ;AL保存1的个数
比较无符号数高低
Jcc
➢ 无 符 号 数 的 大 小 用 高 ( Above ) 低 (Below)表示
➢ 利用CF确定高低、利用ZF标志确定相 等(Equal)
➢ 两数的高低分成4种关系:
⑴ 低于(不高于等于):JB(JNAE)
⑵ 不低于(高于等于):JNB(JAE)
⑶ 低于等于(不高于):JBE(JNA)
源自文库
相对寻址方式
Jcc
➢ Jcc指令的操作数label是一个标号
一个8位位移量 Jcc指令后的那条指令的偏移地址,到目 标指令的偏移地址的地址位移,且距当前 IP地址-128~+127个单元的范围之内, 属于段内短距离转移
相对寻址方式
➢ Jcc指令为2个字节,条件不满足时的 顺序执行就是当前指令偏移指针IP加2
汇编语言程序设计
1
条件转移指令
Jcc
Jcc label
;条件满足,发生转移:IP←IP+8位位移量 ;条件不满足,顺序执行
➢ 指定的条件cc如果成立,程序转移到 由标号label指定的目标地址去执行指 令;条件不成立,则程序将顺序执行 下一条指令
➢ 操作数label是采用短转移,称为相对 寻址方式
相关文档
最新文档