3
我正在使用Visual Studio 2017,并且想要测试$符号。使用下面的代码,我期望var1和var2的值是不同的,但它们是相同的。
.data
var1 DWORD $
var3 BYTE 16 dup (0FFh)
var2 DWORD $
这是一个什么样VS显示内存
的图像VAR1值对我来说很有意义,但是如果$应该显示下一个内存地址,为什么VAR2显示与var1相同的?它不应该显示004068A4吗?
在NASM中,'section .data' /'var1 dd $'/ ... /'var2 dd $'* does *汇编到包含自己地址的每个双字。 NASM和MASM还有另一个“有趣”的区别。 (NASM的行为可以让你做'msglen equ $ - msg'这样的东西,在MASM中,你需要在字符串的末尾加上一个标签,并使用'msg_end - msg'?)我认为NASM行为更有用并没有那么令人惊讶,除非我缺少一个用例。 –
根据我的理解,使用等号指令(=)是可行的,因为$最终放置在.code段而不是.data段。然而,我不明白'ListSize =($ - list)'是如何工作的,假设list只是一个字节数组的标识符。难道这与减去一些.data偏移量的.code偏移量是一回事吗?在这种情况下列表的值不是指数组的第一个字节? –
将** $ **视为重载操作符。当它自己使用时,汇编程序更喜欢将它视为代码段中的位置计数器,但在像'$ - list'这样的表达式中,汇编器知道* list *标签属于哪个段,因此能够计算无论如何,这是一个相对值。 –