• arm指令


    BL 和 BLX 指令可将下一个指令的地址复制到 lr(r14,链接寄存器)中。
    
    BX 和 BLX 指令可将处理器的状态从 ARM 更改为 Thumb,或从 Thumb 更改为 ARM。
    
    BLX label 无论何种情况,始终会更改处理器的状态。
    
    BX Rm 和 BLX Rm 可从 Rm 的位 [0] 推算出目标状态:
    
    如果 Rm 的位 [0] 为 0,则处理器的状态会更改为(或保持在)ARM 状态
    
    如果 Rm 的位 [0] 为 1,则处理器的状态会更改为(或保持在)Thumb 状态。

    adr指令:
    10: _start 
    0x0000000C           E1A00000           NOP 
    11:           nop
    ldr           r0, _start //从内存地址 _start 的地方把值读入。执行这个后,r0 = 0xe1a00000
    adr         r0, _start   //adr r0, _start 得到 r0 = 0x00000010 这里和具体运行位置无关

    LDR/STR:

    ldr内存到寄存器,str寄存器到内存,刚好相反

    LDR     R1,=0xE0000000  ;R1=0xE0000000
    LDR     R1,0xE0000000   ;将内存中地址为0xE0000000的内容载入到R1
    LDR     R1,[R0]         ;将R0中的数所指定的地址的内容传输到R1

    STR R1,[R0]

     beq:

    .text:00001070 00 29                       CMP             R1, #0  ; Alternative name is '__aeabi_idiv'
    .text:00001072 56 D0                       BEQ             loc_1122 

    bx lr

    arm中lr中保存的是返回地址,与x86的好像是不同的

    指令后带.w说明是32位

    ADD R3,R2,R1,LSL#3; R3ßR2+8*R1

    其中LSL #3 为左移三位

    移位指令:

            LSL:逻辑左移

            LSR:逻辑右移

            ASR:算术右移

            ROR:循环右移

            RRX:扩展为1的循环右移

    //表示r0右移31位与r0相加放入r0
    ADD
    .W R0, R0, R0,LSR#31
  • 相关阅读:
    HDU_1006_Tick and Tick
    HDU_1011_Starship Troopers_树型dp
    HDU_1520_Anniversary party_树型dp
    HDU_1176_免费馅饼_16.4.23再做
    HDU_1203_01背包
    HDU_1421_搬寝室_dp
    HDU_1505_矩阵中的最大矩形_dp
    STL_map的使用
    Semantic-UI-React (称 stardust) 对比 Antd
    meteor 为基础,联合 Apollo + React + React-Router
  • 原文地址:https://www.cnblogs.com/fply/p/8418263.html
Copyright © 2020-2023  润新知