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

rap*_*yen 0 memory assembly byte offset

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

val1  db  1,2
val2  dw  1,2
val3  db  '12'
Run Code Online (Sandbox Code Playgroud)

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

它还说val3数据段的偏移量是6个字节,偏移量5的十六进制字节是00.我对如何计算这些字节和偏移量感到很遗憾.

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

pax*_*blo 5

你有两个字节,0x010x02.到目前为止,这是两个字节.

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

在你有两个字节组成的字符字符串 "12",这是0x310x32在ASCII (一).这是另外两个字节,总计达到8个.

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

offset  value
------  -----
     0   0x01
     1   0x02
     2   0x01
     3   0x00
     4   0x02
     5   0x00
     6   0x31
     7   0x32
Run Code Online (Sandbox Code Playgroud)

(a)在这种情况下你使用的字符集是ASCII字符集(你可以按照该链接描述描述该集合中所有字符的表).

字节0x300x39是数字09,正如字节0x41直通0x5A表示大写字母字符.伪操作:

db '12'
Run Code Online (Sandbox Code Playgroud)

是说插入字符的字节'1''2'.

同理:

db 'Pax is a really cool guy',0
Run Code Online (Sandbox Code Playgroud)

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

addr  +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F  +0123456789ABCDEF
0000  50 61 78 20 69 73 20 61 20 72 65 61 6C 6C 79 20   Pax is a really 
0010  63 6F 6F 6C 20 67 75 79 00                        cool guy.
Run Code Online (Sandbox Code Playgroud)