arm代码

RISC精简指令集

长度和执行周期固定

长度为一条机器指令在计算机占用的内存大小

指令周期为CPU执行一条机器指令所发费的时间(时钟周期由CPU工作频率决定)

CISC复杂指令集

其架构一般用于PC端  X86和X64都是负载指令集CPU

更注重指令的功能性 指令周期和长度都不固定

arm的七种基本工作模式

user非特权模式  大部分任务执行在这种模式

FIQ当一个快速中断产生式将进入这种模式

IRQ当一个通用中断产生时会进入这种模式

Supervisor(svc)当复位或软中断指令执行时会进入这种模式

Abort 存取异常时会进入这种模式

Undef 当执行未定义指令时会进入这种模式

System 使用User相同的寄存器集的特权模式

Cortex-A 特有模式

Monitor 是为了安全而扩展出的用于执行安全监控代码的模式; 也是一种特权模式 

HYP 虚拟化模式,当一个硬件上运行两个OS内核时进入这个模式

R13寄存器  SP指针寄存器 栈中一般存放一些临时数据,也可以用于进行保护现场

R14寄存器 LR链接寄存器 当程序跳转后PC保存跳转后的指令的地址

R15寄存器 PC 程序计数器 始终保存马上就要执行的指令的地址,每次指令执行完毕后PC寄存器的值会自动向下+4  可以手动修改PC寄存器的数值

一条指令的执行过程

1.取址:cpu将PC寄存器的数值通过地址总线传输给存储器,存储器将PC存储的地址位置的指令传输到CPU内存,存放在IR寄存器中

2.译码:IR寄存器的指令交给译码器,对指令进行译码

3.执行:控制器把译码之后的指令交给运算器,运算器再进行对于的运算操作

.text @当前汇编里注释用‘@’ .test声明下面的内容属于文本段内容

.global _start @.global声明_start为一个全局标签

_start:@汇编里的标签,类似于c语言里的函数

mov r1,#1 @汇编命令 将1保存到r1寄存器

stop:     b stop @跳转到stop标签

map.lds是一个链接脚本文件       程序最终链接时,链接器读取链接脚本的内容,按照链接脚本指定的规则将指定的代码存放在内存的不同位置

伪操作  .text .global .end .if .else .endif .data  可以实现和指令类似的功能 占4字节 

数据搬移指令 =     数据移位指令 << >>      数据算数运算指令

+ - * / 位运算指令 & | ~ ^ 数据比较指令

2.跳转指令 3.内存读写指令 4.状态寄存器读写指令 5.软中断指令

<opcode>{<cond>}{s} <Rd>, <shifter_operand>   

<opcode>:指令码    {<cond>}:条件码 {s}:状态位,如果在指令后面加上s,运算结果会影响CPSR条件位 <Rd>:目标寄存器 <shifter_operand>:第一操作数,可寄存器,也可以是立即数

mov:将第一操作数的值保存在目标寄存器

mvn:将第一操作数的值按位取反,将结果保存在目标寄存器

LDR 目标寄存器,=数值     将指定的数据放在目标寄存器中

移位指令  格式:<opcode>{<cond>}{s} <Rd>, <Rn>, <shifter_operand>

将第一操作寄存器的数值移位第二操作数指定的位数,将结果保存在目标寄存器中

LSL:左移运算 低位补0 LSR:右移运算 高位补0 ROR:循环右移:低位移出的值补到高位

位运算指令  格式:<opcode>{<cond>}{s} <Rd>, <Rn>, <shifter_operand>

将第一操作寄存器和第二操作数进行位运算,将结果保存在目标寄存器中

and:与 与0清0 与1不变 orr:或 或1置1 或0不变 eor:异或 相同为0 不同为1

bic:按位清零指令,想将哪一位设置为0,只需要用bic指令给这一位运算一个1即可

算术运算指令 格式:<opcode>{<cond>}{s} <Rd>, <Rn>, <shifter_operand>

将第一操作寄存器的值和第二操作数进行算数运算,结果保存在目标寄存器中

add:加法运算 adc:进行加法运算时需要考虑CPSR的条件位

sub:减法运算 sbc:进行减法运算时需要考虑CPSR的条件位 mul:乘法运算

比较指令 cmp 第一操作数,第二操作寄存器   用于比价数据

就是比较的两个数进行减法运算,并且减法运算的结果会影响到CPSR寄存器的条件位

跳转指令  <opcode>{<cond>} 标签 跳转到指定的标签下

指令码: b:跳转时不影响LR寄存器的值

指令码以及功能 

 向内存中写: str:向内存中写一个字(4字节)的数据 strh:写半个字(2字节)strb:一个字节

从内存读: ldr:从内存读取一个字的数据 ldrh:读取半个字的数据 ldrb:读取一个字节的数据

指令码{条件码} 目标寄存器 [目标地址]

str 目标寄存器 ,[目标地址]:将目标寄存器的数据写入到以目标地址为起始的内存中

ldr 目标寄存器 ,[目标地址]:从以目标地址为起始的内存中读一个字的数据到目标寄存器

向内存写: stm 目标地址,{寄存器列表} 将寄存器列表中每一个寄存器的值都写道目标地址指向的连续空间之中

从内存读 ldm 目标地址,{寄存器列表} 将目标地址指向的连续内存中的数据读到寄存器列表中的寄存器中

ia后缀 先写入然后地址向地址大的方向增长  ib先向地址大的方向增长然后写入数据

da后缀先向指向的内存中存数据,然后寄存器保存的地址往地址小的方向增长

DB后缀先将保存的地址往地址小的方向增长,再往保存的地址内存中存入数据

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

斯坦福数据挖掘教程·第三版》读书笔记(英文版)Chapter 10 Mining Social-Network Graphs

来源&#xff1a;《斯坦福数据挖掘教程第三版》对应的公开英文书和PPT。 Chapter 10 Mining Social-Network Graphs The essential characteristics of a social network are: There is a collection of entities that participate in the network. Typically, these entiti…

Scala第十七章节

Scala第十七章节 scala总目录 文档资料下载 章节目标 了解集合的相关概念掌握Traversable集合的用法掌握随机学生序列案例 1. 集合 1.1 概述 但凡了解过编程的人都知道程序 算法 数据结构这句话, 它是由著名的瑞士计算机科学家尼古拉斯沃斯提出来的, 而他也是1984年图灵…

Linux环境搭建SVN服务器并实现公网访问 - cpolar端口映射

文章目录 前言1. Ubuntu安装SVN服务2. 修改配置文件2.1 修改svnserve.conf文件2.2 修改passwd文件2.3 修改authz文件 3. 启动svn服务4. 内网穿透4.1 安装cpolar内网穿透4.2 创建隧道映射本地端口 5. 测试公网访问6. 配置固定公网TCP端口地址6.1 保留一个固定的公网TCP端口地址6…

@ConfigurationProperties配置绑定~

ConfigurationProperties注解是Spring Boot中的一个注解&#xff0c;用于将配置文件中的属性值绑定到Java类中的字段上。 ConfigurationProperties注解的作用包括&#xff1a; 实现配置文件属性和Java类字段的映射&#xff0c;简化了读取配置文件的操作。 可以指定配置文件中…

Elasticsearch:什么时候应该考虑在 Elasticsearch 中添加协调节点?

仅协调节点&#xff08;coordinating only nodes&#xff09;充当智能负载均衡器。 仅协调节点的这种特殊角色通过减轻数据和主节点的协调责任&#xff0c;为广泛的集群提供了优势。 加入集群后&#xff0c;这些节点与任何其他节点类似&#xff0c;都会获取完整的集群状态&…

全志ARM926 Melis2.0系统的开发指引⑤

全志ARM926 Melis2.0系统的开发指引⑤ 编写目的8. 固件修改工具(ImageModify)使用8.1.界面说明8.2.操作步骤8.2.1. 配置平台8.2.2. 选择固件8.2.3. 选择要替换的文件8.2.4. 替换文件8.2.5. 保存固件 8.3.注意事项8.4.增加固件修改权限设置8.4.1. 概述8.4.2. 操作说明8.4.2.1.打…

【C语言经典100例题-70】求一个字符串的长度(指针)

代码 使用指针来遍历字符串&#xff0c;直到遇到字符串结尾的空字符\0为止&#xff0c;统计字符数量即为字符串长度。 #include<stdio.h> #define n 20 int getlength(char *a) {int len 0;while(*a!\0){len;a;}return len; } int main() {char *arr[n] { 0 };int l…

Stable diffusion的架构解读(本博客还是以unet架构为主)

博客只是简单的记录一下自己学的&#xff0c;基于自己的一些情况&#xff0c;所以简单了一些只是将来忘记&#xff0c;用来回顾用。 论文的大体框架 unet结构位于 unet会接受prompt特征、latent特征、和t时间步特征&#xff0c;最后生成新一轮的特征 可以参考知乎大佬htt…

计算机竞赛 深度学习实现行人重识别 - python opencv yolo Reid

文章目录 0 前言1 课题背景2 效果展示3 行人检测4 行人重识别5 其他工具6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习的行人重识别算法研究与实现 ** 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c…

全志ARM926 Melis2.0系统的开发指引⑦

全志ARM926 Melis2.0系统的开发指引⑦ 编写目的11. 调屏11.1. 调屏步骤简介11.1.1. 判断屏接口。11.1.2. 确定硬件连接。11.1.3. 配置显示部分 sys_config.fex11.1.3.1. 配置屏相关 IO 11.1.4. Lcd_panel_cfg.c 初始化文件中配置屏参数11.1.4.1. LCD_cfg_panel_info11.1.4.2. L…

虚拟机联网

桥接 桥接模式就是虚拟机与你的电脑平起平做&#xff0c;都有同样的IP&#xff0c;且与你的电脑在同一网段下&#xff0c;就能够上网。 电脑的IP的地址 虚拟机的ip地址 设置vm1的ip地址与网关与电脑相同 如果出现ssh连接虚拟机不成功的问题&#xff0c;无其他问题时&#xff0…

Next.js 入门笔记

前言 之前初步体验了 React 的魅力, 又看文档理解了一下 useState 和 useEffect, 目前初步理解的概念是: useState 用来声明在组件中使用并且需要修改的变量 useEffect 用来对 useState 声明的变量进行初始化赋值 可能理解的不太准确, 不过大概差不多是这么个意思. 但是再往后…

React项目部署 - Nginx配置

写在前面&#xff1a;博主是一只经过实战开发历练后投身培训事业的“小山猪”&#xff0c;昵称取自动画片《狮子王》中的“彭彭”&#xff0c;总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域&#xff0c;如今终有小成…

012-第二代硬件选型

第二代硬件选型 文章目录 第二代硬件选型项目介绍重新换平台缘由X86 && Arm 架构切换 ARM Linux 硬件选型系统确定Qt 版本确定总结一下 关键字&#xff1a; Qt、 Qml、 Arm、 X86、 linux 项目介绍 欢迎来到我们的 QML & C 项目&#xff01;这个项目结合了 QM…

国庆day2---select实现服务器并发

select.c&#xff1a; #include <myhead.h>#define ERR_MSG(msg) do{\fprintf(stderr,"__%d__:",__LINE__);\perror(msg);\ }while(0)#define IP "192.168.1.3" #define PORT 8888int main(int argc, const char *argv[]) {//创建报式套接字socketi…

华为云云耀云服务器L实例评测|部署个人音乐流媒体服务器 navidrome

华为云云耀云服务器L实例评测&#xff5c;部署个人音乐流媒体服务器 navidrome 一、云耀云服务器L实例介绍1.1 云服务器介绍1.2 产品规格1.3 产品优势1.4 支持镜像 二、云耀云服务器L实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置 三、部署 navidrome3.1 navidrome 介绍3.…

区别对比表:阿里云轻量服务器和云服务器ECS对照表

阿里云轻量应用服务器和云服务器ECS区别对照表&#xff0c;一看就懂的适用人群、使用场景、优缺点、使用限制、计费方式、网路和镜像系统全方位对比&#xff0c;阿里云服务器网分享ECS和轻量应用服务器区别对照表&#xff1a; 目录 轻量应用服务器和云服务器ECS区别对照表 轻…

字符串函数的模拟实现

引言&#xff1a;对于字符串来说&#xff0c;我们通常想要对其完成各种各样的目的&#xff0c;不管是排序还是查找都是最普遍的功能&#xff0c;而我们的C语言中也包含着一系列函数是为了实现对字符串的一些功能&#xff0c;今天我们就来介绍他们。 strlen函数&#xff1a; 求字…

网课搜题 小猿题库多接口微信小程序源码 自带流量主

多接口小猿题库等综合网课搜题微信小程序源码带流量主&#xff0c;网课搜题小程序, 可以开通流量主赚钱 搭建教程1, 微信公众平台注册自己的小程序2, 下载微信开发者工具和小程序的源码3, 上传代码到自己的小程序 源码下载&#xff1a;https://download.csdn.net/download/m0_…

计算机网络笔记3 数据链路层

计算机网络系列笔记目录&#x1f447; 计算机网络笔记6 应用层计算机网络笔记5 运输层计算机网络笔记4 网络层计算机网络笔记3 数据链路层计算机网络笔记2 物理层计算机网络笔记1 概述 文章前言 &#x1f497; 站在巨人的肩膀上&#xff0c;让知识的获得更加容易&#xff01…