【问题标题】:assembler set up function dependent on variable汇编器设置函数依赖于变量
【发布时间】:2016-06-28 16:50:44
【问题描述】:

所以我正在编写一个汇编程序,其中我将一个变量设置为 onetwo三个,然后依赖于该变量的权利函数应该在进一步的程序中使用。

例如,如果值为 one,则函数应如下所示:

FUNC:
    ADD   r2, r3, 6
    WBS   r30.t1
    SUB   r3, r3, 1

或者如果值为两个

FUNC:
    ADD   r2, r4, 5
    SUB   r4, r4, 2

所以根据实际调用的函数,主循环应该没有区别。

如何配置程序集标签以运行另一个预先定义的例程?

【问题讨论】:

  • 你如何在任何其他语言中做到这一点,if variable then functino else if then function,依此类推。就在这里做。或者用高级语言编写一个简单的函数来编译它,看看编译器会产生什么。基本上你需要比较和跳跃
  • @dwelch:好吧,简单但对我的目的来说效率不高。这些函数将被非常频繁地调用,我只需要将它们初始化为专用例程,然后保持原样。它们将仅更改一次。我想知道是否没有更好的解决方案。
  • 你的意思是一个函数指针?或自行修改代码。
  • 不能只使用函数指针(即间接分支)吗?
  • 你仍然需要做一些 if then else 的风格,你可以通过观察编译器是如何做的,然后查找指令来学习。您没有选择没有条件执行路径或有条件执行路径。下定决心

标签: assembly arm 32-bit beagleboneblack


【解决方案1】:

这个“变量”是汇编时常数吗?如果是这样,那么使用汇编宏而不是在运行时执行的指令。

如果不是,但它的更改极少,自修改代码可以工作。 (即,当它发生变化时,将相应的机器代码复制到标记为FUNC 的缓冲区中,这样您就不必在每次调用之前检查变量)。

这并不是真正的 self 修改代码,除非“self”表示整个程序。它更像是一个特殊用途的 JIT 编译器。


如果这些都不是真的,那么你显然必须以某种方式编写依赖于变量值的 asm。条件分支、间接跳转/调用或谓词执行是主要选择。

请记住,每条汇编指令只是变成一些字节的机器代码。您只能使用 asm 指令与运行时“变量”进行交互,而不是汇编指令或任何您希望的“魔法”。

【讨论】:

  • 代码修改案例的附录:如果相关函数只从一两个地方调用,那么只修补调用指令的分支偏移量可能更简单、更有效,而不是重写被调用者的全部代码。
猜你喜欢
  • 1970-01-01
  • 2022-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-27
  • 1970-01-01
相关资源
最近更新 更多