汇编x86 MASM中的十六进制数组



如果:(我相信寄存器是相邻的…(

 A BYTE 0xB, 0d20, 0d10, 0d13, 0x0C
 B WORD 0d30, 0d40, 0d70, 0hB 
 D DWORD 0xB0, 0x200, 0x310, 0x400, 0x500, 0x600 

然后:

  • 什么是[A+2]?答案是0d20或0x15
  • 什么是[B+2]?答案是40或0x28
  • 什么是[D+4]?不确定
  • 什么是[D-10]?不确定

我想这些都是答案,但我不确定。由于一个单词是1字节,AND DWORD是2个单词,因此,例如,当您对[B+2]数组进行计数时,您应该从0d30开始,然后从0d40开始(计数两个单词(。[A+2]是0d20,因为您正在计算两个字节。我做错了什么?

这是因为:考虑到A、B和D的第一个值是偏移x86是小端序。。。A=0d10,从中再计数2个B…字节(十进制(=30,0,40,0,70,0,11,0 B是0d40,从中又计数2个字节D…字节(十六进制(=0x200,0,0,0,。。。0,2,0,。。。0x10,3,0,0,。。。0,4,0,0,。。。0,5,0,0,。。。0.6,‌​0,0 D为0x200。从中计数4个字节。从0xb0向后计数10个字节。那么[D-10]不等于0x0C吗?

如果我做了[B-3],会是0d13吗?我被告知它实际上在0d10和0d13之间,因此它将是0A0D,由于小endian,它将是0D0A。这是正确的吗?

什么是[A+2]?答案是0d20或0x15

从[A](与[A+0]相同(开始,前进两个字节

A BYTE 0xB, 0d20, 0d10, 0d13, 0x0C
       ^0   ^1    ^2   

答案:0d10

什么是[B+2]?答案是40或0x28

一个单词是两个字节的

偏移量总是以字节为单位。因此+2=+2字节=+1字

B WORD 0d30, 0d40, 0d70, 0hB 
   ^0    ^+2  <--bytes
   ^0    ^+1  <--words

答案:0d40

什么是[D+4]?不确定

每个双字是四个字节的

索引总是以字节为单位,因此+4=+4字节=+1双字

从[D]开始,这与[D+0]相同。。。多个前向

D DWORD 0xB0, 0x200, 0x310, 0x400, 0x500, 0x600 
        ^0    ^+1   <--dwords
        ^0    ^+4   <--bytes

答案:0x200

什么是[D-10]?不确定

偏移总是以字节为单位

一个双字包含四个字节的

一个单词包含两个字节的

A BYTE 0xB, 0d20, 0d10, 0d13, 0x0C
                        ^-10  ^-9
B WORD 0d30, 0d40, 0d70, 0hB 
       ^-8   ^-6   ^-4   ^-2
D DWORD 0xB0, 0x200, 0x310, 0x400, 0x500, 0x600 
        ^0

答案:0d13

最新更新