zoukankan      html  css  js  c++  java
  • arm 汇编语法

        area abc123, code, readonly    ;
        entry 
        code32
    
    
    start
        mov r1,    #5
        mov r2, #2
        add r0, r1, r2
        end

    装了个ADS 1.2; 新手不会弄,用起来超不习惯;
    很要命,没关键字语法高亮!上面代码编译通过,除了mov, add 这些指令能马上分辨出来,谁能想到area这个是干什么的?

    如果我把abc123改成asm 其他新人是否会误以为asm是关键字了?

    要命的是,前三行和最后一行的“end”必须以制表符开头,makefile的那个制表符就很不爽了,又碰到一个这样的语法规定;
    程序员在学习一样东西的时候,总是要把相当一部分的时间耗费在熟悉那古怪的难以琢磨的语法身上!!!
    -------------- 等俺 那天练就一身绝学,统一所有编程语言语法,任何程序员只需要学习一种通用语法,便可到处编写;

     
    其实ARM汇编应该很简单,37个寄存器,53个指令助记符;就这么点。。。
      ARM指令集:6种类型(53种主要助记符):
        1、数据处理指令(22种主要助记符)
        2、跳转指令(4种主要助记符)
        3、Load/Store指令(16种主要助记符)
        4、程序状态寄存器指令(2种主要助记符)
        5、协处理器指令(5种主要助记符)
        6、软件中断指令(2种主要助记符)

      
    在 ARM 6(和以后)的 32 位模式下可获得的寄存器有: 
    
    User26   SVC26    IRQ26    FIQ26      User     SVC      IRQ      ABT      UND      FIQ
    
    R0 ----- R0 ----- R0 ----- R0 --   -- R0 ----- R0 ----- R0 ----- R0 ----- R0 ----- R1
    R1 ----- R1 ----- R1 ----- R1 --   -- R1 ----- R1 ----- R1 ----- R1 ----- R1 ----- R2
    R2 ----- R2 ----- R2 ----- R2 --   -- R2 ----- R2 ----- R2 ----- R2 ----- R2 ----- R2
    R3 ----- R3 ----- R3 ----- R3 --   -- R3 ----- R3 ----- R3 ----- R3 ----- R3 ----- R3
    R4 ----- R4 ----- R4 ----- R4 --   -- R4 ----- R4 ----- R4 ----- R4 ----- R4 ----- R4
    R5 ----- R5 ----- R5 ----- R5 --   -- R5 ----- R5 ----- R5 ----- R5 ----- R5 ----- R5
    R6 ----- R6 ----- R6 ----- R6 --   -- R6 ----- R6 ----- R6 ----- R6 ----- R6 ----- R6
    R7 ----- R7 ----- R7 ----- R7 --   -- R7 ----- R7 ----- R7 ----- R7 ----- R7 ----- R7
    R8 ----- R8 ----- R8       R8_fiq     R8 ----- R8 ----- R8 ----- R8 ----- R8       R8_fiq
    R9 ----- R9 ----- R9       R9_fiq     R9 ----- R9 ----- R9 ----- R9 ----- R9       R9_fiq
    R10 ---- R10 ---- R10      R10_fiq    R10 ---- R10 ---- R10 ---- R10 ---- R10      R10_fiq
    R11 ---- R11 ---- R11      R11_fiq    R11 ---- R11 ---- R11 ---- R11 ---- R11      R11_fiq
    R12 ---- R12 ---- R12      R12_fiq    R12 ---- R12 ---- R12 ---- R12 ---- R12      R12_fiq
    R13      R13_svc  R13_irq  R13_fiq    R13      R13_svc  R13_irq  R13_abt  R13_und  R13_fiq
    R14      R14_svc  R14_irq  R14_fiq    R14      R14_svc  R14_irq  R14_abt  R14_und  R14_fiq
    --------- R15 (PC / PSR) ---------    --------------------- R15 (PC) ---------------------
                                          ----------------------- CPSR -----------------------
                                                   SPSR_svc SPSR_irq SPSR_abt SPSR_und SPSR_fiq
    ADC  带进位的加法  -   
    ADD  加法  -   
    AND  逻辑与  -   
    ASL  算术左移  这是一个选项,不是指令   
    ASR  算术右移  这是一个选项,不是指令   
    B  分支  -   
    BIC  位清除  -   
    BL  带连接的分支  -   
    BX  分支到 Thumb 代码  StrongARM SA1110 ?  
    CDP  协处理器数据操作  -   
    CMN  比较取负的值  -   
    CMP  比较值  -   
    EOR  异或两个值  -   
    LDC  装载内存到协处理器  -   
    LDM  装载多个寄存器  -   
    LDR  装载寄存器  -   
    LDRB  装载字节到寄存器  -   
    LDRH  装载半字到寄存器  StrongARM  
    LDRSB  装载有符号字节到寄存器  StrongARM   
    LDRSH  装载有符号半字到寄存器  StrongARM    
    LSL  逻辑左移  这是一个选项,不是指令  
    LSR  逻辑右移  这是一个选项,不是指令  
    MCR  协处理器寄存器传送  -  
    MLA  带累加的乘法  -   
    MOV  传送值/寄存器到一个寄存器  -   
    MRC  协处理器寄存器传送  -   
    MRS  传送状态标志到一个寄存器  ARM 6   
    MSR  传送一个寄存器的内容到状态标志  ARM 6   
    MUL  乘法  -   
    MVN  传送取负的(值)  -   
    ORR  逻辑或  -   
    ROR  循环右移  这是一个选项,不是指令    
    RRX  带扩展的循环右移  这是一个选项,不是指令    
    RSB  反向减法  -    
    RSC  带借位的反向减法  -    
    SBC  带借位的减法  -    
    SMLAL  带累加的有符号长(64 位)乘法  StrongARM    
    SMULL  有符号长(64 位)乘法  StrongARM    
    STC  协处理器数据传送  -    
    STM  存储多个寄存器  -    
    STR  存储一个寄存器  -    
    STRB  存储一个字节(从一个寄存器)  -    
    STRH  存储一个半字(从一个寄存器)  StrongARM    
    STRSB  存储一个有符号字节(从一个寄存器)  StrongARM    
    STRSH  存储一个有符号半字(从一个寄存器)  StrongARM    
    SUB  减法  -    
    SWI  导致一个软件中断  -    
    SWP  交换寄存器与内存  ARM 3    
    TEQ  测试等价(概念上的 EOR)  -    
    TST  测试并屏蔽(概念上的 AND)  -    
    UMLAL  带累加的无符号长(64 位)乘法  StrongARM    
    UMULL  无符号长(64 位)乘法  StrongARM    
    

     
  • 相关阅读:
    Springboot中enable注解
    java消息队列--ActiveMQ,RabbitMQ入门
    java中的静态和动态代理Proxy
    java源码中的注解
    java中jdbc源码解读
    sql脚本练习
    spring boot中的jave注解学习
    thymeleaf入门和学习
    职场经验:互联网公司有哪些“潜规则”?职场萌新一定要注意了!
    C/C++编程笔记:C语言错误处理方法!如何更好地处理程序的错误?
  • 原文地址:https://www.cnblogs.com/mathzzz/p/2596686.html
Copyright © 2011-2022 走看看