第六篇:匯編基礎指令講解
阿新 • • 發佈:2018-08-19
錯誤 info 其他 不能 mov指令 位或 簡單的 圖解 strong
目錄
- 基礎匯編代碼
- LDR(load)
- STR(store)
- B
- MOV(move)
- LDR(註意跟讀內存的LDR不一樣,格式不同)
- add(加)
- sub(減)
- BL(branch and Link)
- ldm 和 stm
- ldmia 和 stmdb
- CPU,R0~R15圖解
基礎匯編代碼
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(branch and Link)
? 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圖解
第六篇:匯編基礎指令講解