X86 堆栈参数偏移量问题MASM

X86 堆栈参数偏移量问题MASM,x86,intel,masm,X86,Intel,Masm,我是MASM新手,在使用间接偏移量和在堆栈上传递参数方面遇到了一些麻烦 我有一个排序数组,它的大小是我通过堆栈传递给过程的。我想打印数组的第一个和最后一个元素。我将这两个参数推送到堆栈中,即数组第一个元素的偏移量和数组中的元素数 数组中的元素数是正确的,但当我尝试访问堆栈上的下一个位置[arraysize pos+4]时,我得到了一个巨大的数字,数组元素从未超过900个。如果有人能指出这个问题,也许是显而易见的,我会非常感激。先谢谢你 push OFFSET array push arraySi

我是MASM新手,在使用间接偏移量和在堆栈上传递参数方面遇到了一些麻烦

我有一个排序数组,它的大小是我通过堆栈传递给过程的。我想打印数组的第一个和最后一个元素。我将这两个参数推送到堆栈中,即数组第一个元素的偏移量和数组中的元素数

数组中的元素数是正确的,但当我尝试访问堆栈上的下一个位置[arraysize pos+4]时,我得到了一个巨大的数字,数组元素从未超过900个。如果有人能指出这个问题,也许是显而易见的,我会非常感激。先谢谢你

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]