gpt4 book ai didi

c bootloader传递函数参数无法正常工作

转载 作者:行者123 更新时间:2023-11-30 16:38:20 24 4
gpt4 key购买 nike

我在 c 中有一个基本的引导加载程序,但是当我尝试将参数传递给函数时,它不能正常工作。以下代码不起作用:

__asm__(".code16\n");
__asm__("call main\n");

void main(){
putchar('X');
while(1){}
}

void putchar(char c){
__asm__("movb %0, %%al\n" : : "r"(c));
__asm__("movb $0x0e, %ah\n");
__asm__("int $0x10\n");
}

它应该打印出一个 X,但它只是向前移动光标,就像打印一个空格一样。

以下代码之所以有效,是因为它不将字符作为参数传递:

__asm__(".code16\n");
__asm__("call main\n");

char c;

void main(){
c = 'X';
putchar();
while(1){}
}

void putchar(){
__asm__("movb %0, %%al\n" : : "r"(c));
__asm__("movb $0x0e, %ah\n");
__asm__("int $0x10\n");
}

有人可以解释一下为什么它不起作用吗?

最佳答案

问题不在于它作为参数传递,而在于我错误地使用了程序集。以下代码有效:

__asm__(".code16\n");
__asm__("call main\n");

void main(){
putchar('!');
while(1){}
}

void putchar(char c){
__asm__ __volatile__("int $0x10" : : "a"(0x0e00 | c), "b"(0x0007));
}

关于c bootloader传递函数参数无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47519521/

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