【问题标题】:Understanding this bit of ASM code理解这段 ASM 代码
【发布时间】:2013-07-29 04:26:53
【问题描述】:

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

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 不是更有意义吗

【问题讨论】:

  • 组装哪个芯片? x86?哪一个?
  • @JohnSaunders Intel 处理器,x86

标签: assembly x86


【解决方案1】:

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

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

3) 从当前段分配九个数据字节,每个字节都有一个字符值 '*',地址命名为 s2。

【讨论】:

  • 啊,谢谢。看起来 s2 是 TIMES 函数的一部分。
猜你喜欢
  • 2014-07-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-21
  • 2019-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-24
相关资源
最近更新 更多