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