(基于ARM的)微機(jī)原理與接口技術(shù)筆記(6)
尋址方式(復(fù)習(xí))
操作數(shù)可以在3個(gè)地方
(1)指令含有操作數(shù) 立即數(shù)尋址
(2)處理器內(nèi)的寄存器 寄存器尋址 寄存器移位尋址
(3)存儲(chǔ)器里面
間接尋址(操作數(shù)在存儲(chǔ)器中 寄存器里面是指針)
基址尋址(指針+offset)
多寄存器尋址(寄存器組合[r0到r15])
堆棧尋址(指令里有sp 會(huì)有A/D,F/E
的標(biāo)志 在ldm或stm
出現(xiàn))
堆棧 STACK 內(nèi)存中開的一片區(qū)域 初始化時(shí)規(guī)定大小
注:新一些的ARM有push和pop指令
起始:棧底 棧指針SP(指向棧頂)
遞增棧:進(jìn)棧SP向上增長(zhǎng)
遞減棧:進(jìn)棧SP向下增長(zhǎng)
空/滿 堆棧
存儲(chǔ)器訪問
裝載LDRxx
多寄存器加載LDM
把一片連續(xù)內(nèi)存區(qū)域copy 低地址對(duì)應(yīng)小編號(hào)寄存器
存儲(chǔ)STRxx
多寄存器加載STM
后綴 A
執(zhí)行后增減 B
執(zhí)行前增減 I
增加 D
減少
舉例:
ldmfd sp!,{r0-r7,pc}^ ;`^`表示帶狀態(tài)寄存器的恢復(fù)
stmfd sp!,{r0-r7,lr}
stmfd sp!,{r0-r7,pc}
數(shù)據(jù)處理指令
只能直接操作寄存器,不能操作內(nèi)存.可以加s后綴以影響狀態(tài)寄存器.
數(shù)值傳送指令:mov
和mvn
(寄存器到寄存器/立即數(shù)到寄存器,不能訪問內(nèi)存) ?和ldr
不同的是ldr
從存儲(chǔ)器加載(只能訪問內(nèi)存)
mov r0,r1 ;把r0傳送給r1
mvn r0,r1 ;把r0按位取反后傳送給r1
算術(shù)運(yùn)算 邏輯運(yùn)算 位運(yùn)算
加 減 與 或 異或 格式:opcode{cond}{s} rd,rn,opcode2
add r3,r1,#0x08 ;加法 r3=r1+8
adds r3,r1,#0x08 ;影響cpsr的高4位
adc r1,r2,r1;帶進(jìn)位加法
sub r1,r2,r1;減法
rsb r1,r2,r1;逆向減法
sbc r1,r2,r1;帶進(jìn)位減法
rsc r1,r2,r1;帶進(jìn)位逆向減法
and r3,r1,#0xff ;r3=r1取低8位 r3=r1&(0xff)
orr r3,r1,r2 ;r3=r1|r2 (位或`|` 組合一些數(shù))
eor r3,r1,r2,lsl 0x03 ;r3=r1^(r2*8) `^`按位異或 有桶型移位器
bic r1,r2,#0x0f ;位清零 r1=r2&(~(0x0f))
比較
格式opcode{cond} reg,op
必然影響狀態(tài)寄存器
;假設(shè)r3=5
cmp r3,r1;數(shù)值比較 做r3-r1(減法) cpsr[31:28]NZCV 1010 影響NZCV
cmn r3,r1;做r3-(~r1)
tst r3,#0x02 ;做r3&r2(位與) 測(cè)試第2位 cpsr[31:28] NZCV 0100
teq r3,r2; 做r3^r2(位異或)影響Z不影響CV
分支(branch)指令
分支跳轉(zhuǎn)
格式B{L}{cond} <target_addr>
24位跳轉(zhuǎn)范圍 不能任意跳轉(zhuǎn) 24位擴(kuò)展到30位,左移2位,加上pc值
mov pc,r14 ;直接改pc跳轉(zhuǎn) 仿真器調(diào)試
b main;強(qiáng)制跳轉(zhuǎn)到main
bx ;跳轉(zhuǎn)切換模式A/T
bl label;把下一條指令地址放到鏈接寄存器 多用于子程序跳轉(zhuǎn) 有的處理器用call指令
ARM匯編程序
指示命令
if else endif
while wend
{標(biāo)號(hào)} dcd {}
全局變量 GBLA數(shù)值 GBLL邏輯 GBLS字符串
局部變量 LCLA數(shù)值LCLL邏輯 LCLS字符串
變量賦值 SETA SETL SETS
RLIST 寄存器組合
符號(hào)定義
數(shù)據(jù)定義
匯編控制
assembly control
條件匯編宏定義
語法
[標(biāo)號(hào)]<指令|偽指令|匯編指示指令>[;注釋]
程序段
area
area word,core,readonly
num equ 28
entry
start
ldr r0,=src
ldr r1,=dst
mov r2,#num
wordcopy
ldr r3,[r0],#4
str r3,[r1],#4
subs r2,r2,#1
bne wordcopy
stop
mov r0,#0x18
ldr r1,=0x20026
svc #0x123456
area blockdata,data,readwrite
src dcd 1,2,3,4,5
dst dcd 0,0,0,0,0
end
gitee鏈接: