理解这一点ASM代码

时间:2013-07-29 04:26:54

标签: assembly x86

我花了一两天钻研大会。我一直在阅读一本相当不错的教程,它涵盖了不同的寄存器/二进制数系统的工作原理等等;但是,它并没有真正进入汇编代码本身。它只讨论了Assembly的概念及其工作原理等(它确实提供了一些代码示例,如下所示 - 但没有解释代码中发生的很多事情)。

msg db 'Displaying 9 stars', 0xa
len equ $ - msg
s2 times 9 db '*'

虽然我觉得我已经知道事情是如何运作的,但我想问一些关于上述代码的问题(真的想了解它是如何工作的,而不是接受它的工作原理)。

1)任何文本都可以在0xa之后(假设0xa是换行符)吗?

2) $ - VARIABLE (在这种情况下, $ - msg )获取变量的长度吗? $ $的目的究竟是什么?

3)这里发生了什么: s2次9 db''*

我在问题#3中的假设是变量s2正被设置为9 的字符串。如果是这样,为什么db''最后?做s2 db'*'次9会不会更有意义。

1 个答案:

答案 0 :(得分:2)

1)当然,你可以有例如第二行和第三行,依此类推。

2)是的。 $表示当前位置,因此$ - variable表示当前地址减去变量的起始地址,即长度。

3)从当前段分配9个数据字节,每个字节值为'*',地址名称为s2。