[英]Accessing and moving bytes in X86 assembly
我对X86汇编中的内存和寄存器有几个疑问:
我有一个字符串"abcdefgh"
,寄存器%eax
拥有一个指向该字符串的指针。 现在,我使用movl (%eax), %edx
将字符串的前四个字节捕获到%edx
。 它们如何存储在寄存器中? 是%dl
寄存器中的字符d
还是a
?
例如,当使用movb %eax, %dl
例如movb %eax, %dl
,它实际移动了%eax
的哪个字节? %al
的一个还是相反的一个? 甚至有可能这样做吗? 还是应该使用这样的指针movb (%eax), %dh
占用指针指向的第一个字节?
假设您使用的是非常规GAS语法(source是第一个操作数,destination是第二个操作数),而不是Intel的:
它们如何存储在寄存器中? 字符d是在%dl寄存器中,还是字符a?
由于您访问的字符串就像32位数字一样,因此采用字节顺序。 x86是低位字节序,因此您在最低地址处获得了最低有效字节,因此DL将保持'a'(0x61),而整个EDX将为0x64636261。
例如,使用movb%eax(例如%dl)时,它实际移动了%eax的哪个字节? %al中的一个还是相反的一个? 甚至有可能这样做吗?
由于操作数的大小不同,因此会产生语法错误。 您不能将32位移动到8位。
还是应该使用这样的指针-movb(%eax),%dh-占用指针指向的第一个字节?
如果要访问EAX指向的数据而不是EAX本身,那么可以,那应该可以。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.