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

编译以及链接:

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

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

安装:

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

这两个命令是用于在 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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/585055.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu C++ man手册安装及使用

Ubuntu下C++ man手册安装 C++在线文档: http://www.cplusplus.com/reference/ 第一种办法:使用cppman $ sudo apt install cppman 使用方法 第二种办法: 打开网页:GCC mirror sites- GNU Project 点击下图中的突显行链接: Russia, Novosibirsk:

可平滑替代FTP的FTP替代解决方案,具有哪些强大功能?

FTP是一种广泛使用的文件传输协议,主要用于在网络上的计算机之间传输文件。具有以下特点: 1.简单易用:FTP协议相对简单,易于设置和使用,许多操作系统和应用程序都内置了对FTP的支持。 2.广泛的客户端支持&#xff1a…

售价不当人暴涨后,盘点当前更值得入手的SSD

PC 硬件市场本无测,去年 SSD 白菜价到如今彻底反转这一案例,可以说再次给我们狠狠上了一课。 当初被降价冲昏头脑,坚信 SSD 售价还会继续下探做起等等党的同学,看到今年这价格近乎翻倍行情估计得懵逼了吧。 不过既然有等等党&…

基于OpenCv的图像二值图和灰度直方图

⚠申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址。 全文共计3077字,阅读大概需要3分钟 🌈更多学习内容, 欢迎👏关注👀【文末】我的个人微信公众号&#xf…

Python新手入门基础英文笔记

1、字符串的操作 user:用户 name:名称/姓名 attibute:字段/属性 Value:值 2、重复/转换/替换/原始字符号 upper:上面 lower:下面 capitalize:用大写字母写或印刷 title:标题…

「笔试刷题」:求最小公倍数

一、题目 输入描述: 输入两个正整数A和B。 输出描述: 输出A和B的最小公倍数。 示例1 输入: 5 7 输出: 35 示例2 输入: 2 4输出: 4二、思路解析 这道题,也是模拟实现这一大类的一题…

探索的时光 (整数三分)

本题链接:登录—专业IT笔试面试备考平台_牛客网 题目: 样例: 输入 5 3 2 1 2 3 输出 28 思路: 根据题意,已经给出了运算函数 当我们看到这些函数的时候,联想一下,它们的单调性,以…

Adobe PS 2023、Adobe Photoshop 2023下载教程、安装教程

Adobe Photoshop &#xff08;<-下载连接&#xff09;简介&#xff1a; Adobe Photoshop是一款广泛使用的图像处理软件&#xff0c;由Adobe公司开发。它提供了许多强大的工具和功能&#xff0c;可以用于图像编辑、合成、修饰、设计等各个领域。用户可以使用Photoshop来调整…

HotSpot VM概述

许多技术人员只把JVM当成黑盒&#xff0c;要想改善Java应用的性能和扩展性无疑是一项艰巨的任务。若要提高Java性能调优的能力&#xff0c;就必须对现代JVM有一定的认知。 HotSpot VM是JDK 1.3版本之后默认的虚拟机&#xff0c;目前是使用最广泛的Java虚拟机。本文主要介绍HotS…

行为型设计模式

一、责任链设计模式 &#xff08;一&#xff09;概念 使多个对象都有机会处理同一个请求&#xff0c;从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链&#xff0c;并沿着这条链传递该请求&#xff0c;直到有一个对象处理它为止。 &#xff08;二&#xf…

算法学习Day1——【数据结构】单调栈

1.什么是单调栈以及单调栈的作用 &#xff08;1&#xff09;定义 顾名思义&#xff0c;单调栈是一个有序的栈&#xff0c;可能从栈顶到栈底单调递增&#xff08;单调递增栈&#xff09;&#xff0c;也有可能从栈顶到栈底单调递减&#xff08;单调递减栈&#xff09;。 &…

芯启智行丨基于G32A1445的汽车音乐律动氛围灯解决方案

随着智能汽车技术的深度渗入&#xff0c;汽车照明作为汽车设计的重要组成部分&#xff0c;正在重塑驾驶员与汽车的互动方式&#xff0c;从简单的照明工具优化升级为承载更多丰富功能和不同应用场景的智能化安全装置。现代智能车型广泛配备了前照灯、车内环境氛围灯、尾灯等汽车…

栈和链表的区分

栈&#xff08;Stack&#xff09;&#xff1a; 栈是一种特殊的线性表&#xff0c;遵循“后进先出”&#xff08;Last In First Out, LIFO&#xff09;原则。栈通常用数组或链表来实现&#xff0c;但重点在于其操作的限制而非底层数据结构。无论使用顺序栈&#xff08;基于数组…

读懂一本书笔记

文章目录 引言 我是一个用读书改变自己生活的人01 会读书&#xff0c;更要会讲书复杂时代&#xff0c;阅读是大众反脆弱的武器你焦虑吗&#xff1f;如何从“单向度的人”变为“多向度的人”第一&#xff0c;读书是主动的学习方式第二&#xff0c;读书是有针对性的学习方式 讲书…

kettle下载安装

下载方式&#xff1a; 1.官网下载 kettle下载链接&#xff1a; 老网站下载链接&#xff1a;https://sourceforge.net/projects/pentaho/files/这个网站已经弃用了 新网站地址获取方法&#xff1a;老网站下载链接打开&#xff0c;可以看到一个pdf下载链接&#xff0c;下载pdf 打…

二维码门楼牌管理应用平台建设:共治力量信息管理的革新

文章目录 前言一、二维码门楼牌管理应用平台的建设背景二、共治力量信息管理的重要性三、二维码门楼牌管理应用平台在共治力量信息管理中的应用四、二维码门楼牌管理应用平台的优势与挑战五、结语 前言 随着信息技术的飞速发展&#xff0c;二维码门楼牌管理应用平台的建设已成…

Spark原理之Cache Table的工作原理及实现自动缓存重复表的思考

CACHE TABLE的能力 使用此语法&#xff0c;可以由用户自定义要缓存的结果集&#xff0c;实际上就是一个临时表&#xff0c;不过数据存储在Spark集群内部&#xff0c;由Application所分配的executors管理。 一旦定义了一个缓存表&#xff0c;就可以在SQL脚本中随处引用这个表名…

Android 11 裁剪系统显示区域(适配异形屏)

概述 在显示技术中&#xff0c;"OverScan"&#xff08;超扫描&#xff09;是一种调整显示图像边界的技术。通常情况下&#xff0c;OverScan 会在显示屏的边缘周围裁剪一小部分图像。这种裁剪是为了确保显示内容在屏幕上的完整可见性&#xff0c;尤其是在老式电视或投…

【Qt】QtCreator忽然变得很卡

1. 问题 Qt Creator忽然变得很卡。电脑里两个版本的Qt Creator&#xff0c;老版本的开启就卡死&#xff0c;新版本好一点&#xff0c;但是相比于之前也非常卡&#xff0c;最明显的是在 ctrl鼠标滚轮 放大缩小的时候&#xff0c;要卡好几秒才反应。 2. 解决方案 2.1 方法1 关…

XL520无线接收芯片,2.2ms超低启动时间,-110dBm高接收灵敏度

XL520接收芯片采用SOP8封装&#xff0c;适用于300MHz- 440MHz频率范围&#xff0c;正常工作电压范围2.0~5.5V&#xff0c;工作电流在3.0~3.2mA之间。它具有快速的启动时间&#xff08;2.2ms&#xff09;和高达-110dBm的接收灵敏度&#xff0c;非常适合对低功耗要求严格的设备。…
最新文章