繁体   English   中英

在X86程序集中访问和移动字节

[英]Accessing and moving bytes in X86 assembly

我对X86汇编中的内存和寄存器有几个疑问:

  1. 我有一个字符串"abcdefgh" ,寄存器%eax拥有一个指向该字符串的指针。 现在,我使用movl (%eax), %edx将字符串的前四个字节捕获到%edx 它们如何存储在寄存器中? %dl寄存器中的字符d还是a

  2. 例如,当使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM