[英]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++ 主程序中,我聲明了一個名為MemberLvl和OfficerLst的長類型列表,以及兩個長類型 - test1和test2 。
每當我嘗試運行我的代碼時,它總是說存在與mov test1, al
和mov test2, ah
的操作數大小沖突。
我的想法是每個數組都存儲在esi
和edi
中。 然后,我通過獲取第一個 memory 地址,將第一個元素存儲到al
或ah
中。 因為每個 long 是 8 個字節,而al
或ah
寄存器是 8 個字節,我認為它可以將它存儲到test1和test2 (它們都聲明為 long,8 個字節),但事實並非如此。 我不確定為什么會這樣。
al
和ah
是8 位值(1 字節)。 根據您的說法, test1
和test2
是“長”的,它是 32 位(4 字節)或 64 位(8 字節),具體取決於您的編譯器/系統。
如果要將值存儲在各自的變量中,可以使用movzx
(如果無符號)或movsx
(如果有符號)。
另外,請注意,如果MemberLvl
是long
,然后將其移動到esi
,那么執行[esi]
可能是未定義的行為,除非MemberLvl
恰好包含有效的指針地址。 如果MemberLvl
是long *
,那么它可能沒問題,但是[esi]
是 32 位或 64 位值,因此您根本不應該使用al
或ah
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.