对于ARM架构,我们使用SVC
指令进行系统调用。我的参考是以下ARM的什么是半托管?。特别是,选择任何版本,选择Arm编译器工具链开发软件…,然后选择Semihosting,以查看可用的系统调用号码。
要定义一个getChar()
例程,使char
留在寄存器r0
中。根据文档,r1
在调用时必须为0,并且在退出后r0
包含read字符。因此,人们认为像
mov r1,#0
mov r0,#7
svc 123456
应该是必不可少的成分。然而,程序并不等待输入。我也可以肯定地说,寄存器r0
在退出后总是包含值0。有什么想法吗?我怀疑问题在于理解console在文档中的含义。
从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的半托管模式并从'控制台'读取,我建议你使用SYS_READ,缓冲区大小为1。