在汇编语言中声明变量时,我对如何存储内存感到困惑。我有这个示例代码块:
val1 db 1,2
val2 dw 1,2
val3 db '12'
从我的学习指南中可以看出,内存中用于存储这三个数据定义声明的数据所需的总字节数是8个字节(十进制)。我该如何计算呢?
它还表示 val3 数据段的偏移量为6个字节,偏移量5的十六进制字节为00.我对如何计算这些字节和偏移量感到迷茫。 / p>
此外,将 val1 读入内存将产生0102但是将 val3 读入内存会产生3132.撇号是由3表示还是来自哪里?如何将 val2 读入内存?
答案 0 :(得分:5)
您有两个字节0x01
和0x02
。到目前为止,这是两个字节。
然后你有两个字, 0x0001
和0x0002
。这是另外四个字节,到目前为止已有六个字节。
你还有两个字节组成了 string '12'的字符,它们是ASCII (a)中的0x31
和0x32
。这是另外两个字节,使总计达到8个。
以little-endian格式(这是你根据你的问题所述的内存值在这里看到的),它们被存储为:
offset value
------ -----
0 0x01
1 0x02
2 0x01
3 0x00
4 0x02
5 0x00
6 0x31
7 0x32
(a)在这种情况下,您使用的字符集是ASCII字符集(您可以在该表中按照该链接描述该集合中的所有字符)。 / p>
字节值0x30
到0x39
是0
到[{1}}的数字,就像字节9
到{ {1}}表示大写字母字符。伪操作:
0x41
表示插入字符0x5A
和db '12'
的字节。
类似地:
'1'
会给你十六进制转储表示:
'2'
答案 1 :(得分:3)
val1
是两个连续的字节1
和2
。 db
表示“直接字节”。 val2
是两个连续的单词,即4个字节,再次是1和2.在内存中它们将是1, 0, 2, 0
,假设你在一个大端机器上。 val3
是一个两个字节的字符串。 31
和32
in是49和50的十六进制表示法,它们是字符“1”和“2”的ASCII代码。