第六篇:匯編基礎指令講解


基礎匯編代碼

LDR(load)

讀內存 LDR R0,[R1]

假設R1的值=x,讀取地址x的數據(4字節)保存到R0中

STR(store)

寫內存命令 STR R0,[R1]

​ 假設R1的值=x,把R0的值寫入到地址X(4字節)

B

​ 跳轉的意思

MOV(move)

賦值 MOV R0,R1

​ 把R1的值賦給R0,R0=R1

​ mov R0,#0x100, R0=0x100

LDR(注意跟讀內存的LDR不一樣,格式不同)

​ LOR R0,=0x12345678 //R0=0x12345678 偽指令后面跟的數可以是任意值

LOR是偽指令,它會被拆分為幾條真正的RAM指令

  • 特別注意

    MOV R0,#0x12345678 ---->是無錯誤的,ARM指令 32位,這里64位了

    32位中,需要有某個位或某幾位表示mov指令本身和R0本身,那么剩下的就不足32位了,就不能表示任意值了(如:0x12345678),只能表示簡單值(如:0x100),一些簡單的數值,也被稱為立即值,所以為了能表示任意值,就引入了偽指令的概念

add(加)

​ add r0,r1,#4 //ro = r1+4;

sub(減)

​ sub r0,r1,#4 //r0=r1-4

​ bl xxx //先跳轉到xxx;再把返回地址保存在1r寄存器中

ldm 和 stm

​ 2個指令的m 表示 many

  • ldm:讀內存,寫入多個寄存器
  • stm: 把多個寄存器的值寫入內存

ldmia 和 stmdb

  • 說明:

    ​ 其他形式簡單的描述指令的形式,意思分別是過后增加(Increment After)(ia)、預先增加(Increment Before)(ib)、過后減少(Decrement After)(da)、預先減少(Decrement Before)(db)

  • stmdb的圖解

    stmdb sp!, {fp,ip,lr,pc}

    sp!=> !作用讓 sp=最終的,被修改的sp值 = 4080

  • ldmia的圖解
    ldmia sp,{fp,sp,pc}

CPU,R0~R15圖解


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM