我正在尝试获得大于-3的第一个值, 但是我坚持使用这行代码:
cmp WORD PTR [esi],FFFDh ; test sign bit
pushfd ; push flags on stack
add esi,TYPE array
popfd ; pop flags from stack
loopnz next ; continue loop
如果我执行cmp操作,则仅在WORD PTR [esi] = FFFDh
时设置零标志
只有当WORD PTR [esi]大于或小于FFFDh时,此循环才会停止。
如何更改此代码,以便仅将零标志专门设置为大于FFFDh。
.data
array SWORD -3,-6,-1,-10,10,30,40,4
sentinel SWORD 0
.code
main PROC
mov esi,OFFSET array
mov ecx,LENGTHOF array
next:
cmp WORD PTR [esi],FFFDh ; test sign bit
pushfd ; push flags on stack
add esi,TYPE array
popfd ; pop flags from stack
loopnz next ; continue loop
jnz quit ; none found
sub esi,TYPE array ; ESI points to value
答案 0 :(得分:0)
没有简单的方法可以使用零标志。你应该使用循环中的条件跳转。顺便提一下,您还可以摆脱pushfd
/ popfd
和后循环esi
调整:
next:
cmp WORD PTR [esi],FFFDh
jg found
add esi,TYPE array
loop next ; continue loop
jmp quit
found:
; ESI points to value
PS:确保LENGTHOF
以元素数而非字节数返回数组大小,因为您将其用作迭代计数。