如何在 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
我在分别处理十六进制数的每个字节时遇到问题,例如:
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