嵌入式开发笔记(五) ARM汇编指令集基础1


1.指令与伪指令的概念:

1(汇编)指令是CPU机器指令的助记符,经过编译后会得到一串10组成的机器   码,可以由CPU读取执行。

 

2(汇编)伪指令本质上不是指令(只是和指令一起写在代码中),它是编译器环 境提供的,目的是用来指导编译过程,经过编译后伪指令最终不会生成机器码。

1.1ARM指令的不同风格

两种不同风格的ARM指令

(1)ARM官方的ARM汇编风格:指令一般用大写、Windows中IDE开发环境(如 ADS.MDK等)常用。如: LDR R0, [R1]

(2)GNU风格的ARM汇编:指令一般用小写字母、linux中常用。如:ldr r0, [r1]

2.ARM汇编特点

 2.1:LDR/STR架构

ARM采用RISC架构,CPU本身不能直接读取内存,而需要先将内存中内容加载入CPU中通用寄存器中才能被CPU处理。

(1)ldr(load register)指令将内存内容加载入通用寄存器。

(2)str(store register)指令将寄存器内容存入内存空间中。

(3)ldr/str组合用来实现 ARM CPU和内存数据交换

2.2:8种寻址方式

-------------------------------------------------------------------------------

(1)寄存器寻址 mov r1, r2

(2)立即寻址 mov r0, #0xFF00

(3)寄存器移位寻址 mov r0, r1, lsl #3(左移)

   ---------------------------------------------------------------------------------

(4)寄存器间接寻址 ldr r1, [r2](r2寄存器存放内存的地址所      对应的值)

(5)基址变址寻址 ldr r1, [r2, #4](r2寄存器存放内存的地 址+4)

 

(6)多寄存器寻址 ldmia r1!, {r2-r7, r12}(r1寄存器存放的          内存地址作为首地 址依次存放到后面 寄存器)

 

(7)堆栈寻址 stmfd sp!, {r2-r7, lr}(sp堆指针连续访 问放到寄存器)

-----------------------------------------------------------------------

(8)相对寻址      beq flag (思想类似于GOTO)

               flag:(标号)

 

2.3:指令后缀

    同一指令经常附带不同后缀,变成不同的指令。经常使用的后缀有:

    (1)B(byte)功能不变,操作长度变为8位

    (2)H(half word)功能不变,长度变为16位

    (3)S(signed)功能不变,操作数变为有符号

    如 ldr(加载) ldrb (加载bytel) drh  ldrsb  ldrsh

    (4)S(S标志)功能不变,影响CPSR标志位

    如 mov和movs movs r0, #0

 

 

影响Z。

2.4:条件执行后缀

 

GT greater than

LT less than

例如:

mov r0, r1 @ 相当于C语言中的r0 = r1;

moveq r0, r1     @ 如果eq后缀成立,则直接执行mov r0, r1;如果eq不成立则      本句代码直接作废,相当于没有

@ 类似于C语言中 if (eq){r0 = r1;}

条件后缀执行注意2点:

1、条件后缀是否成立,不是取决于本句代码,而是取决于这句代码之前的代码运行后的结果。

2、条件后缀决定了本句代码是否被执行,而不会影响上一句和下一句代码是否被执行。

2.5:多级指令流水线

 

(1)为增加处理器指令流的速度,ARM使用多级流水线.,下图为3级流水线工作原理示意图。(S5PV210使用13级流水线,ARM11为8级)

允许多个操作同时处理,而非顺序执行。

(2)PC指向正被取指的指令,而非正在执行的指令

 

 

 

 

转载于:https://my.oschina.net/vvbest/blog/811521

来源:https://my.oschina.net/vvbest/blog/811521


智能推荐

嵌入式(二十八):arm总线&指令集&工作状态

1、arm流水: a、流水的深度越深,级别越多,系统的性能有可能会更高 b、arm9开始就是哈佛结构,指令的吞吐量更多,内核的频率也更高。 c、arm7是三段流水 2、arm7的三级流水线: a、正常操作过程中,在执行一条指令的同时对下一条指令进行译码,并将第三条指令从存储器中取出,即: 3、cortex M3概述: a、一块低功耗处理器 b、门数目少,中断延迟短,调试成本低 c、满足有快速中断响...

刘帅嵌入式系统-ARM指令集概要

ARM指令分类: 1、跳转指令; 2、数据处理指令; 3、程序状态寄存器传输指令; 4、Load/Store指令; 5、协处理器指令; 6、异常中断指令;   ARM指令的一般编码格式如下。 ARM指令字长固定为32bit,典型的ARM指令编码格式如下图所示:   --cond:指令执行的条件编码。 --opcode:指令操作符编码。 --S:决定指令的操作是否影响CPSR的值...

ARM汇编指令集

ARM汇编指令集 指令、伪指令 (汇编)指令:是机器码的助记符,经过汇编器编译后,由CPU执行。 (汇编)伪指令:用来指导指令执行,是汇编器的产物,最终不会生成机器码。   两种不同风格的ARM指令 ARM官方的ARM汇编风格:指令一般用大写,Windows中的IDE开发环境。 GNU风格的ARM汇编:指令一般用小写。   ARM汇编的特点 1. LDR/STR架构 .ARM采...

ARM汇编指令集

ARM汇编指令集 汇编意义 了解计算机底层越彻底,越能真正看清计算机本质,更容易写出高质量的代码。 应用场所 搞****,病毒分析,漏洞挖掘,还有想把某些代码变高效用内嵌汇编,Debug时看汇编,搞内核方面也用到汇编等等。 应用举例 比如引导程序就是传说中的bootloader,这个程序大部分的代码是汇编搞定。主要功能初始化设备,建立内存映射,在软件和硬件之间建立一个载体,这些对于了解计算机系统结...

ARM汇编指令集

一、指令与伪指令: 1、汇编指令是CPU机器指令的助记符,经过编译后会得到一串01组合的机器码,可以由CPU读取执行。 2、伪指令本质不是指令(只是和指令一起写在代码中)它是编译器环境提供的,目的是用来指导编译过程,经过编译后伪指令最终不会生成机器码,在编译过程中起作用,指导编译,在整个过程有作用但经过编译后不存在了,辅助编译器把指令加工成机器码。伪指令好像做饭用的工具,而指令像菜米原材料,加工好...

猜你喜欢

使用MMX/SSE汇编指令集优化视频开发

转载自: http://blog.csdn.net/shaqoneal/article/details/45951649 1、汇编指令集 目前大部分的PC机采用的都是Intel或者AMD的CPU,其支持的多媒体汇编指令有: MMX:多媒体扩展指令(MultiMedia eXtention),该指令由Intel在1996年为Pentium处理器开发,包括了57条多媒体指令,可以i一次处理多...

场效应管放大电路

金属-氧化物-半导体(MOS)场效应管 N沟道增强型MOSFET 栅源加电压,在电场作用下产生沟道。产生沟道的门限开启电压VT。 漏源加电压,产生电压梯度,导致沟道夹断。预夹断的临界条件 输出特性 特性方程 可变电阻区                         &...

【响应式】foundation栅格布局的“尝鲜”与“填坑”

  提到响应式,就不得不提两个响应式框架——bootstrap和foundation。在标题上我已经说明白啦,今天给大家介绍的是foundation框架。 何为“尝鲜”?就是带大伙初步一下foundation的灵活和强大 何为“踩坑”?就是我把我使用的时候踩过的坑给标个记号,这样大伙用的时候就可以“绕道而...

word2vec笔记

word2vec 词向量 one hot Distributed representation CBOW&Skip-Gram CBOW Skip-Gram sigmoid函数 Huffman树 基于Hierarchical Softmax的模型 基于Negative Sampling的模型 本文基于word2vec原理CBOW与Skip-Gram模型基础 CBOW与Skip-Gram的模型...

2021-03-14

官网:https://router.vuejs.org/zh/guide/essentials/navigation.html 一、安装路由 npm install vue-router --save-dev 在src目录下创建router目录 使用 vuecli3创建项目选择路由会自动创建route目录 在main.js引入router 二、配置路由 1、 hash: 使用 URL hash 值...

问答精选

SQL, update command not ending properly

It keeps saying : ORA-00933: SQL command not properly ended Pls help me or give me a link to a solution You can use a correlated subquery instead:...

How can I escape $.each loop with my data?

I'm doing an Json call to retrieve an a list of locations with information details for each location. longitude and latitude are included in this info. I am using Google's distance matrix api to get t...

How to display all the columns (and their type) in all tables of all schemas in a database?

Suppose you have a database which has an 'n' number of schemas with an 'n' number of tables each. Each of these contain an 'n' number of columns. How would I print all this data along with the data ty...

How to set the java.library.path in intelliJ Idea

Could anyone please help how do I solve this error: I am using IDEA IDE as a first time, and have been using Resin_4.0.37 as a server to test my work. As soon as I start my lcoal server in debug mode ...

How to calculate mouse coordinate based on resolution c#

i am trying to develop a remote desktop apps with c#. so i have couple of question regarding mouse coordinate calculation based on picture box suppose i have picture box and i want to capture mouse co...

相关问题

相关文章

热门文章

推荐文章

相关标签

推荐问答