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字节)?
b91juud31#
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.两个十进制负数。带有字符串的DB分配的字节数与字符串中的字节数相同。(这些字节是表示字母、ASCII还是UTF-8编码的代码点对汇编程序来说并不重要,它只看到字节。)这里是3个字节。带数字的DB为该数字分配一个字节。数字以什么基数指定并不重要。数字是更具体的数值表达式,即它们可以有多个由运算符连接的项。这里是6个字节。整个DB指令分配3 + 6 = 9个字节。V2标签指向后跟DD的TIMES指令(定义双字)指令。TIMES将以下指令插入数字中指定的次数(数值表达式)。这里是2。每次重复是一个DD,带有一个数字,同样以十六进制形式给出。带有一个数字的DD分配一个双字。这里的“字”指的是基于8086的体系结构,因此,一个“字”是16位,与2字节的长度相同。因此,一个“双字”是32位,与4字节的长度相同。因此,TIMES和DD指令占用4字节的2倍,即8字节。V3标签指向DW(定义字)指令。这里的“字”指的是8086的16位操作数。因此,每个数字占用2个字节。由于有6个数字,每个数字占用一个字,结果是12个字节。这意味着对于1000 h的虚拟开始(vstart),V1在1000 h,V2在1000 h + 9,V3在1000 h + 9 + 8,并且在V3线之后,下一个地址将是1000 h + 9 + 8 + 12。现在剩下的唯一障碍是将地址表达式转换为数字。您必须了解十六进制数字表示法,才能正确求和并以这种格式列出地址。这将导致V2为1009 h,V3为1011 h,下一个地址为101 Dh。
1条答案
按热度按时间b91juud31#
V1标签指向DB(定义字节)指令。该指令的给定数据如下:1.一个由3个字母组成的字符串,2.两个十六进制数字,3.两个十进制正数,4.两个十进制负数。
带有字符串的DB分配的字节数与字符串中的字节数相同。(这些字节是表示字母、ASCII还是UTF-8编码的代码点对汇编程序来说并不重要,它只看到字节。)这里是3个字节。
带数字的DB为该数字分配一个字节。数字以什么基数指定并不重要。数字是更具体的数值表达式,即它们可以有多个由运算符连接的项。这里是6个字节。
整个DB指令分配3 + 6 = 9个字节。
V2标签指向后跟DD的TIMES指令(定义双字)指令。TIMES将以下指令插入数字中指定的次数(数值表达式)。这里是2。每次重复是一个DD,带有一个数字,同样以十六进制形式给出。带有一个数字的DD分配一个双字。这里的“字”指的是基于8086的体系结构,因此,一个“字”是16位,与2字节的长度相同。因此,一个“双字”是32位,与4字节的长度相同。因此,TIMES和DD指令占用4字节的2倍,即8字节。
V3标签指向DW(定义字)指令。这里的“字”指的是8086的16位操作数。因此,每个数字占用2个字节。由于有6个数字,每个数字占用一个字,结果是12个字节。
这意味着对于1000 h的虚拟开始(vstart),V1在1000 h,V2在1000 h + 9,V3在1000 h + 9 + 8,并且在V3线之后,下一个地址将是1000 h + 9 + 8 + 12。
现在剩下的唯一障碍是将地址表达式转换为数字。您必须了解十六进制数字表示法,才能正确求和并以这种格式列出地址。这将导致V2为1009 h,V3为1011 h,下一个地址为101 Dh。