[英]assembly language code doesn't add correctly
我正在嘗試編寫一個將數字乘以 2(不使用乘法)並將其打印出來的匯編語言代碼,但我的匯編代碼不起作用 - 它在應該打印 20 時打印 0。我檢查過並進行了初始化%r10 到 10,但是在我將 %r10 復制到 %r11 后, %r10 的值就變成了一個不相關的數字 (582)。 有人可以幫助指出我做錯了什么以及我應該如何實施嗎? 謝謝!
.section .rodata
sOutputFmt: .string "%ld\n"
.section .text
.globl main
main:
subq $8,%rsp
movq $10,%r10
movq %r11,%r10
addq %r11,%r10
addq %r11,%r10
movq $sOutputFmt,%rdi
movq %r10,%rsi
call printf
addq $8,%rsp
ret
movq $10, %r10
movq %r11, %r10
AT&T 語法(與 Intel 語法相反)先是源,然后是目標。 因此,上面的第一行正確地將10
加載到r10
,然后第二行將r11
任何內容(根據您的結果可能為零)加載到r10
,並覆蓋它。
如果您希望r11
以雙r10
結束,則序列將類似於:
movq %r10, %r11 ; r11 <- r10
addq %r10, %r11 ; r11 <- r11 + r10
注意事項有一個mov
和一個add
在那里。 您的原始代碼有一個mov
后跟兩個add
指令,這意味着您最終會乘以三而不是二。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.