0
我剛開始學習x86程序集,我不得不做一個練習,這是我無法解決的。 這個想法是製作一個程序,讓用戶使用Scanf鍵入一個數字。然後該程序將數字加1並輸出該數字(所以基本上輸出=輸入+1)。基本程序集練習我無法解決
當我使用我的代碼時,控制檯顯示我一個分段錯誤。
代碼:
mystring: .asciz "name_of_the_programmer\nLast_Name\nAssignment 2:inout\nGive a number:\n" #Creëert een stuk tekst
nrstring: .asciz "%d"
.global main
main:
movq $0, %rax #Geeft de locatie %rdi een waarde van 0, maakt %rdi leeg
movq $mystring, %rdi #Voegt de waarde van mystring (het stuk tekst) toe aan %rdi
call printf #Print de waarde van %rdi
call inout #roept inout op
inout:
pushq %rbp
movq %rsp , %rbp
subq $8, %rsp #Plaatst stackPointer goed
leaq -8(%rbp), %rsi #Laad het adres in rsi
movq $0, %rdi #Maakt rdi leeg
movq $nrstring, %rdi #Verplaatst string nrstring naar rdi (1e arg. scanf)
movq $0, %rax #Maakt RAX leeg (2e arg. scanf)
call scanf #Roept Scanf op
incq %rdi
movq %rdi, %rax
call printf
movq %rbp, %rsp
popq %rbp
ret
end:
mov $0, %rdi #Maakt %rdi leeg
call exit #Sluit het programma af
我來自荷蘭,所以請不要對意見擔心,我爲我的英語不好道歉。
問題是*哪裏*是分段故障?您可以使用調試器來遍歷程序,並找到導致它的步驟。一旦你知道哪個指令導致它,你可以考慮*爲什麼*該指令做錯了,並修復它。獲取你的調試器。 – 2014-09-29 12:39:03
@TNH你的英語並不差。例如,我不能用荷蘭語說一個字。但是,在您的來源中使用除英語之外的任何其他語言通常是一個糟糕的主意,無論是代碼還是評論。這是一個完美的例子:如果這些評論是英文的,那麼也許我們中的一些人可以發現你的代碼與你的實際意圖不符;或者至少他們會提供一些更清晰的SegFault可能來自哪裏的線索。 – Powerslave 2014-09-29 13:37:21