こんにちは、最近アセンブリ言語を勉強し始めたものです。
高級言語でいう変数への値の格納と取り出しを勉強しており、つまずいています。
- 以下のような実行結果になる原因
- 期待した結果を得るための修正方法
をご教示いただけますでしょうか。
よろしくお願いいたします。
環境
- Windows 10内のWSL2上で動いているUbuntu 20.04.2 LTS
- cc: (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0
実行内容
アセンブリコード1をmain.s
というファイルに保存し、以下を実行します。
cc -o main main.s ./main echo $?
期待される結果
5
が表示されること(終了ステータスコードが5
であること)
実際の結果
./main
を実行するたびに、異なるステータスコードが表示されます。
直近3回は176
, 60
, 160
でした。
アセンブリコード1
- オフセット-8に5を格納
- オフセット-16に10を格納
- オフセット-8の内容を返り値に設定
という内容です。
.intel_syntax noprefix .globl main main: push rbp mov rbp, rsp lea rax, -8[rbp] push rax mov rax, 5 pop rdi mov [rdi], rax lea rax, -16[rbp] push rax mov rax, 10 pop rdi mov [rdi], rax lea rax, -8[rbp] mov rax, [rax] jmp .L.return.main .L.return.main: mov rsp, rbp pop rbp ret
イメージしているC言語コード
int main() { int x = 5; int y = 10; return x; }
よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/01 07:25