Assembly 汇编程序设置依赖于变量的函数

Assembly 汇编程序设置依赖于变量的函数,assembly,arm,32-bit,beagleboneblack,Assembly,Arm,32 Bit,Beagleboneblack,因此,我正在编写一个汇编程序,其中我将一个变量设置为1、2或3,然后根据该变量,在下一个程序中应该使用正确的函数 例如,如果值为1,则函数应如下所示: FUNC: ADD r2, r3, 6 WBS r30.t1 SUB r3, r3, 1 或者,如果值为2: 因此,根据真正调用哪个函数,主循环应该没有区别 如何配置程序集标签以运行另一个预先设置的例程?此“变量”是否为程序集时间常数?如果是这样,则使用汇编宏,而不是将在运行时执行的指令 如果不是,但它很少更

因此,我正在编写一个汇编程序,其中我将一个变量设置为1、2或3,然后根据该变量,在下一个程序中应该使用正确的函数

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

FUNC:
    ADD   r2, r3, 6
    WBS   r30.t1
    SUB   r3, r3, 1
或者,如果值为2:

因此,根据真正调用哪个函数,主循环应该没有区别

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

此“变量”是否为程序集时间常数?如果是这样,则使用汇编宏,而不是将在运行时执行的指令

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

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


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


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

在任何其他语言中,如果是变量,则是函数,否则是函数,等等。就在这里。或者用高级语言编写一个简单的函数,编译它,看看编译器生成了什么。基本上你需要比较和分析jump@dwelch:好的,简单但对我来说效率不高。。这些函数将被频繁调用,我只需将它们初始化为专用例程,然后保持原样。它们将只更改一次。我想知道是否没有更好的解决方案。你是说函数指针?或者自修改代码。难道你不能只使用函数指针(即间接分支)吗?你仍然需要做一些if-then-else的操作,你可以通过观察编译器如何操作,然后查找指令来学习。您没有选择,或者没有条件执行路径,或者没有条件执行路径。编写代码修改案例的附录:如果所讨论的函数只从一个或两个地方调用,那么只修补调用指令的分支偏移量可能更简单、更有效,而不是重写被调用方的整个代码。
FUNC:
    ADD   r2, r4, 5
    SUB   r4, r4, 2