assembly - 使用 QEMU 和 ARM 半托管获取输入?

标签 assembly arm qemu

对于 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/

相关文章:

arm - 使用 Qemu 模拟 reMarkable 平板电脑 (i.MX6 ARMv7)

assembly - 分支指令与数据相关吗?

c - 检测堆栈覆盖错误

assembly - 下面代码中EBP的作用是什么?

arm - 如何修复 STM32CubeProgrammer 未找到 STM32 目标

无法分配链接描述文件中定义的变量的地址

Android Emulator 因 float 异常而崩溃

c++ - 如何将 double 类型的鼠标移动 x 和 y 从主机传递到 Qemu 中的虚拟机

assembly - 为什么 "push ebp"会改变 ebp 的值?

c++ - gcc中使用内联汇编的调用方法