簡體   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