繁体   English   中英

我无法使用 x86 程序集将数组元素存储到寄存器中

[英]I am not able to store an element of an array into a register using x86 assembly

以下是我在汇编中的代码:

    mov esi, MemberLvl
    mov edi, OfficerLst

    mov al, [esi]
    mov test1, al
    mov ah, [edi]
    mov test2, ah

在 C++ 主程序中,我声明了一个名为MemberLvlOfficerLst的长类型列表,以及两个长类型 - test1test2

每当我尝试运行我的代码时,它总是说存在与mov test1, almov test2, ah的操作数大小冲突。

我的想法是每个数组都存储在esiedi中。 然后,我通过获取第一个 memory 地址,将第一个元素存储到alah中。 因为每个 long 是 8 个字节,而alah寄存器是 8 个字节,我认为它可以将它存储到test1test2 (它们都声明为 long,8 个字节),但事实并非如此。 我不确定为什么会这样。

alah8 位值(1 字节)。 根据您的说法, test1test2是“长”的,它是 32 位(4 字节)或 64 位(8 字节),具体取决于您的编译器/系统。

如果要将值存储在各自的变量中,可以使用movzx (如果无符号)或movsx (如果有符号)。


另外,请注意,如果MemberLvllong ,然后将其移动到esi ,那么执行[esi]可能是未定义的行为,除非MemberLvl恰好包含有效的指针地址。 如果MemberLvllong * ,那么它可能没问题,但是[esi]是 32 位或 64 位值,因此您根本不应该使用alah

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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