正在学习考试,我想知道此代码是否正确。 我刚刚注册了该站点,所以对我的问题有任何疑问感到抱歉。
此代码查找数组中的第一个零值。如果没有找到,它将使SI指向最后一个数组元素。
Data Segment
array DW -3, 7, 20, 10, 0, 4, 9
End Segment
Code Segment
MOV SI, OFFSET array
MOV CX, LENGTHOF array
MOV AX, 0
L1:
MOV AX, [SI]
CMP AX, 0
JE FOUND
JCXZ NOT FOUND
ADD SI, 2
LOOP L1
FOUND:
RET
NOT FOUND:
MOV SI, 12
END
答案 0 :(得分:1)
您的程序存在一些问题;
以下是NASM中的一个示例,除了 OFFSET 和 LENGTHOF 以外,它们基本上是相同的。
org 0x100 ; Origin of code (Maybe EMU8086 doesn't need this)
mov si, Values ; Nothing wrong with using Array either
mov cx, (VEnd-Values)/2 ; Actual number of words in array
L0: lodsw ; Loads AX with value pointed to by SI and inc's SI.
cmp ax, 0
jz Done
loop L0 ; Will continue until CX = 0
Done: dec si
dec si ; Point back to last value read
ret ; Terminate program
Values: dw -3, 7, 20, 10, 0, 4, 9
VEnd: db 0
我不建议将此示例作为您的答案,但是由于您的代码非常接近可行,因此即使使用 mov ax,[si] < / strong>。