【问题标题】:Initializing array in assembler在汇编程序中初始化数组
【发布时间】:2011-10-07 01:57:11
【问题描述】:

我刚开始学习 ASM,我有 C 经验,但我想没关系。 无论如何,我怎样才能将 DT 的 12 元素数组初始化为 0,以及如何不初始化呢?

我使用 FASM。

【问题讨论】:

  • 该语言称为“汇编”,将其转换为可执行文件的系统软件称为“汇编器”。

标签: arrays assembly fasm


【解决方案1】:

由于数组只是一个连续的内存块,元素一个接一个,您可以在 NASM 中执行类似的操作(不确定 FASM 是否支持 times 指令,但您可以尝试):

my_array:
    times 12 dt 0.0

当你的源代码被组装成:

my_array:
    dt 0.0
    dt 0.0
    dt 0.0
    dt 0.0
    dt 0.0
    dt 0.0
    dt 0.0
    dt 0.0
    dt 0.0
    dt 0.0
    dt 0.0
    dt 0.0

【讨论】:

  • 我试过了,但当我使用 times 语法时,我得到了无效的操作数。
  • 哦,是的,它支持时间指令,但我不知道为什么我不能将它与 dt 变量 x_x 一起使用
  • 您不能将 tbytes 初始化为整数,只能初始化为浮点数:times 12 dt 0.0
【解决方案2】:

只需使用 reserve data 指令并保留 12 tbytes:

array:          rt 12

【讨论】:

  • 那么我必须保留 10x12 字节对吗? dt 是 10 个字节。
  • 然后我通常可以像 :mov eax, [array+10](second element) 那样引用那些字节吗?
  • 是的,但是当您使用 tbytes 时,也许您的意思是 fld tbyte [array+10]?
  • 这是为什么呢?我刚开始学习,有些东西对我来说还很模糊。
  • eax 是 32 位,你只能放四个字节。 tbytes 主要用于 80 位全精度浮点数。
猜你喜欢
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-05
  • 2021-01-19
相关资源
最近更新 更多