4

組み立てコースを受講していますが、スタック フレームに問題があります。要件の 1 つは、レジスターではなくスタックを使用してパラメーターを渡すことです。参照によって変数を渡してから、プロシージャでその変数の値を変更しようとしています。これが私がこれまでに持っているものです。WriteStringそしてReadDec、本に付属している(アーバインの)図書館からのものです。

.data
numVal  DWORD ?
.code
main PROC
    PUSH    OFFSET numVal
    CALL    GetNumber
    exit
main ENDP
GetNumber PROC
    PUSH    edx
    PUSH    ebp
    MOV     ebp, esp

    CALL    ReadDec                ; gets what the user inputs and puts in eax
    MOV     [ebp+12], eax
    ; MOV    numVal, eax           ; this works just fine

    POP     ebp
    POP     edx
    RET     4
GetNumber ENDP
END main

ただし、印刷したりnumVal、別の場所で使用しようとすると、ユーザーが何を入力したかに関係なく、0 として返されます。ebp+12ではなくそのアドレスを参照している、ユーザーが入力したものは何でも送信していると思いますnumVal。それで、それが正しければ、参照渡しなどでこれを行う方法はありnumValますか? または、コメントアウトされた行MOV numVal, eaxが唯一の方法ですか?

PS。これは宿題です。そのようにタグ付けしようとしましたが、許可されませんでした。

PPS。また、overflow に投稿するのはこれが初めてです。投稿やエチケットなどを改善するための建設的な批判に感謝します。

4

1 に答える 1