我的作业的最后一部分有问题。我们得到一个比特流等,在流中是一个整数,文本部分的数字是1。我得到那个整数和它的24这是正确的,现在我循环通过我得到的文本数据,我试图计算那里的所有1。但我的处理总是返回零。
我能够确保它正确循环并且确实如此。
text = Hello 这是16 1,这是我的循环通过该文本来计算其中的数量。
sub AX,AX
sub SI,SI
mov bx,[bp+6] ;get message offset
@@mainLoop:
mov cx,8
mov dh,80h
cmp byte ptr [bx + si],0
je @@endChecker
@@innerLoop:
test byte ptr [bx + si],dh
jz @@zeroFound
inc AX
@@zeroFound:
shr bh,1
loop @@innerLoop
@@continue:
inc si
jmp @@mainLoop
proc的其余部分只是push / pops。我想要实际做的是使用TEST将100000000与一个字节进行比较,如果它是1 inc AX,则将掩码向右移动1并循环整个字节,而不是inc到下一个字节再做一次。
答案 0 :(得分:2)
'shr bh,1'应该是'shr dh,1',不是吗?
答案 1 :(得分:1)
只是为了给你一个替代和更短的内循环实现:
mov cx, 8
mov dh, byte ptr [bx+si]
@@innerLoop:
add dh, dh
adc ax, 0
loop @@innerLoop
这里我们根本不测试这些位。相反,add dh,dh将最高位移入进位,并且在一条指令中也与shl dh,1相同。
addc ax,0只是将进位添加到AX。