簡體   English   中英

匯編語言代碼添加不正確

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM