我在理解为什么我的cmp语句无法正常工作时遇到了问题。
当我运行它时,我先输入0然后转到storeValue。我为第二个值输入0,它会像它应该的那样进入searchArray。
我的cmp和跳转语句以及对AL的监视都有断点,所以我不明白为什么它应该在该点提示搜索值时存储前0。
谢谢你的期待。
.DATA
prompt1 BYTE "Enter a value to put in array or 0 to search array.", 0
prompt2 BYTE "Enter a value to search array for.",0
intArray DWORD ?
numElem DWORD 0
SearchVal DWORD ?
resultNope BYTE "Not in array.",0
.CODE
_MainProc PROC
lea ebx, intArray ;get the address of array.
start: input prompt1, intArray, 50 ;read in integer
atod intArray ;convert to int
mov al, [ebx] ;move int to register
cmp al, 0 ;if integer is positive - store it!
jg storeValue ;JUMP!
cmp al, 0 ;if 0 - time to search array!
je searchArray ;JUMP!
storeValue: add numElem, 1 ;Adds 1 to num of elements in array.
mov [ebx], al ;moves number into array.
add ebx, 1 ;increment to next array address.
jmp start ;get next number for array. JUMP!
searchArray:input prompt2, searchVal, 50 ;What are we searching array for?
atod searchVal ;convert to int
lea ebx, intArray ;get address of array.
mov ecx, 1 ;set loop counter to 1.
答案 0 :(得分:1)
您忘记了input
和atod
的工作原理。看看我的水晶球,我想input
期望缓冲区将用户输入存储为文本,而参数50
可能是它的大小。请注意,您没有这样的缓冲区,甚至没有50个字节的空间。我也认为,因为atod
显然只需要一个参数,即要转换的文本缓冲区,它可能会返回eax
中的值。你的storeValue
来自al
写的这一事实也强化了这一点,否则就没有意义。
长话短说:
atod
al
atod
醇>
(也适用于搜索部分。)