对于 ARM 架构,我们使用 SVC
指令进行系统调用。我的引用是以下 ARM's What is semihosting? 。
特别是,选择任何版本,选择 Arm Compiler Toolchain Developing Software ...,然后选择 Semihosting,以查看可用的系统调用号。
有人想要定义一个 getChar()
例程,将 char
保留在寄存器 r0
中。根据文档,调用时r1
必须为0,退出后r0
包含读取的字符。因此,人们认为类似的东西,
mov r1,#0
mov r0,#7
svc 123456
应该是必不可少的成分。但是,该程序不会等待输入。我还可以肯定地说,退出后寄存器r0
始终包含值0。对正在发生的事情有什么想法吗?我怀疑问题在于理解文档中控制台的含义。
最佳答案
来自 qemu 1.4.0 源代码:(文件 target-arm/arm-semi.c
,第 303-305 行)
case TARGET_SYS_READC:
/* XXX: Read from debug console. Not implemented. */
return 0;
如果您确实想使用 qemu 的半主机模式并从“控制台”读取,我建议您使用缓冲区大小为 1 的 SYS_READ。
关于assembly - 使用 QEMU 和 ARM 半托管获取输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15916514/