ARM微架构

news2024/9/30 23:27:30

目录

1.流水线

2.指令流水线 

3. 多核处理器​编辑

4. 工程搭建

4.1为Keil软件配置编译工具链

5.程序编写 

5.1 数据处理指令

5.2 带标志位的加法ADC ADDS

5.3 跳转指令B\BL

5.4 单寄存器内存访问

5.5 批量寄存器内存访问

5.6 满减操作 


1.流水线

2.指令流水线 

3. 多核处理器

4. 工程搭建

4.1为Keil软件配置编译工具链

4.1.1创建新工程

4.1.2设置工程保存的路径和工程的文件名字,在这里我将工程保存到 ARM-ASM 文件夹下,将工程命名为 arm-asm。 

4.1.3 设置我们工程支持哪款 CPU,这里我们选择 Samsung 的 S3C2440A 芯片

 4.1.4 单击“OK”之后,弹出提示框是否导入启动文件,选择“否”:

4.1.5建好工程后,软件界面如下图所示: 

4.1.6 添加.s汇编文件到工程中

 

 

4.1.7 在.s汇编文件中写汇编代码

 

5.程序编写 

1指令:编译完生成一条机器码存储在内存单元当中,CPU执行时能完成对应的操作
   1) 数据处理指令: 对数据进行逻辑、算数运算
   2) 跳转指令: 实现程序的跳转,实质是修改PC
   3) Load/Store指令:对内存的读写操作
   4)状态寄存器传送指令:对CPSR进行读写操作
   5)异常中断产生指令:触发软中断,常用于内核的系统调用
   6)协处理器指令;操作协处理器的指令

2.伪操作:不会生成机器码也不会占用内存,其作用是告诉编译器怎样编译(类似C中的宏定义)
3.伪指令:不是指令,编译器在编译时将其替换成等效的指令

5.1 数据处理指令

AREA RESET,CODE,READONLY;定义一个代码段RESET,属性为只读
ENTRY ;程序的入口
; 1)数据处理指令
;  搬移指令 MOV  作用:赋值=
     MOV R0,#2
     MOV R1,#3
     MOV R2,#1    
     MOV R3,#3
     MOV R4,#4
     MOV PC,#0 ;PC取址0 循环

;数据取反指令 MVN
     MVN R4,#0X000000FF ;R4=~0X000000FF=0XFF000000
     MOV R5,#255

;    立即数:合法的数,包含在指令中的数
;    与普通变量的区别:立即数是存储在寄存器中,执行速度快
;    缺点:长度有限 这里规定最大为12bit,2^12=4096个数(连续数:0-255)其余为离散数
     LDR R5,=0X12345678 
;  加法指令 ADD
    ADD R2,R0,R1  ;R2=R0+R1
;  减法指令 SUB
     SUB R2,R1,R0  ;R2=R1-R0
;  乘法指令 MUL
     MUL R2,R0,R1   ;R2=R0*R1
 END

 ;    nzcv验证
;   SUBS R2,R0,R1   ;验证N 加S并使用减法指令产生负数,验证N位,发现被置位 n=1负数 
;   SUBS R1,R0,R2   ;验证Z 加S并使用减法指令产生0,验证z位,发现z和c都被置1,
                                  ;因为减法时产生借位c会被置0,没有借位被置1
;     MOV R1,#0XFFFFFFFE
;     MOV R2,#2
;     ADDS R3,R1,R2  ;验证C,加法指令产生了进位(注意这里是32位),C位被置1

5.2 带标志位的加法ADC ADDS

;    第一个数;0X00000001 0XFFFFFFFF
;    第二个数;0X00000003 0X00000004
;    第一个数的低32位放到R1,高32bit放R2
;    第二个数的低32位放R3,高32bit放R4
;    低加低 高加高 运算结构的低32bit放R5,高32bit放R6
     MOV R1,#0XFFFFFFFF
     MOV R2,#0x00000001
     MOV R3,#0X00000004
     MOV R4,#0X00000003
     ADDS R5,R1,R3
     ADC R6,R4,R2  ;本质R6=R4+R2+‘c’

5.3 跳转指令B\BL

    MOV R0,#2
    CMP R0,#1
    ;B JUMP        ;B 只是跳转
    ;BL JUMP      ;BL 跳转后PC=LR 可跳转回去
    ;BEQ JUMP   ;CMP相等时跳转==if((EQ)(B JUMP)) 本质:if(R0-#1==0){B JUMP}
    ;BNE JUMP   ;CMP不相等时跳转
    MOV R0,#2
    MOV R0,#3
JUMP
    MOV R0,#4
    MOV R1,#5
    MOV PC,LR  

5.4 单寄存器内存访问

 

单寄存器内存访问的索引方式(寻址方式)
    MOV R0,#0XFFFFFFFF
    MOV R1,#0X40000000
    STR R0,[R1] ;将R0的数据写到R1地址内
    LDR R2,[R1] ;读取R1地址里的内容到R2中
前索引 先偏移8位后存储数据
    STR R0,[R1,#8]
后索引 先存储数据后偏移地址
    STR R0,[R1],#4
自动索引 (前后索引)偏移地址并存储数据
    STR R0,[R1,#4]!

 

 

5.5 批量寄存器内存访问

    MOV R0,#1
    MOV R1,#2
    MOV R2,#3
    MOV R3,#4
    MOV R4,#5
    MOV R5,#0X40000020
    STM R5,{R0-R4}
    STM R5,{R4,R2,R3,R1,R0}

   STMIA R5!,{R0-R4}     ; 空增
   STMIB R5!,{R0-R4}     ; 满赠
   STMDA R5!,{R0-R4}   ; 空减
   STMDB R5!,{R0-R4}   ; 满减

5.6 满减操作 

   MOV SP,#0X40000020 ;初始化栈地址
MAIN
    MOV R1,#1
    MOV R2,#2
    BL FUNC
    ADD R3,R1,R2
TOP
    B TOP
FUNC
    STMFD SP!,{R1,R2}
    MOV R1,#10
    MOV R2,#5
    SUB R3,R1,R2
    LDMFD SP!,{R1,R2}
    MOV PC,LR

 

 

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

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

相关文章

Ansible从入门到精通【三】

大家好,我是早九晚十二,目前是做运维相关的工作。写博客是为了积累,希望大家一起进步! 我的主页:早九晚十二 专栏名称:Ansible从入门到精通 立志成为ansible大佬 ♣ansible的高级指令 ansible-playbook写一…

Java 集合中 ArrayList 的扩容机制原理(面试+读源码)

在 Java 中,ArrayList 内部是通过一个数组来存储元素的,是一个数组结构的存储容器。当向一个 ArrayList 中添加元素时,如果当前数组已经满了,就需要扩容。 集合的继承关系图 一、面试回答 ( ArrayList 的扩容机制原理 ) 面试…

Vue 脚手架(打包工具)的理解 - 配置文件理解

序言 Vue 脚手架是 Vue 作为一个前端开发项目的最核心点,将JavaScript、CSS、HTML这几种前端自动整合,极大的简化了前端开发工作。 没有 Vue 脚手架,就没有 Vue ,这是一定的,Java 语言和C语言都需要编译,…

【论文阅读】Analyzing group-level emotion with global alignment kernel based approach

【论文阅读】Analyzing group-level emotion with global alignment kernel based approach 摘要1.介绍与相关工作2.方法3.实验 摘要 本篇博客参考IEEE于2022年收录的论文Analyzing group-level emotion with global alignment kernel based approach,对其主要内容…

new一个ObjectInputStream为什么会出现java.io.EOFException

一、举例代码 package com.softeem.wolf.homework06;import java.io.*;/*** Created by 苍狼* Time on 2023-05-24*/ public class App {public static void main(String[] args) throws IOException {ObjectInputStream ois null;ObjectOutputStream oos null;ois new Obj…

功率信号源的特点和用途是什么

功率信号源是一种电子测量仪器,它集信号发生器与功率放大器为一体,具有高电压、大功率的特点。在电子实验室中,功率信号源可以帮助用户驱动压电陶瓷、换能器以及电磁线圈等,有效地解决了驱动负载和放大功率的问题。下面我们来具体…

Linux:LAMP的架构与环境配置

这里写目录标题 一、LAMP1.1 LAMP是什么1.2 安装顺序 二、编译安装Apache httpd服务2.1 关闭防火墙,将安装Apache所需软件包传到/opt目录下2.2 安装环境依赖包2.3 配置软件模块2.4 编译及安装2.5 优化配置文件路径2.6 添加httpd系统服务2.7 修改httpd 服务配置文件2…

MySql基础学习(2)

MySql基础学习 一、函数1.1 字符串函数1.2 数值函数1.3 日期函数1.4 流程控制语句 二、约束2.1 约束基本分类2.2 外键约束2.3 删除/更新行为 三、多表查询3.1 多表关系3.2 多表查询概述3.3 多表查询分类3.3.1 内连接3.3.2 外连接3.3.3 连接查询-自连接 3.4 联合查询-union&…

[SpringBoot]xml写mapper

创建工程[SpringBoot框架]如何使用SpringBoot框架_万物更新_的博客-CSDN博客 实现步骤: 测试: <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd…

Visual Studio || Visual Studio Code 连接 SQL Server 和 mysql

使用Visua Studio链接本地SQL Server和服务器上的mysql。 软件版本&#xff1a; Visual Studio 2022&#xff1b;Visual Studio Code 2023&#xff1b;SQL Server 2019mysql8.0 一、软件准备二、连接SQL Server2.1 使用Visual Studio 连接SQL Server2.2 使用VS Code连接SQL Ser…

【qemu】将vmdk转换为img镜像教程

qemu软件下载地址&#xff1a; 64位下载地址&#xff1a;QEMU for Windows – Installers (64 bit) 32位下载地址&#xff1a;QEMU for Windows – Installers (32 bit) 找到qemu的目录&#xff0c;然后使用cmd打开&#xff08;qemu软件没有封装exe包&#xff0c;所以只能用…

伺服系统使用S曲线

在之前文章《S形曲线规划方式汇总》 介绍过贝塞尔曲线方式&#xff0c;并且在Marlin开源工程中也有贝塞尔曲线步进系统的实现方式。本篇介绍伺服系统中基于时间分割法实现的贝塞尔S曲线。 1 贝塞尔曲线路程规划 上文中推导过贝塞尔曲线&#xff0c;本文直接用结论&#xff1a…

分享一下如何使用echarts绘制散点图

文章目录 散点图源码地址 散点图 今天我来分享一下如何使用echarts绘制散点图 首先&#xff0c;我们需要引入echarts库。可以通过以下代码在HTML文件中引入&#xff1a; <script src"https://cdn.jsdelivr.net/npm/echarts5.2.0/dist/echarts.min.js"></s…

整合SSM(Spring + SpringMVC + Mybatis)

7、整合SSM 7.1、环境要求7.2、数据库环境7.3、基本环境搭建7.4、Mybatis层编写7.5、Spring层7.6、SpringMVC层7.7、小结及展望 7.1、环境要求 环境&#xff1a; IDEA MySQL 5.7.19 Tomcat 9 Maven 3.6 要求&#xff1a; 需要熟练掌握MySQL数据库&#xff0c;Spring&#…

FMT ICF5实时仿真,不止于飞控

基于ICF5的实时仿真 作为FMT的首款自研的国产开源飞控硬件平台&#xff0c;ICF5不仅功能强大&#xff0c;而且高颜值和高性价比获得了用户的一致好评。 FMT ICF5飞控 ICF5购买链接​item.taobao.com/item.htm?id705459383848&ali_refida3_430620_1006:1123834906:N:O3mc…

常见的主流自动化测试框架,这5种真的帮助巨大

今天我们要向大家介绍的是常见5种主流自动化测试框架&#xff0c;包括优缺点等内容&#xff0c;供大家参考学习。 1.ATF 自动化测试框架AutoTestFramework是B/S架构框架&#xff0c;可实现Selenium等多种自动化测试全流程、团队化管理的高级框架平台&#xff0c;通过集成自动化…

Zookeeper+消息队列Kafka

一、Zookeeper 概述 官方下载地址&#xff1a;Index of /dist/zookeeper 1.1 Zookeeper 定义 Zookeeper是一个开源的分布式的&#xff0c;为分布式框架提供协调服务的Apache项目。 1.2 Zookeeper 工作机制 Zookeeper从设计模式角度来理解&#xff1a;是一个基于观察者模式设…

PyCharm配置Opencv(多人亲测可用)

23/5/29更新&#xff1a; 之前由于只安装opencv-python-contrib这个包&#xff0c;导致Opencv版本过高&#xff0c;有些算法无法使用&#xff0c; 所以这里更新安装opencv-contrib-python这个包&#xff0c;具体如下配置。 ————————————————————————…

【C++】map和set的使用及其模拟实现

文章目录 一、map和set的使用1. 关联式容器2. 键值对3. 关联式容器的使用3.1 set3.2 multiset3.3 map3.4 multimap 二、map和set的模拟实现1. 红黑树的实现(封装map和set版本)1.1 节点的实现1.2 KeyOfT(仿函数)1.3 红黑树的插入Insert1.4 迭代器iterator 2. set的模拟实现3. ma…

【分布式】分片存储服务器

完成了配置路由服务器之后&#xff0c;我们来到了对存储服务器的重构 在我们加入配置服务器组之后&#xff0c;我们发现我们的kvserver&#xff0c;也就是存储服务器还是单点的&#xff1a; 同样&#xff0c;我们可以借助之前实现的raft对单点进行拓展&#xff0c;我们可以设置…