当前位置: 代码迷 >> 汇编语言 >> 王爽汇编检测点11.3,该如何处理
  详细解决方案

王爽汇编检测点11.3,该如何处理

热度:1154   发布时间:2013-02-26 00:00:00.0
王爽汇编检测点11.3
题目:补全下面程序,统计F000:0处32个字节中,大小在(32,128)的数据个数。
我机上的数据是这样:

F000:0000  F8 02 41 43 46 47 01 02-07 00 00 00 33 00 10 00
F000:0010  00 00 00 00 60 40 00 00-03 00 01 00 80 1C 00 01

code segment
start:mov ax,0f000h
      mov ds,ax
      mov bx,0
      mov dx,0
      mov cx,32
    s:mov al,[bx]
      cmp al,32
      jna s0 这句是自己填的
      cmp al,128
      jnb s0这句是自己填的

      inc dx
   s0:inc bx
      loop s
      
      mov ax,4c00h
      int 21h
code ends 
end start

两句都是从人家看来的答案,但跟我想的不同,
我觉得第一个空应该是 jb s0
因为jna   是不高于则转移    CF=1或ZF=1
jb       是低于则转移       CF=1
因为现在是求 32<x<128 ,就是不包括32和128,如果是jna的话,包含ZF=1,那不就是代表比较结果是等于0吗,如果等于0那就相等,那就不对了。

然后是第二个空,为什么是jnb,而不是ja呢?
jnb   不低于则转移    CF=0
ja    高于则转移      CF=0且ZF=0   
ja 还包含ZF=0 ,是且的关系,那不是更确定不可能相等的时候 dx也不会加1吗?
------解决方案--------------------------------------------------------
第一空:jb s0;jb 是低于则转移  CF=1 

第二空:ja s0;ja  高于则转移  CF=0且ZF=0  



------解决方案--------------------------------------------------------
cmp al,32
      jna s0       ;不高于则跳到S0处,就是说必须大于32才执行下面的
      cmp al,128
      jnb s0确     ;不低于则跳到S0处,就是说必须小于128才执行下面的
                      合起来,只有32<AL>128才能执行下面的记数 inc dx
      inc dx
  s0:inc bx
      loop s 


因为现在是求 32 <x <128 ,就是不包括32和128,如果是jna的话,包含ZF=1,那不就是代表比较结果是等于0吗,如果等于0那就相等,那就不对了。
ZF=1(就是AL=32). 他应该跳啊.不跳不就32≤AL就可以执行下步了.

第二个同理.
  相关解决方案