【发布时间】:2021-12-31 02:38:47
【问题描述】:
我试图将一个字节写入 I/O 端口,但我未能在 arm64 aarch64 架构的指令集中找到正确的指令。
要在 i386 中做同样的事情,我会做类似的事情:
void dbg_io_write_8(uint16_t port, uint8_t val)
{
asm volatile (
"outb %%al, %%dx;"
/* Outputs */ : /* None */
/* Inputs */ : "a" (val), "d" (port)
/* Clobbers */ : /* None */
);
}
而且,为了阅读:
uint8_t dbg_io_read_8(uint16_t port)
{
uint8_t val;
asm volatile (
"inb %%dx, %%al;"
/* Outputs */ : "=a" (val)
/* Inputs */ : "d" (port)
/* Clobbers */ : /* None */
);
return val;
}
此代码指的是NS16550串口。
【问题讨论】:
-
arm 没有 I/O 空间和内存空间。它只有一个地址空间。外围设备映射到该空间,您可以使用芯片供应商定义的地址使用加载和存储指令(顺便说一句,ARM 不是芯片供应商,它们只是芯片供应商的 ip 供应商,就像其他 ip 供应商一样)。跨度>
-
你用的是什么芯片?
标签: io operating-system arm port arm64