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


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

1(汇编)指令是CPU机器指令的助记符,通过编译后会获得一串10组成的机器   码,能够由CPU读取执行。架构

 

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

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处理。im

(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点:

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

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

2.5:多级指令流水线

 

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

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

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

相关文章
相关标签/搜索