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

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

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

第二个同理.

热点排行