我目前正試圖在自己的標題中發佈自己的x86環境。請注意我不只是想要一個答案,我想學習這個並且流利。x86 linux - GAS - AT&T - Stosb?
我在將數據存儲在主寄存器以外的存儲器地址(eax
,ebx
,ecx
,edx
)中存在很多問題。
.global main
.text
str: .string "data: %d\n"
main:
pushl $3
call malloc
popl %ecx
movl $4, %esi #source
movl %eax, %edi #destination
stosb
movl %eax, %esi
lodsb
pushl %edi
pushl $str
call printf
popl %ecx
popl %ecx
的stosb
後,不應該movl
把目標地址(從malloc
生產的內存地址,而原來的源地址)到目標地址,並在移動的%esi
回$4
到%edi
?
我想這個英特爾的參考手冊,但我得到:add.s:19:錯誤:沒有這樣的指令:'STOSD」 – CodeLikeBananas
爾加,它可能叫'stosl'在AT&T的語法。 (我對10倍的英特爾語法更加熟悉,因爲這就是我長大的原因。) –
爲了解釋區別,32位量也稱爲雙字或長字。英特爾語法更喜歡使用'd'; AT&T語法更喜歡使用'l'。 –