如何在 Assembly 中分别处理 DDword 中的每个字节?

How to work with each byte in a DDword separately in Assembly?

我在分别处理十六进制数的每个字节时遇到问题,例如:

key: DD 0xCAEFBABE

据此,我想使用 CA 并创建另一个 DWord,例如

0x CA notCA CA notCA

并使用它,然后传递给第二个字节 EF 并做同样的事情。

你能给我一些建议或处理方法吗?

这应该很简单:

key: dd 0xCAEFBABE
foo: dd 0

mov ah,[key + 3]  ; 0xCA
mov al,ah
not al            ; ax = (0xCA << 8) | not CA
mov [foo],ax      
mov [foo+2],ax    ; foo = 0xCA(not CA)CA(not CA)

是的。在 x86 程序集中(我使用 MASM 语法)很简单。您使用寄存器固定地址并引用它:

lea esi, key

然后你访问它的内容并屏蔽结果(在 x86 的 'Little Endian Format' 中,最低字节在顺序内存顺序中排在第一位,所以这是可行的)。

mov eax, dword ptr [esi]
and eax, 0FFh

访问下一个 DWORD 看起来像

mov eax, dword ptr [esi+1]
and eax, 0FFh