gpt4 book ai didi

c - 汇编相当于函数指针数组?

转载 作者:行者123 更新时间:2023-11-30 17:13:20 25 4
gpt4 key购买 nike

在 C 语言中,如果我想调用基于键盘输入的函数,我会编写如下内容:

#include <stdio.h>

char A(void) {
return 'a';
}

char B(void) {
return 'b';
}

char C(void) {
return 'c';
}

char (*CHARS[])(void) = {A, B, C};
int main(void) {
char calls[] = {'a', 'b', 'c'};
char c = CHARS[getc(stdin) - 'a']();
printf("%c\n", c);
return 0;
}

我可以在汇编中进行一系列调用吗?如果该事实具有相关性,我正在使用 nasm 来编译内核。

编辑刚才又玩了一些,我想出了:

        jmp main
f0:
f1:
f2:
mov ax, 0
main:
mov bx, fns
add bx, ax
cmp bx, 0
je end
call [bx]
inc ax
jmp main
fns dw f0, f1, f2, 0
end:
hlt

上面的内容正确吗(我实际上已经组装了两天了)?

最佳答案

您可以创建一个跳转表,并修改PC(程序计数器)以跳转到表中正确的索引。例如

    ADD PC, $c      # Add index entered by the user to the PC
BRA function_a
BRA function_b
BRA function_c
end_jump_table:
# ...

还有其他地方:

function_a:
# do your thing
BRA end_jump_table
function_b:
# do your thing
BRA end_jump_table
function_c:
# do your thing
BRA end_jump_table

不是用任何特定的汇编语言,但你明白了。

关于c - 汇编相当于函数指针数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30912508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com