单片机(学习)2024.10.9
目录
汇编整体分类
1.指令
2.伪操作
3.伪指令
汇编代码
汇编初始化
数据搬运指令
算术运算指令
加法
减法
乘法
比较指令
跳转指令
逻辑运算指令
与或,异或
左移右移
内存操作 LOAD/STORE 指令
写
读
CPU的栈机制
栈的概念
栈的种类
1.空栈(Empty)
2.满栈(Full)
栈的基本操作
PUSH/POP
栈的应用
叶子函数
非叶子函数
汇编整体分类
1.指令
编译完生成一条机器码存储在内存单元当中,CPU执行时能完成对应的操作(类似于C中的语句)
2.伪操作
伪操作(相当于c中的#的内容,告诉编译器怎么编译),不会生成机器码也不会占用内存,其作用是告诉编译器怎样编译(类似于C中的预处理指令)
3.伪指令
伪指令不是指令,编译器在编译时将其替换成等效的指令 (如:cpu中没有乘法器,对应没有乘法指令,3*3 ---》用加法器实现3+3+3,替换实现)
汇编代码
汇编初始化
AREA STACK, NOINIT, READWRITE
__initial_spAREA RESET, DATA, READONLY
__Vectors DCD __initial_spDCD main AREA |.text|, CODE, READONLYENTRY
mainloopB loop END
1.AREA STACK, NOINIT, READWRITE: 这一行指定了一个名为STACK的内存区域,它用于存储堆栈。NOINIT表示这个内存区域在程序启动时不需要初始化,READWRITE表示这个内存区域可以被读取和写入。
2.__initial_sp: 这一行定义了一个名为`__initial_sp`的符号,它表示堆栈指针的初始值。在这里,它被定义为堆栈的起始地址。通常,这个符号会在链接脚本中进一步定义为实际的堆栈内存区域的起始地址。
3.AREA RESET, DATA, READONLY: 这一行指定了一个名为RESET的内存区域,用于存储重置向量表。DATA表示这个区域包含数据,READONLY表示这个区域只能被读取。
4.__Vectors DCD __initial_sp: 这一行定义了一个重置向量表,用于指示程序启动时应该执行的操作。`DCD`表示存储一个双字(32位)的数据。在这里,第一个双字存储的是堆栈指针的初始值,即__initial_sp。
5.DCD main: 这一行将程序的入口地址(main函数)添加到重置向量表中。这意味着程序在启动时将跳转到main函数开始执行。
6.AREA |.text|, CODE, READONLY: 这一行指定了一个名为.text的内存区域,用于存储代码。CODE表示这个区域包含代码,READONLY表示这个区域只能被读取。
7.ENTRY main: 这一行指定了程序的入口点为main函数。这意味着程序将从`main`函数开始执行。
8.loop B loop: 这一行是一个无限循环,它会不断地跳转到`loop`标签所在的位置,导致程序永远循环执行这条指令。
9.END: 这一行表示程序的结束。
数据搬运指令

改变PC的值实现程序跳转
AREA STACK, NOINIT, READWRITE
__initial_sp AREA RESET, DATA, READONLY
__Vectors DCD __initial_sp DCD main AREA |.text|, CODE, READONLY ENTRY
main
MOVS R0,#2
MOVS R1,R0
;改变PC的值实现程序跳转,0x08000008
;先把地址给一个寄存器,再把这个寄存器的值赋给PC
LDR R2,=0x08000008
MOV PC,R2
loop B loop
END
算术运算指令
加法

AREA STACK, NOINIT, READWRITE
__initial_sp AREA RESET, DATA, READONLY
__Vectors DCD __initial_sp DCD main AREA |.text|, CODE, READONLY ENTRY
main
MOVS R0,#2
MOVS R1,R0
ADDS R3,R0,R1 ;R3=0X04
LDR R8,=0X01
ADD R8,R8,R3 ;R8=R8+R3 =0X05
loop B loop
END
减法

AREA STACK, NOINIT, READWRITE
__initial_sp AREA RESET, DATA, READONLY
__Vectors DCD __initial_sp DCD main AREA |.text|, CODE, READONLY ENTRY
main
MOVS R0,#2
MOVS R2,#2
MOVS R1,R0
SUBS R2,R0,R1 ;R2=R0-R1
loop B loop
END
乘法
![]()
AREA STACK, NOINIT, READWRITE
__initial_sp AREA RESET, DATA, READONLY
__Vectors DCD __initial_sp DCD main AREA |.text|, CODE, READONLY ENTRY
main
MOVS R0,#2
MOVS R2,#2
MOVS R1,R0
MULS R2,R0,R2 ;R2=R0*R2
loop B loop
END
比较指令


跳转指令

AREA STACK, NOINIT, READWRITE
__initial_sp AREA RESET, DATA, READONLY
__Vectors DCD __initial_sp DCD main AREA |.text|, CODE, READONLY ENTRY
JUMP
MOVS R0,#1
MOVS R2,#1
LDR R3,=0X0800001A
MOV PC,R3main
MOVS R0,#2
MOVS R2,#2
MOVS R1,R0
CMP R0,R2 ;if(a==b)
BEQ JUMP
MOVS R0,#3
loop B loop
END
AREA STACK, NOINIT, READWRITE
__initial_sp AREA RESET, DATA, READONLY
__Vectors DCD __initial_sp DCD main AREA |.text|, CODE, READONLY ENTRY
JUMP
MOVS R0,#1
MOVS R2,#1
MOV PC,LRmain
MOVS R0,#2
MOVS R2,#2
MOVS R1,R0
BL JUMP
MOVS R0,#3
loop B loop
END
逻辑运算指令
与或,异或

AREA STACK, NOINIT, READWRITE
__initial_sp AREA RESET, DATA, READONLY
__Vectors DCD __initial_sp DCD main AREA |.text|, CODE, READONLY ENTRYmain
MOVS R0,#2 ;R0:0010
MOVS R1,#1 ;R1:0001
ANDS R1,R1,R0 ;R1=R1&R0 R1=0000
EORS R1,R1,R0 ; 0010 0000 0010
loop B loop END
左移右移

AREA STACK, NOINIT, READWRITE
__initial_sp AREA RESET, DATA, READONLY
__Vectors DCD __initial_sp DCD main AREA |.text|, CODE, READONLY ENTRYmain
MOVS R0,#2 ;R0:0010 左移1位 0100--4
MOVS R1,#1 ;R1:1
LSLS R0,R0,R1
loop B loop END
内存操作 LOAD/STORE 指令
写

读

CPU的栈机制
栈的概念
栈是一种具有特殊的访问方式的存储空间,特殊性就在于后进先出
栈的种类
1.空栈(Empty)
栈指针指向的地址是空的,在栈中存储数据时,可以直接存储,存储完成之后需要将栈指针再次指向空的位置。
EA:Empty Ascending 空增栈
ED:Empty Descending 空减栈
2.满栈(Full)
栈指针指向的地址有数据,在栈中存储数据时,需要先将栈指针,指向一个空的位置,然后在存储数据。
增栈(Ascending)
栈指针向高地址方向移动
减栈(Descending)
栈指针向低地址方向移动
FA:Full Ascending 满增
FD:Full Descending 满减
ARM默认采用的是满减栈
栈指针指向有数据的顶,接收数据时,栈指针先移动,再放数据。指针的移动是地址的降低
栈的基本操作
栈有两种基本的操作:入栈和出栈
1.入栈:将一个新的元素放到栈顶
2.出栈:从栈顶取出一个元素
栈顶元素总是最后一个入栈的,需要出的时候,又会是第一个被取出的
操作规则:LIFO后进先出
PUSH/POP

PUSH 入栈,压栈
POP 出栈,弹栈
//主程序给R1,R2,R3,R4分别存入:0x11111111 0x22222222 0x33333333 0x44444444然后跳入函数JUMP
//2.写一个函数JUMP,函数内修改R1为0x20000001 R3为0x00000000
//3.修改结束后返回主函数
//4.主函数再使R1和R3相加后存入R1跳出主程序进入死循环
//子程序返回主程序时,不可以使用MOV指令和B BL BX BXLAREA STACK, NOINIT, READWRITE
__initial_sp AREA RESET, DATA, READONLY
__Vectors DCD __initial_sp DCD main AREA |.text|, CODE, READONLY ENTRY
main ADD SP,SP,#0X100;上调栈指针LDR R1,=0X11111111;LDR R2,=0X22222222;LDR R3,=0X33333333;LDR R4,=0X44444444;BL JUMPADD R1,R1,R3B loop
JUMPPUSH {R0-R4,LR} ;保护现场LDR R1,=0X44324302;LDR R3,=0X33222055;POP{R0-R4,PC} ;恢复现场
loop B loop
END
栈的应用
叶子函数
叶子函数是指一个函数内部没有调用其他函数的函数,也就是说,它是程序调用树的末端节点,不依赖于其他函数。
非叶子函数
非叶子函数是指一个函数内部调用了其他函数的函数,也就是说,它不是程序调用树的末端节点,可以被其他函数调用。
相关文章:
单片机(学习)2024.10.9
目录 汇编整体分类 1.指令 2.伪操作 3.伪指令 汇编代码 汇编初始化 数据搬运指令 算术运算指令 加法 减法 乘法 比较指令 跳转指令 逻辑运算指令 与或,异或 左移右移 内存操作 LOAD/STORE 指令 写 读 CPU的栈机制 栈的概念 栈的种类 1.空栈(…...
操作符详解(C 语言)
目录 一、操作符的分类二、算数操作符1. 除法操作符2. 取余操作符 三、位移操作符1. 进制2. 原码、反码和补码3. 左移操作符(<<)和右移操作符(>>) 四、位操作符1. 按位与 &2. 按位或 |3. 按位异或 ^4. 按位取反 ~…...
自动化测试数据:如何正确地选择不同格式文件「详细介绍」?
自动化测试数据:如何正确地选择不同格式文件「详细介绍」? 前言1. 不同的格式文件对比2. 读取文件2.1 读取Excel文件2.2 读取CSV文件2.3 读取YAML文件2.3.1 字典2.3.2 列表2.3.3 混合类型2.3.4 包含列表的字典2.3.5 包含字典的列表2.3.6 复杂嵌套 2.4 读…...
OceanBase中扩容OCP节点step by step
许多用户在开始使用OceanBase时部署OCP,通常选择单节点部署。但随着后续业务规模的不断扩大,会开始担忧单节点OCP在面对故障时可能丧失对集群运维管控的连续性。鉴于此,会将现有的单节点OCP扩展至多节点部署,以此来确保OCP服务的高…...
国家人工智能创新应用先导区数据及城市人工智能先导区准自然实验数据(2006-2023年)
一、测算方式:参考C刊《当代财经》冯婉昕(2024)老师的做法,本文的核心解释变量为国家人工智能创新应用先导区政策 (AI)。企业的金融资产配置是企业生产经营的内生变量,因此,如果选择…...
搜维尔科技:感受、握持、推动、连接和挤压虚拟物体,SenseGlove触觉反馈手套拥有先进的触觉技术、一流的可用性和功能
感受、握持、推动、连接和挤压虚拟物体,SenseGlove触觉反馈手套拥有先进的触觉技术、一流的可用性和功能 感受、握持、推动、连接和挤压虚拟物体,SenseGlove触觉反馈手套拥有先进的触觉技术、一流的可用性和功能...
C++中的引用详解
C中的引用详解 什么是引用 引用是一种取别名的机制,用于为变量提供一个新的名字。在C中,引用的语法使用&符号。引用允许我们以一种更安全和直观的方式来操作变量。 为什么要使用指针 在C中,虽然引用提供了一些优势,但指针仍…...
软考中级 - 软件设计师学习笔记 - 1.3 计算机安全
1.3.1 安全威胁 计算安全:指的是计算机资产安全,是要保证这些计算机资产不受自然和人为的有害因素的威胁和危害。 1.3.2 加密技术和认证技术 加密技术:对称加密(私有密钥加密)、非对称加密(公开密钥加密)。对称加密(私钥/私有密…...
Unity3D相关知识点总结
Unity3D使用的是笛卡尔三维坐标系,并且是以左手坐标系进行展示的。 1.全局坐标系(global) 全局坐标系描述的是游戏对象在整个世界(场景)中的相对于坐标原点(0,0,0)的位置…...
牛顿迭代多维+原理推导
这是两个函数了两个变量的情况,对于三个函数两个变量,牛顿迭代的雅可比矩阵不能求逆, 右边的增量的求解就不能用这个公式了呢。对于有逆矩阵但不能求逆的公式,这个逆矩阵是求解线性方程时出现的,就可用不求逆的方法解…...
[自然语言处理]RNN
1 传统RNN模型与LSTM import torch import torch.nn as nntorch.manual_seed(6)# todo:基础RNN模型 def dem01():参数1:input_size 每个词的词向量维度(输入层神经元的个数)参数2:hidden_size 隐藏层神经元的个数参数3:…...
MySQL(B站CodeWithMosh)——2024.10.11(14)
ZZZZZZ目的ZZZZZZ代码ZZZZZZ重点ZZZZZZ操作(非代码,需要自己手动) 8- CASE运算符The CASE Operator_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1UE41147KC?p62&vd_sourceeaeec77dfceb13d96cce76cc299fdd08 在sql_store中&am…...
Transformer的预训练模型
Transformer的预训练模型有很多,其中一些在自然语言处理(NLP)和计算机视觉等领域取得了巨大成功。以下是一些主要的Transformer预训练模型: 1. BERT (Bidirectional Encoder Representations from Transformers) 简介: BERT 是谷歌推出的双向Transformer模型,专注于编码器…...
手撕单例模式
在Go语言中实现单例模式,通常需要确保一个类只有一个实例,并且提供一个全局访问点。Go语言本身没有类的概念,但可以通过结构体和函数来模拟这种行为。下面是一个简单的手撕单例模式的实现示例: 懒汉式(延迟初始化&…...
UE4 材质学习笔记06(布料着色器/体积冰着色器)
一.布料着色器 要编写一个着色器首先是看一些参考图片,我们需要找出一些布料特有的特征,下面是一个棉织物,可以看到布料边缘的纤维可以捕捉光线使得边缘看起来更亮 下面是缎子和丝绸的图片,与棉织物有几乎相反的效果,…...
人工智能学习框架
人工智能学习框架是指用于开发和训练机器学习和深度学习模型的软件库和工具集。这些框架帮助开发者更高效地构建、训练和部署模型,加速人工智能应用的开发进程。 常见的人工智能学习框架 TensorFlow 由Google开发,是一个开源的深度学习框架,…...
GEE 教程:Landsat TOA数据计算地表温度(LST)
目录 简介 函数 expression(expression, map) Arguments: Returns: Image reduceRegion(reducer, geometry, scale, crs, crsTransform, bestEffort, maxPixels, tileScale) Arguments: Returns: Dictionary 代码 结果 简介 地表温度(Land Surface Temperature,LS…...
Web编程---配置Tomcat
文章目录 一、目的二、原理三、过程1. 解压“apache-tomcat-10.0.27-windows-x64.zip”文件到指定文件夹。2. 配置环境变量3.修改编码方式,防止 Tomcat 控制台出现乱码。4.启动 Tmocat5.打开浏览器,地址栏输入 http://localhost:8080 ,如果看…...
物联网5G模块WIFI模块调式记录(Pico)
调试环境 MCU:Pico1(无wifi版)5G模块:EC800K(iot专用4g卡)WIFI模块:ESP01s(Esp8266芯片)、DX-WF24开发环境:MacBook Pro Sonoma 14.5开发工具:Th…...
中国平安蝉联2024“金融业先锋30”第一名 获金融业ESG最高五星评级
2024年10月15日,中央广播电视总台正式对外发布《金融业ESG行动报告(2024)》(以下简称"《报告》"),并公布了"中国ESG上市公司金融业先锋30"榜单。中国平安凭借在绿色金融、普惠金融、养…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...
C/C++ 中附加包含目录、附加库目录与附加依赖项详解
在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...
