2

我正在尝试在我的内核开发研究中使用 ACPI。执行代码时port_byte_out(0xB004, 0x0000 | 0x2000),bochs 给出“忽略 len 1 写入端口 0xb004”错误。C函数如下:

void port_byte_out(unsigned short port, unsigned char data) {
    __asm__("out %%al, %%dx" : : "a" (data), "d" (port));
}

这个错误是什么意思?

4

1 回答 1

1

我认为您的意思是使用 asm 指令outb而不是out. outb将一个字节输出到out写入 2 字节字的端口。考虑将代码更改为:

__asm__("outb %%al, %%dx" : : "a" (data), "d" (port));

尽管您使用示例void port_byte_out(unsigned short port, unsigned char data)的第二个参数定义了该函数,但尝试将 2 字节字(short int)作为. 建议您希望该函数输出一个byte。将被截断,因为它大于. 大多数编译器应该对此发出警告。unsigned char dataport_byte_out(0xB004, 0x0000 | 0x2000)dataport_byte_out0x0000 | 0x2000unsigned char

也许您打算拥有另一个功能:

void port_word_out(unsigned short port, unsigned short data) {
    __asm__("out %%ax, %%dx" : : "a" (data), "d" (port));
}

那么您可以将其称为:

port_word_out(0xB004, 0x0000 | 0x2000)
于 2014-09-23T09:25:47.870 回答