【问题标题】:Stack Parameter Offset Issue MASM堆栈参数偏移问题 MASM
【发布时间】:2014-05-26 05:50:08
【问题描述】:

我是 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
#
          UPDATE
#

要回答我自己的问题,我得到这么多数字的原因是因为我传递的是 ADDRESS 而不是实际的取消引用值。这是正确的代码:

;------------------------------------
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

【问题讨论】:

    标签: x86 intel masm


    【解决方案1】:

    代替:

    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]
    

    【讨论】:

    • 谢谢你" 我才意识到我又犯了一个错误!
    猜你喜欢
    • 2021-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-18
    • 2016-02-07
    • 1970-01-01
    • 2021-04-13
    • 1970-01-01
    相关资源
    最近更新 更多