将dword存储到地址中

时间:2016-10-11 00:39:50

标签: assembly hex endianness dword

我正在教自己汇编语言的某些部分,现在,我正专注于在地址中存储数据声明。

当涉及到存储十六进制时,我知道如果我正在处理字节,例如;

1234

我可以像这样存储它们:

Address 0000  -  12  
Address 0001  -  24

因为dwords是32位,所以我假设每个都占用了两倍的空间。

如果我最后用dword:

54 00 87 D1 49 5A AF 56 32

它们会像这样存储:

Address 0000  -  54  
Address 0002  -  00
Address 0004  -  87
Address 0006  -  D1
Address 0008  -  49
Address 000A  -  5A
Address 000C  -  AF
Address 000F  -  56
Address 0011  -  32

1 个答案:

答案 0 :(得分:1)

正如已经指出的那样,你的价值超过了dword。

在x86上,一个"字"是16位,因为8086是一个16位微处理器。在这种情况下,它意味着"两个字节"。 A"双字"是两个字,或四个字节,一个"四字"是四个字,或八个字节。 x86是一个小端的"处理器,所以它开始从寄存器的小端写入内存。

如果您执行类似(在intel语法和gcc样式十六进制数字中):

#Load the lowest 8 bits of the rax register (al) with 0x54
#This is loading a BYTE (1 byte)
mov   al,0x54
#Load the lowest 16 bits of the rbx register (bx) with 0x5400
#This is loading a WORD (2 bytes)
mov   bx,0x5400
#Load the lowest 32 bits of the rcx register (ecx) with 0x540087D1
#This is loading a DWORD (4 bytes)
mov   ecx,0x540087D1
#Load the entire 64 bit register rdx with 0x540087D1495AAF56
#This is loading a QWORD (8 bytes)
mov   rdx,0x540087D1495AAF56

然后,如果您将这些移动到注册rsi中的地址,您将得到:

#Put the value of al (0x54) into address at [rsi+0]
mov   [rsi],al
#Put the value of bx (0x5400) starting at the address at rsi+0, 
# such that [rsi+0] will be 0x00 and [rsi+1] will be 0x54
mov   [rsi],bx
#Put the value of ecx (0x540087D1) starting at the address of rsi+0,
# such that [rsi+0] will be 0xD1, [rsi+1] will be 0x87, 
# [rsi+3] will be 0x00, and [rsi+4] will be 0x54
mov   [rsi],ecx
#Put the value of rdx (0x540087D1495AAF56) starting at the address of rsi+0,
#such that [rsi++0] will be 0x56, [rsi+1] will be 0xAF, 
# [rsi+2] will be 0x5A, [rsi+3] will be 0x49, 
# [rsi+4] will be 0xD1, [rsi+5] will be 0x87,
# [rsi+6] will be 0x00, and [rsi+7] will be 0x54
mov   [rsi],rdx  

您的示例值(9个字节)不适合任何寄存器,并且不是机器类型。

所以你得到的一个双字的ram看起来像:

0x540087D1 (小端,如x86):
第一个地址 - 0xD1
第二个地址 - 0x87
第三个地址 - 0x00
第四个地址 - 0x54

(大端,如SPARC):
第一个地址 - 0x54
第二个地址 - 0x00
第三个地址 - 0x87
第四个地址 - 0xD1

我还要补充一点,在未来的汇编问题中,你应该总是讨论有问题的架构 - 几乎没有通用的汇编问题。