汇编语言:内存字节和偏移量

时间:2011-09-22 08:38:46

标签: memory assembly byte offset

在汇编语言中声明变量时,我对如何存储内存感到困惑。我有这个示例代码块:

val1  db  1,2
val2  dw  1,2
val3  db  '12'

从我的学习指南中可以看出,内存中用于存储这三个数据定义声明的数据所需的总字节数是8个字节(十进制)。我该如何计算呢?

它还表示 val3 数据段的偏移量为6个字节,偏移量5的十六进制字节为00.我对如何计算这些字节和偏移量感到迷茫。 / p>

此外,将 val1 读入内存将产生0102但是将 val3 读入内存会产生3132.撇号是由3表示还是来自哪里?如何将 val2 读入内存?

2 个答案:

答案 0 :(得分:5)

您有两个字节0x010x02。到目前为止,这是两个字节。

然后你有两个字, 0x00010x0002。这是另外四个字节,到目前为止已有六个字节。

你还有两个字节组成了 string '12'的字符,它们是ASCII (a)中的0x310x32 。这是另外两个字节,使总计达到8个。

以little-endian格式(这是你根据你的问题所述的内存值在这里看到的),它们被存储为:

offset  value
------  -----
     0   0x01
     1   0x02
     2   0x01
     3   0x00
     4   0x02
     5   0x00
     6   0x31
     7   0x32

(a)在这种情况下,您使用的字符集是ASCII字符集(您可以在该表中按照该链接描述该集合中的所有字符)。 / p>

字节0x300x390到[{1}}的数字,就像字节9到{ {1}}表示大写字母字符。伪操作:

0x41

表示插入字符0x5Adb '12' 的字节。

类似地:

'1'

会给你十六进制转储表示:

'2'

答案 1 :(得分:3)

val1是两个连续的字节12db表示“直接字节”。 val2是两个连续的单词,即4个字节,再次是1和2.在内存中它们将是1, 0, 2, 0,假设你在一个大端机器上。 val3是一个两个字节的字符串。 3132 in是49和50的十六进制表示法,它们是字符“1”和“2”的ASCII代码。