裸机开发(1)-汇编基础

文章目录

  • GNU汇编语法
  • 常用汇编指令
    • 处理器内部数据传输指令
    • 存储器访问指令
    • 压栈和出栈指令
    • 跳转指令
    • 算术指令
    • 逻辑运算指令
    • 实战

函数发生调用时,需要进行线程保护,简单来说,就是先进行压栈操作,将调用函数参数、返回值等存到R0-15寄存器中,在执行完毕后,需要将数据内容从寄存器读出,进行出栈操作,而这一系列操作需要SP指针。芯片上电后SP指针(堆栈指针寄存器)还未初始化完毕,无法执行C代码,所以必须要用汇编设置好C语言环境。

GNU汇编语法

label:instruction @ comment
# label:标号,表示地址位置
# instruction:指令,代表汇编指令或伪指令
# comment:注释

/*例子:
add:
	MOVS R0, #0X12 @设置 R0=0X12
/*

.global _start     @设置start函数为全局,供加载器找到该函数,之后再实现该函数即可

指令不可大小写混用

常用汇编指令

处理器内部数据传输指令

**1)MOV指令 **
将数据从一个寄存器拷贝到另外的寄存器,或者将立即数传递到寄存器中
MOV R0, R1 @寄存器R0 = R1
MOV R0, #0X12 @R0=0X12
2)MRS指令
读取特殊寄存器(CPSR、SPSR)中数据传递给通用寄存器
MRS R0, CPSP @R0=CPSR
3)MSR指令
写特殊寄存器
MSR CPSR, R0 @CPSR=R0

存储器访问指令

访问IMX6UL存储器,需要借助存储器访问指令,先写入到R0-R12寄存器,再写入到指定存储器(RAM)中的寄存器中。
1)LDR、STR指令
LDR Rd, [Rn,#offset] 从寄存器Rn+offset位置读数据到寄存器Rd中
STR Rd,[Rn,#offset] 将Rd中的数据写入到存储器的Rn+offset位置

LDR R0, =0X0209C004 @将寄存器地址 0X0209C004 加载到 R0 中,即 R0=0X0209C004
LDR R1, =0X20000002 @R1 保存要写入到寄存器的值,即 R1=0X20000002
STR R1, [R0] @将 R1 中的值写入到 R0 中所保存的地址中,即地址0X0209C004的值为0X20000002

LDR、STR 按32位数据操作
LDRB、STRB 按字节操作、
LDRH、STRH 按半字操作

压栈和出栈指令

在函数执行到一半时,如果需要执行另外一个函数,则需要保留当前处理器状态到寄存器,在执行完毕后,从寄存器中读取数据恢复现场,其中涉及到压栈和出栈。

PUSH 将寄存器列表入栈
POP 从栈中恢复寄存器
等价于
STMFD SP!
LDMFD SP!!

处理器堆栈向下增长,栈由高地址向低地址增长,起始地址为0x80000000,向0x70000000增长
PUSH {R0~R3,R12} @将 R0~R3 和 R12 压栈
image.png
PUSH {LR} @将LR进行压栈
image.png
POP {LR} @先恢复 LR
POP {R0~R3,R12} @在恢复 R0~R3,R12

跳转指令

1)B指令
B

2)BL指令
BL

算术指令

ADD 加法
ADC 带进位的加法
SUB 减法
SBC 带借位的减法
MUL 乘法
UDIV 无符号除法
SDIV 有符号除法
image.png

逻辑运算指令

AND 按位与
ORR 按位或
BIC 位清除
ORN 按位与非
EOR 按位异或
image.png

实战

github路径:linux_bsp/board_driver/1.ledc

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

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

相关文章

TensorFlow 模型中的回调函数与损失函数

回调函数 tf.keras 的回调函数实际上是一个类,一般是在 model.fit 时作为参数指定,用于控制在训练过程开始或者在训练过程结束,在每个 epoch 训练开始或者训练结束,在每个 batch 训练开始或者训练结束时执行一些操作,…

电子商务商品详情数据采集(一)

引导案例 张某经营的网店主推各类当季水果,包括烟台的苹果,海南的芒果,四川的蜜橘、新疆的哈密瓜等,今年他打贝丰富网店的产品品类,经比较,觉得临潼的石福品质不错,但该款产品是否受欢迎?经济效益如何?张某心中充满无数问号。他计划采集产品的相关数据…

空投 | Mint Blockchain 将于 2024 年 1 月 10 号启动 Mint Genesis NFT 空投活动

Mint Genesis NFT 是由 Mint Blockchain 发行的独特创世 NFT,旨在共同记录一条专注于 NFT 赛道的区块链网络的起源。过去几年曾积极参与 NFT 生态的用户将有机会获得创世 NFT 的空投资格。 空投规则详情: 1. NFT Marketplace 用户:Opensea、…

5g消息-5G时代短信升级-富媒体智能交互-互联网新入口

在5G时代,运营商和各大手机厂商都在积极推进5G消息的商用,基于短信入口的富媒体消息应用在近两年得到快速发展,并在企业端形成了广泛应用。 作为5G时代的数字原生应用,5G消息支持用户通过文字、图片、音频、视频、位置等富媒体方式…

Typora Mac激活

首先去官网选择mac版本下载安装 typora下载 然后打开typora包内容找到 /Applications/Typora.app/Contents/Resources/TypeMark/page-dist 找到/static/js/Licen..如下图 编辑器打开上面文件夹 输入 hasActivated"true"e.hasActivated 进行搜索 将它改为 hasA…

什么是流媒体

所谓的流媒体是指将一连串的媒体数据压缩后,经过网络分段发送数据,在网上即时传输音视频以供观赏的一种技术。如果没有流媒体技术,那么在观赏前必须下载整个媒体文件。 常见流媒体协议: RTSPRTPHTTPHLSRTMPHTTP-FLV等 目前应用…

静态HTTP的优势:速度、安全性和可扩展性,一个都不能少!

大家好,今天我们来聊聊静态HTTP的优势。有人可能会说:“静态HTTP,不就是那些不会动的网页吗?”错!静态HTTP可不仅仅是静止不动的,它可是让网站速度飞快、安全稳定、扩展性强的神器!不信&#xf…

智慧零售技术探秘:关键技术与开源资源,助力智能化零售革新

智慧零售是一种基于先进技术的零售业态,通过整合物联网、大数据分析、人工智能等技术,实现零售过程的智能化管理并提升消费者体验。 实现智慧零售的关键技术包括商品的自动识别与分类、商品的自动结算等等。 为了实现商品的自动识别与分类,…

JavaWeb后门(webshell)基础

0x00 基础 JSP JSP全称为JavaServer Pages&#xff0c;是一种用于开发支持动态内容的Web页面的技术。它有助于开发人员通过使用特殊的JSP标记在HTML页面中插入Java代码&#xff0c;其中大多数以<&#xff05;开头&#xff0c;以&#xff05;>结尾。Java是一种通用的计算…

浙江大唐乌沙山电厂选择ZStack Cloud打造新一代云基础设施

浙江大唐乌沙山电厂选择云轴科技ZStack Cloud云平台为其提供高性能、高可用的云主机、云存储和云网络&#xff0c;构建了简单、稳定、安全、高效的云基础设施&#xff1b;通过ZStackCloud为其提供可视化服务编排、多租户自服务等模块&#xff0c;帮助电厂提高IT资源利用率&…

新版IDEA中Git的使用(三)

说明&#xff1a;前面介绍了在新版IDEA中Git的基本操作、分支操作&#xff0c;本文介绍一下在新版IDEA中&#xff0c;如何回滚代码&#xff1b; 分以下三个阶段来介绍&#xff1a; 未Commit的文件&#xff1b; 已经Commit&#xff0c;但未push的文件&#xff1b; 已经push的…

国内前十大连锁酒店集团之一『东呈集团』商城项目启动,企企通赋能酒店管理集团采购数字化

近日&#xff0c;国内酒店管理集团的领军企业——广西东呈酒店管理集团股份有限公司&#xff08;以下简称“东呈集团”&#xff09;与企企通合作的采购供应链商城项目启动会成功举办。东呈集团与企企通双方高层、项目负责人、团队成员出席此次启动会。 01、国内领先的酒店管理集…

如何将本地websocket发布至公网并实现远程访问服务端

文章目录 1. Java 服务端demo环境2. 在pom文件引入第三包封装的netty框架maven坐标3. 创建服务端,以接口模式调用,方便外部调用4. 启动服务,出现以下信息表示启动成功,暴露端口默认99995. 创建隧道映射内网端口6. 查看状态->在线隧道,复制所创建隧道的公网地址加端口号7. 以…

IDEA的JavaWeb项目的webapp目录的小蓝点没亮怎么办???

我们可以看到没有小蓝点&#xff0c;正常的是有的。 没有小蓝点的原因&#xff1a;你的webapp 这个文件夹的路径不对。 解决方案&#xff1a;&#xff08;修改webapp的路径&#xff09; 我们可以看到&#xff0c;错误的路径是显示红色。 这个地方没有就添加一个路径&#xff0…

线性渐变知识点和例子

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>盒子阴影</title><style>.box{width:200px;height:200px;border:1px solid black;float:left;}#box1{/*默认从上到下渐变*/background-image:linear-gradient(c…

锐捷配置DHCP动态分配地址

一、实验拓扑 二、实验目的 配置DHCP为四个部门动态分配IP地址 三、实验配置 第一步&#xff1a;配置基本IP地址并对端口进行规划 SW1 SW1(config)#vlan range 10,20,30,40,100 SW1(config-vlan-range)#exit SW1(config)#interface vlan 10 SW1(config-if-VLAN 10)#ip addres…

如何使用内网穿透工具实现Java远程连接本地Elasticsearch搜索分析引擎

文章目录 前言1. Windows 安装 Cpolar2. 创建Elasticsearch公网连接地址3. 远程连接Elasticsearch4. 设置固定二级子域名 前言 简单几步,结合Cpolar 内网穿透工具实现Java 远程连接操作本地分布式搜索和数据分析引擎Elasticsearch。 Cpolar内网穿透提供了更高的安全性和隐私保…

[2023-年度总结]凡是过往,皆为序章

原创/朱季谦 2023年12月初&#xff0c;傍晚&#xff0c;在深圳的小南山看了一场落日。 那晚我们坐在山顶的草地上&#xff0c;拍下了这张照片——仿佛在秋天的枝头上&#xff0c;结出一颗红透的夕阳。 这一天很快就会随着夜幕的降临&#xff0c;化作记忆的碎片&#xff0c;然…

实战 9 权限菜单管理

目录 1、权限菜单后端接口 2、查询权限菜单列表 2.1 设计效果图 2.2 menuList.vue 3、 新增权限菜单 3.1 新增权限菜单窗口代码 3.2 选择所属菜单代码 3.3 封装图标选择器 3.4 新增、编辑和删除权限菜单 1、权限菜单后端接口 package com.cizhu.service;import com.ci…

使用 FFmpeg 清除文件夹下所有 .mp4 文件声音

运行以下命令来清除声音&#xff1a; ffmpeg -i input.mp4 -c copy -an output.mp4这个命令会将 “input.mp4” 替换为你要处理的 .mp4 文件名。它会生成一个新的文件名为 “output.mp4” 的文件&#xff0c;该文件是没有声音的副本。 如果你想要直接替换原始文件&#xff0c;…