Bon*_*a04 1 c x86 assembly gcc inline-assembly
我正在关注youtube上的一个教程,他说需要在C中编写一些asm代码(我在汇编方面不是很好)所以我只是处理了整个代码:
unsigned char inPortB (unsigned int _port) {
unsigned char rv;
__asm__ __volatile__ ("inb %1, %0" : "=a" (rv) : "dN" (_port));
return rv;
}
Run Code Online (Sandbox Code Playgroud)
和
void outPortB (unsigned int _port, unsigned char _data) {
__asm__ __volatile__ ("outb %1, %0" : : "dN" (_port), "a" (_data));
}
Run Code Online (Sandbox Code Playgroud)
但是当我编译我得到这个错误:
operand type mismatch for 'in'
operand type mismatch for 'out'
Run Code Online (Sandbox Code Playgroud)
我该怎么办呢?
端口号需要dx
是16位寄存器.要使gcc生成引用dx
而不是edx
代码,您需要提供_port
16位类型,例如unsigned short
:
unsigned char inPortB (unsigned short _port) {
unsigned char rv;
__asm__ __volatile__ ("inb %1, %0" : "=a" (rv) : "dN" (_port));
return rv;
}
Run Code Online (Sandbox Code Playgroud)
这应该可以解决您的问题.
归档时间: |
|
查看次数: |
606 次 |
最近记录: |