小盒子的小盒

『小盒子学习ARM汇编指令--总结』

0
阅读(3090)

Load/Store 内存访问指令
1.LDR 字数据读取

使用方法通常有两种:
1.用于从内存中读取32位字数据到通用寄存器中,然后可在该寄存器中对数据进行一定的操作
2.当PC作为指令中的目标寄存器时,指令可以实现程序跳转的功能.
LDR  R0, [R1,#4]  ;将内存单元R1+4中的字读取到R0寄存器中
LDR  R1, =0x7FFFE ;常量“0x7FFFE”的地址存放到R1寄存器中
注意:
如设置线宽为16位,由于CPU是32位,CPU会把32位数据分两次操作写入,每次写16位,这样对32位的外设来说是一种浪费
例如:       LDR      R0, =0x10000000
            LDR      R1, =0x12345678
            STR      R1,[R0]     ;将R1中的字数据保存到内存单元R0中
           
实际情况是  第一次写入地址0x10000000的数据是 0x1234
           第二次写入地址0x10000002的数据是 0x5678
如设置线宽为32位,CPU会把32位数据一次写入,如果外设是16位的话,如ISA网卡,就会造成高16位丢失.
例如:       LDR      R0, =0x10000000
            LDR      R1, =0x12345678
            STR      R1,[R0]
实际情况是 一次写入地址0x10000000的数据是 0x12345678
2007-4-13 14:13
程序状态寄存器访问指令
1.MRS程序状态寄存器到通用寄存器的数据传送指令
2.MSR通用寄存器到程序状态寄存器的数据传送指令
MRS指令的格式为:
MRS{条件} 通用寄存器,程序状态寄存器(CPSR或SPSR)
CPSR 当前程序状态寄存器
SPSR 备份程序状态寄存器
该指令一般用在以下几种情况
1.当需要修改程序状态寄存器的内容时,可用MRS将程序状态寄存器的内容读入通用寄存器,修改后在写回程序状态寄存器.
2.当在异常处理或进程切换时,需要保存程序状态寄存器的值,可先用该指令读出程序状态寄存器的值,然后保存
例如:
MRS R0, CPSR ;传送CPRS的内容到R0
MRS R0, SPSR ;传送SPSR的内容到R0
MSR指令的格式为:
MSR{条件}程序状态寄存器(CPSR或SPSR)_<域>,操作数
MSR指令用语将操作数的内容传送到程序状态寄存器的特定域中.其中,操作数可以为通用寄存器或立即数.<域>用于设置程序状态寄存器中需要操作的为.32位的程序状态寄存器可分为4个域 .
位[31:24] 为条件标志位域  ,用f表示;
位[23:16] 为状态位域    ,用s表示;
位[15:8] 为扩展位域    ,用x表示;
位[7:0]  为控制位域    ,用c表示;
该指令通常用于恢复或改变程序状态寄存器的内容,在使用时,一般要在MSR指令中明确将要操作的域.
例如:
MSR CPSR, R0 ;传送R0的内容到CPSR
MSR SPSR, R0 ;传送R0的内容到SPSR
MSR CPSR_c ,R0 ;传送R0的内容到CPSR,但仅仅修改CPSR中的控制位域