当前位置:   article > 正文

CM3:qemu执行汇编

CM3:qemu执行汇编

正文

环境:macOS M1。
前文讨论了 qemu 模拟8086 的平台运行8086 汇编代码,本文将讨论 qemu 模拟arm 平台运行 CM3 代码。代码:

.syntax unified
.cpu cortex-m3

.global _start

.equ UART0_BASE, 0x4000C000
.equ UART0_DR, UART0_BASE + 0x00
.equ UART0_FR, UART0_BASE + 0x18
.equ TXFE, 0x80

.section .text
.thumb_func
_start:
    // 设置堆栈指针
    ldr sp, =stack_top

    // 复位向量表
    .word _start

    // 复位向量(Reset Handler)
    _reset_handler:
        // 初始化 UART0
        ldr r0, =UART0_DR
        ldr r1, =0x48 // 'H'
        str r1, [r0]
        ldr r1, =0x65 // 'e'
        str r1, [r0]
         ldr r1, =0x6C // 'l'
        str r1, [r0]
        ldr r1, =0x6C // 'l'
        str r1, [r0]
        ldr r1, =0x6F // 'o'
        str r1, [r0]
        ldr r1, =0x2C // ','
        str r1, [r0]
        ldr r1, =0x20 // ' '
        str r1, [r0]
        ldr r1, =0x57 // 'W'
        str r1, [r0]
        ldr r1, =0x6F // 'o'
        str r1, [r0]
        ldr r1, =0x72 // 'r'
        str r1, [r0]
        ldr r1, =0x6C // 'l'
        str r1, [r0]
        ldr r1, =0x64 // 'd'
        str r1, [r0]
        ldr r1, =0x21 // '!'
        str r1, [r0]
        // 其他字符...

    // 等待 UART0 发送完成
    wait_for_tx:
        ldr r0, =UART0_FR
        ldrb r1, [r0]
        tst r1, #TXFE
        bne wait_for_tx

    // 程序结束
    b .

stack_top: .word 0x20001000
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62

编译以及链接:

arm-none-eabi-as -o hello.o hello.s
arm-none-eabi-ld -Ttext=0x0 -o hello.elf hello.o
arm-none-eabi-objcopy -O binary hello.elf hello.bin
  • 1
  • 2
  • 3

如果mac 上没有这些命令,直接安装以下:

安装:

brew tap ArmMbed/homebrew-formulae
brew install arm-none-eabi-gcc
  • 1
  • 2

这两个命令是用于在 macOS 系统上安装 ARM 嵌入式开发工具链的:

  1. brew tap ArmMbed/homebrew-formulae

    • 这个命令通过 Homebrew 向您的系统添加了一个额外的存储库(tap),这个存储库包含了 ARM Mbed 的一些软件包。Homebrew 是 macOS 上一个流行的包管理器,用于安装和管理软件包。
    • tap 命令允许您在 Homebrew 中添加非官方的软件源,以便于安装那些不在官方存储库中的软件包。
  2. brew install arm-none-eabi-gcc

    • 这个命令使用 Homebrew 从 ARM Mbed 的存储库中安装 ARM 嵌入式设备的 GCC 工具链。
    • arm-none-eabi-gcc 是一个用于编译嵌入式 C/C++ 代码的工具链,针对 ARM Cortex-M 和 Cortex-R 处理器系列。这个工具链包括了编译器、链接器等工具,用于将源代码编译为可在 ARM 嵌入式设备上运行的机器代码。

验证安装:

安装完成后,可以在终端中运行以下命令来验证 ARM Cortex-M 工具链的安装:

arm-none-eabi-gcc --version
arm-none-eabi-as --version
arm-none-eabi-ld --version
arm-none-eabi-objcopy --version
  • 1
  • 2
  • 3
  • 4

我们接着就用 qemu 来运行我们的二进制文件:

qemu-system-arm -M lm3s6965evb -nographic -kernel hello.bin
Timer with period zero, disabling
Hello, World!
  • 1
  • 2
  • 3

可以看到,成功得运行了。其中的 lm3s6965evb 是 Luminary Micro 的 Cortex-M3 处理器(LM3S6965)的一种开发板型号,这个命令告诉 QEMU 使用 LM3S6965 Cortex-M3 处理器模拟器,在终端中以无图形界面模式运行,并加载名为 hello.bin 的内核镜像文件。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/515168
推荐阅读
相关标签
  

闽ICP备14008679号