繁体   English   中英

装配x86 MASM中的十六进制数组

[英]Array in Hexadecimal in Assembly 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]? 不确定

我认为这些是答案,但我不确定。 由于WORD为1 BYTE,AND DWORD为2 WORDS,因此,例如,当计算[B + 2]的数组时,应从0d30开始,然后从0d40开始(计算两个WORD)。 [A + 2]为0d20,因为您要计数两个字节。 我究竟做错了什么?

这样做是因为:考虑到A,B和D的第一个值是偏移量x86是小尾数... A = 0d10,从那里再数2 B ...字节(十进制)= 30,0 ,40,0,70,0,11,0 B为0d40,从该D开始再计算2个字节...字节(十六进制)= 0x200,0,0,0,... 0,2,0,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,并且由于小字节序将是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 dword

从[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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM