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

王爽汇编检测点11.3解决方案

热度:2990   发布时间: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就可以执行下步了.

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