2026-03-01
分类:服务器技术
阅读(42) 评论(0)
目录
立即寻址
寄存器寻址
寄存器间接寻址
基址加变址寻址
相对寻址
堆栈寻址
块拷贝寻址
立即寻址
本质特征:操作数直接包含在指令中,以“#”为前缀标识
数值表示
十六进制需加“0x”前缀
无前缀默认十进制
典型指令
MOV R0,#0x11:将立即数0x11存入R0
ADC R0,R0,#99:带进位加法,R0⬅R0 + 99 + C
寄存器寻址
操作特点:直接使用寄存器编号(R0-R15)作为操作数
执行效率:在各类微处理器中效率较高
示例
ADD R3,R1,R2:若R1=5,R2=6,则R3=11
识别要点:无特殊符号,直接使用寄存器编号
寄存器间接寻址
核心概念:寄存器存储的是操作数的内存地址而非数据本身
语法标识:用中括号[ ]包裹寄存器编号
操作流程
从寄存器读取地址(如R1=5)
访问该内存地址获取实际数据(如地址6存储值10)
典型指令
STR R1,[R2]:将R1值存入R2指向的内存单元
基址加变址寻址
组成要素
基址寄存器(如R11)
地址偏移量(立即数或寄存器)
例如
LDR R0, [R1,#3] R0⬅[R1+3]
STR R1,[R2,#6] [R2+6]⬅R1 把寄存器 R1中的数值,写入到内存地址为 “R2 寄存器的值 + 6” 的位置
LDR R0,[R1,#3]! R0⬅[R1+3],R1⬅R1+3 R1+3地址读数据到R0,同时把 R1更新为R1+3
LDR R0,[R1],#3 R0⬅R1,R1⬅R1+3 R1 为地址读数据到R0,再把R1更新为R1+3
LDR R0,[R1,R2] R0⬅[R1+R2]
STR R0,[R1+R2] [R1+R2]⬅R0
应用场景:访问基地址附近的连续内存区域
相对寻址
基准参考:以程序计数器PC当前值为基地址
偏移计算:指令中的标号作为有符号偏移量
典型应用
BLSubroutine_A:跳转到子程序
MOV PC,LR:子程序返回
方向特性
正偏移:向下跳转(地址增大)
负偏移:向上跳转(实现循环)
堆栈寻址
数据结构:先进后出(FILO),通过专用SP寄存器管理
生成方向
递增堆栈:地址由低向高增长
递减堆栈:地址由高向低增长
四种模式
满递增:SP指向最后数据,低→高地址
满递减:SP指向最后数据,高→低地址
空递增:SP指向下一空位,低→高地址
空递减:SP指向下一空位,高→低地址
块拷贝寻址
别名:多寄存器寻址
批量操作:单条指令可传送最多16个通用寄存器
典型格式
STMIA R0!,{R1,R2,R5,R9}:
R1→[R0]
R2→[R0+4]
R5→[R0+8]
R9→[R0+12]
最后更新R0=R0+16