如何在Assembly中单独处理DDword中的每个字节?

时间:2016-04-12 10:00:09

标签: assembly x86 i386

我从一个十六进制数字分别操作每个字节的问题,例如:

  

键:DD 0xCAEFBABE

从这里,我想拿CA并制作另一个像

的DWord
  

0x CA notCA CA notCA

并使用它,然后传递给第二个字节EF并执行相同的操作。

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

2 个答案:

答案 0 :(得分:1)

这应该很容易:

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)

答案 1 :(得分:0)

是。在x86程序集(我使用MASM语法)中,这很简单。您使用寄存器来修复地址并引用它:

lea esi, key

然后你访问它的内容并屏蔽结果(在x86的小端格式中,最低字节按顺序存储顺序排在第一位,这样就可以了。)

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

访问下一个DWORD看起来像

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