欢迎光临散文网 会员登陆 & 注册

(基于ARM的)微机原理与接口技术笔记(6)

2021-10-24 12:09 作者:会整活的剑人  | 我要投稿

寻址方式(复习)

操作数可以在3个地方

(1)指令含有操作数 立即数寻址

(2)处理器内的寄存器 寄存器寻址 寄存器移位寻址

(3)存储器里面

间接寻址(操作数在存储器中 寄存器里面是指针)

基址寻址(指针+offset)

多寄存器寻址(寄存器组合[r0到r15])

堆栈寻址(指令里有sp 会有A/D,F/E的标志 在ldm或stm出现)

相对寻址

堆栈 STACK 内存中开的一片区域 初始化时规定大小

注:新一些的ARM有push和pop指令

起始:栈底 栈指针SP(指向栈顶)

递增栈:进栈SP向上增长

递减栈:进栈SP向下增长

空/满 堆栈

存储器访问

装载LDRxx

多寄存器加载LDM 把一片连续内存区域copy 低地址对应小编号寄存器

存储STRxx

多寄存器加载STM

后缀 A执行后增减 B执行前增减 I增加 D减少

举例:

ldmfd sp!,{r0-r7,pc}^ ;`^`表示带状态寄存器的恢复
stmfd sp!,{r0-r7,lr}
stmfd sp!,{r0-r7,pc}

数据处理指令

只能直接操作寄存器,不能操作内存.可以加s后缀以影响状态寄存器.

数值传送指令:movmvn(寄存器到寄存器/立即数到寄存器,不能访问内存)  和ldr不同的是ldr从存储器加载(只能访问内存)

mov r0,r1 ;把r0传送给r1
mvn r0,r1 ;把r0按位取反后传送给r1

算术运算 逻辑运算 位运算

加 减 与 或 异或 格式:opcode{cond}{s} rd,rn,opcode2

add r3,r1,#0x08 ;加法 r3=r1+8
adds r3,r1,#0x08 ;影响cpsr的高4位
adc r1,r2,r1;带进位加法
sub r1,r2,r1;减法
rsb r1,r2,r1;逆向减法
sbc r1,r2,r1;带进位减法
rsc r1,r2,r1;带进位逆向减法
and r3,r1,#0xff ;r3=r1取低8位 r3=r1&(0xff)
orr r3,r1,r2 ;r3=r1|r2 (位或`|` 组合一些数)
eor r3,r1,r2,lsl 0x03 ;r3=r1^(r2*8) `^`按位异或 有桶型移位器
bic r1,r2,#0x0f ;位清零 r1=r2&(~(0x0f))


比较

格式opcode{cond} reg,op 必然影响状态寄存器

;假设r3=5
cmp r3,r1;数值比较 做r3-r1(减法) cpsr[31:28]NZCV 1010 影响NZCV
cmn r3,r1;做r3-(~r1)
tst r3,#0x02 ;做r3&r2(位与) 测试第2位 cpsr[31:28] NZCV 0100
teq r3,r2; 做r3^r2(位异或)影响Z不影响CV


分支(branch)指令

分支跳转

格式B{L}{cond} <target_addr>

24位跳转范围 不能任意跳转 24位扩展到30位,左移2位,加上pc值

mov pc,r14 ;直接改pc跳转 仿真器调试
b main;强制跳转到main
bx ;跳转切换模式A/T
bl label;把下一条指令地址放到链接寄存器 多用于子程序跳转 有的处理器用call指令

ARM汇编程序

  • 指示命令

    • if else endif

    • while wend

    • {标号} dcd {}

    • 全局变量 GBLA数值 GBLL逻辑 GBLS字符串

    • 局部变量 LCLA数值LCLL逻辑 LCLS字符串

    • 变量赋值 SETA SETL SETS

    • RLIST 寄存器组合

    • 符号定义

    • 数据定义

    • 汇编控制assembly control 条件汇编

    • 宏定义

  • 语法

    [标号]<指令|伪指令|汇编指示指令>[;注释]

    程序段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链接:


(基于ARM的)微机原理与接口技术笔记(6)的评论 (共 条)

分享到微博请遵守国家法律