zoukankan      html  css  js  c++  java
  • ARM汇编指令集1

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

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

    两种不同风格的ARM指令

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

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

    ARM 汇编的特点1:LDR/STR架构

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

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

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

      --ldr/str组合用来实现ARM CPU和内存数据交换。

     ARM汇编特点2: 8种寻址方式

      --寄存器寻址                  mov   r1,r2

      --立即寻址                     mov   r0,#0xFF00

      --寄存器移位寻址             mov   r0,r1,lsl#3

      --寄存器间接寻址             ldr     r1,[2]       ;r2里的数据为内存地址里的数据赋值给r1(有点像C语言的指针)

      --基址变址寻址                ldr     r1,[r2,#4] ;  r2里的数据为内存地址加4的地址里的数据赋值给r1(有点像C语言的指针)

      --多寄存器寻址                ldmia  r1!,{r2-r7,r12};r1里的数据作为起始内存地址依次往后将r2,r3,r4,r5,r6,r7,r12里的数据依次赋值到内存里(类似于数组)

      --堆栈寻址                     stmfd  sp!,{r2-r7,lr};sp里的数据作为起始内存地址依次往后将r2,r3,r4,r5,r6,r7,lr里的数据依次赋值到内存里(栈的操作)

      --相对寻址                     beq     flag;直接跳转到flag为标号的地方

    ARM汇编特点3:指令后缀

    --同一指令经常附带不同的后缀,变成不同的指令。

      经常使用的后缀有:

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

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

                                   S(signed )功能不变,操作数变为有符号     如:ldr ldrb  ldrh ldrb ldrh

                                          

  • 相关阅读:
    angular学习笔记(二十五)-$http(3)-转换请求和响应格式
    angular学习笔记(二十四)-$http(2)-设置http请求头
    angular学习笔记(二十三)-$http(1)-api
    Replace 在动态sql中的实现
    SQL 中 replace 替换字符串中的字符 ''
    sqlserver 时间字符串转化为时间格式
    update set where exists 多表更新 在mssql、MySQL、Oracle中分别用法
    LPAD在Oracle中和 mssql以及在MySQL中的不同用法 以及调用存储过程方法
    支付宝对账单下载Java正式商户调用
    支付宝对账单下载Java沙箱调用
  • 原文地址:https://www.cnblogs.com/yygsj/p/4989771.html
Copyright © 2011-2022 走看看