首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

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

2013-01-05 
王爽汇编检测点11.3题目:补全下面程序,统计F000:0处32个字节中,大小在(32,128)的数据个数。我机上的数据是

王爽汇编检测点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就可以执行下步了.

第二个同理.

热点排行