我正在嘗試在程序集中製作一個小程序(對於AT & T)。我試圖以整型的形式從用戶那裏得到一個輸入,然後遞增,然後輸出遞增的值。但是,該值不會增加。我花了最後幾個小時嘗試所有我能想到的東西,但它仍然不起作用,所以我有這樣的想法,即我可能理解集會中的一個概念不好,導致我沒有發現錯誤。這是我的代碼:我的(AT&T)程序集(x86-x64)代碼應該增加,但不會
1 hiString: .asciz "Hi\n"
2 formatstr: .asciz "%ld"
3
4 .global main
5
6 main:
7 movq $0, %rax #no vector registers printf
8 movq $hiString, %rdi #load hiString
9 call printf #printf
10 call inout #inout
11 movq $0, %rdi #loading exit value into register rdi
12 call exit #exit
13
14 inout:
15 pushq %rbp #Pushing bp
16 movq %rsp, %rbp #Moving sp to bp
17 subq $8, %rsp #Space on stack for variable
18 leaq -8(%rbp), %rsi
19 movq $formatstr, %rdi #1st argument scanf
20 movq $0, %rax #no vector for scanf registers
21 call scanf #scanf
22 incq %rsi
23 call printf
從教程中,我得到了我的朋友,我瞭解到,線路17至19是必要的,但是,我想我不使用堆棧空間我ADRESS那裏,所以我懷疑這個錯誤有什麼。我不確定的課程。先謝謝你。
編輯,更新的代碼(printf的仍然是所謂的現在子程序)
1 hiString: .asciz "hi\n"
2 formatstr: .asciz "%ld"
3
4 .global main
5
6 main:
7 movq $0, %rax
8 movq $hiString, %di
9 call printf
10 call inout
11 movq $0, %rdi
12 call exit
13
14 inout:
15 pushq %rbp
16 movq %rsp, %rbp
17 subq $8, %rsp
18 leaq -8(%rbp), %rsi
19 movq $formatstr, %rdi
20 movq $0, %rax
21 call scanf
22 popq %rax
23 incq %rax
24 movq %rax, %rsi
25 movq $0, %rax
26 call printf
27 addq $8, %rs
它運行和增量但是,現在,當增加值outputed,那裏顯示的數值後一些奇怪的跡象。
編輯:無所謂,上面只發生過一次,現在沒有增加值輸出,只有奇怪的跡象。
您的上次編輯再次從'inout'的末尾刪除'ret'。 –