X86 堆栈参数偏移量问题MASM
我是MASM新手,在使用间接偏移量和在堆栈上传递参数方面遇到了一些麻烦 我有一个排序数组,它的大小是我通过堆栈传递给过程的。我想打印数组的第一个和最后一个元素。我将这两个参数推送到堆栈中,即数组第一个元素的偏移量和数组中的元素数 数组中的元素数是正确的,但当我尝试访问堆栈上的下一个位置[arraysize pos+4]时,我得到了一个巨大的数字,数组元素从未超过900个。如果有人能指出这个问题,也许是显而易见的,我会非常感激。先谢谢你X86 堆栈参数偏移量问题MASM,x86,intel,masm,X86,Intel,Masm,我是MASM新手,在使用间接偏移量和在堆栈上传递参数方面遇到了一些麻烦 我有一个排序数组,它的大小是我通过堆栈传递给过程的。我想打印数组的第一个和最后一个元素。我将这两个参数推送到堆栈中,即数组第一个元素的偏移量和数组中的元素数 数组中的元素数是正确的,但当我尝试访问堆栈上的下一个位置[arraysize pos+4]时,我得到了一个巨大的数字,数组元素从未超过900个。如果有人能指出这个问题,也许是显而易见的,我会非常感激。先谢谢你 push OFFSET array push arraySi
push OFFSET array
push arraySize
call displayRange
...
;------------------------------------
displayRange PROC
;------------------------------------
push ebp
mov ebp, esp
pushad ;save the registers
mov eax, [ebp + 8]
call WriteDec
mov edx, OFFSET range1_str
call WriteString
mov esi, [ebp + 12]
mov eax, [esi]
call WriteDec
mov edx, OFFSET range2_str
call WriteString
mov edx, TYPE array
mov eax, [ebp + 8]
mul edx
add eax, 12
mov esi, [ebp + eax]
mov eax, [esi]
call writeDec
mov edx, OFFSET range3_str
call WriteString
call Crlf
popad
pop ebp
ret 8
displayRange ENDP
#
#
回答我自己的问题,我得到这么大的数字是因为我传递的是地址,而不是实际的解引用值。以下是正确的代码:
;------------------------------------
displayRange PROC
;------------------------------------
push ebp
mov ebp, esp
pushad ;save the registers
mov eax, [ebp + 8]
call WriteDec
mov edx, OFFSET range1_str
call WriteString
mov esi, [ebp + 12]
mov eax, [esi]
call WriteDec
mov edx, OFFSET range2_str
call WriteString
mov edx, TYPE array
mov eax, [ebp + 8]
mul edx
add eax, 12
mov esi, [ebp + eax]
call writeDec
mov edx, OFFSET range3_str
call WriteString
call Crlf
popad
pop ebp
ret 8
displayRange ENDP
而不是:
mov edx, TYPE array
mov eax, [ebp + 8]
mul edx
add eax, 12
mov eax, [ebp + eax]
写:
mov edx, TYPE array
mov eax, [ebp + 8]
mul edx
add eax, [ebp+12]
mov eax, [eax]
谢谢“我刚刚意识到我又犯了一个错误!
mov edx, TYPE array
mov eax, [ebp + 8]
mul edx
add eax, [ebp+12]
mov eax, [eax]