汇编环境搭建 【基于KEIL】

前言

学习东西还是要学习底层,学了这么久STM32,一直都是通过操纵库文件去控制的,一直有种"不求甚解"的感觉。之前看过王爽落实的《汇编语言》(基于8086的汇编),觉得写的很好,一直没有机会试试(因为不会搭建ARM汇编的仿真环境),折腾了好久终于搭建起了环境来试一试,记录一下以免后面忘记。

参考文章:https://blog.csdn.net/qq_38113006/article/details/112062705

环境搭建

创建工程

新建工程选择一款STF1系列的单片机。

然后创建一个汇编文件.s,添加进来。

找个STM32的工程 将启动文件的内容复制过来

这个时候会有两个报错,是因为我们的外部没有声明这两个函数,我们屏蔽掉就好了。

再次编译报错解决。可以开始进行汇编代码的练习了。

STM32F103启动流程

我们可以再次来回顾一下STM32的汇编启动流程。

STM32一开始启动的时候需要建立中断向量表,如下所示。

这是一张官方文档的向量表图

这是汇编启动建立向量表的过程,DCD表示分配一个字的内存,并进行初始值赋值。因为第一个是放置栈顶的地址所以我们初始化的时候也可以手动设置栈的大小。

EQU相当于我们C语言中的Define,是用来定义一个常量的,使用SPACE 是用来分配内存而不进行初始化。

通过了解中断向量表的内容可以知道,Reset中断是上电后第一个被触发的,所以汇编会跳转到Rest_Handler这个函数当中,ST的库给他写好了系统初始化函数,系统初始化完了之后就可以跳转到我们的main函数当中去。

以上大概是整个启动流程,说的比较简陋,网上也有很多介绍。

相关推荐
独小乐2 天前
012.整体框架适配SDRAM|千篇笔记实现嵌入式全栈/裸机篇
c语言·汇编·笔记·单片机·嵌入式硬件·arm·gnu
C++ 老炮儿的技术栈2 天前
GCC编译时无法向/tmp 目录写入临时汇编文件,因为设备空间不足,解决
linux·运维·开发语言·汇编·c++·git·qt
cch89183 天前
Java vs 汇编:高级与低级的终极对决
java·开发语言·汇编
2301_789015623 天前
C++:智能指针
c语言·开发语言·汇编·c++·智能指针
独小乐4 天前
007.GNU C内联汇编杂谈|千篇笔记实现嵌入式全栈/裸机篇
linux·c语言·汇编·单片机·嵌入式硬件·arm·gnu
Lzh编程小栈7 天前
数据结构与算法之队列深度解析:循环队列+C 语言硬核实现 + 面试考点全梳理
c语言·开发语言·汇编·数据结构·后端·算法·面试
cch89188 天前
汇编与C语言:底层对话VS高效指挥
c语言·开发语言·汇编
jwn9998 天前
PHP vs 汇编:编程语言的两极对决
开发语言·汇编·php
cch89188 天前
汇编vs易语言:底层与中文编程终极对决
汇编
cch89189 天前
汇编VS高级语言:从硬件操控到高效开发
汇编