我目前正试图在自己的标题中发布自己的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'。 –