汇编x86,每个数组的地址是多少? (检查我的答案)

Assembly x86, what is the address of each array? (checking my answer)

SECTION .DATA
V1 DB "ABC",0AH,0BH,10,11,-1,-2
V2 TIMES 2 DD 0X124F77AB
V3 DW 5,0XFE,-12,32,-1,100

假设地址从1000H开始,每个变量的基地址是多少?

我的尝试:

V3 之后是 1056H(+16 字节)吗?

SECTION .DATA vstart=1000h
V1 DB "ABC",0AH,0BH,10,11,-1,-2
V2 TIMES 2 DD 0X124F77AB
V3 DW 5,0XFE,-12,32,-1,100

V1 标签指向一条 DB(定义字节)指令。指令给出数据如下:1. 3个字母组成的字符串,2. 两个十六进制数, 3. 两个正十进制数, 4. 两个负十进制数。

带有字符串的数据库分配与字符串中一样多的字节。 (这些字节是代表字母、ASCII 还是 UTF-8 编码的代码点对汇编器来说无关紧要,它只看到字节。)这里是 3 个字节。

带有数字的数据库为这个数字分配一个字节。指定数字的基数并不重要。数字更具体地说是数字表达式,也就是说它们可以有多个由运算符连接的术语。这里是 6 个字节。

整个DB指令分配3 + 6 = 9字节。

V2 标签指向 TIMES 指令,后跟 DD(定义双字)指令。 TIMES 按照给定的数字(数值表达式)中指定的次数插入以下指令。这里是2。每次重复都是一个 DD 和一个数字,再次以十六进制形式给出。带数字的 DD 分配一个双字。这里的“字”指的是8086架构,所以一个“字”就是16位。这与 2 个字节的长度相同。所以“双字”是 32 位,与 4 个字节的长度相同。因此 TIMES 和 DD 指令占用 2 乘以 4 字节,8 字节。

V3 标签指向一条 DW(定义字)指令。同样这里的“字”指的是 8086 的 16 位操作数。所以每个数字占用 2 个字节。因为有6个数,每个占一个字,占12个字节。

这意味着虚拟开始 (vstart) 为 1000h,V1 位于 1000h,V2 位于 1000h + 9,V3 位于 1000h + 9 + 8,在 V3 行之后,下一个地址将是 1000h + 9 + 8 + 12.

现在剩下的唯一障碍就是将地址表达式分别转换为数字。您必须了解十六进制数字表示法才能正确地求和并列出这种格式的地址。这导致 V2 为 1009h,V3 为 1011h,下一个地址为 101Dh。