实验内容
(1)编写程序,完成两个64位数据的加法运算,数据来源和计算结果都在寄存器中。
(2)编写程序,对一个32位立即数的最低4位分别实现置1、清零和取反操作。
(3)编写程序,将存储器中的一个字数据读取到寄存器R0中。使用DCD伪操作为数据分配存储空间和初始化数据。
(1)编写程序,完成两个64位数据的加法运算,数据来源和计算结果都在寄存器中。
基本思路
- 使用R0,R1分别存储64位数据A的高32位和低32位
- 使用R2,R3分别存储64位数据B的高32位和低32位
- 高位与高位运算R0 = R0+R2
- 低位与低位运算R1 = R1+R3
代码实现
AREA Init,CODE,READONLY
ENTRY
CODE32
START
LDR R0,= 0x11111111 ;存储数据A的高32位
LDR R1,= 0x22222222 ;存储数据A的低32位
LDR R2,= 0x33333333 ;存储数据B的高32位
LDR R3,= 0x44444444 ;存储数据B的低32位
ADDS R1,R1,R3 ;R1+R3溢出,ADDS进位,c标志位置1,R1=0x44444444
ADC R0,R0,R2 ;高位相加,ADC是带进位的加 ,R0=0x66666666
B START
END
Debug
(2)编写程序,对一个32位立即数的最低4位分别实现置1、清零和取反操作。
基本思路
- ORR:或运算,将低4位置1
- BIC:按位清零
- EOR:异或运算,将低4位取反
代码实现
AREA Init,CODE,READONLY
ENTRY
CODE32
START
LDR R0,= 0x12345678
ORR R1,R0,#0x0F ;低4位置1
BIC R2,R0,#0x0F ;低4位清零
EOR R3,R0,#0x0F ;低4位取反
B START
END
Debug
(3)编写程序,将存储器中的一个字数据读取到寄存器R0中。使用DCD伪操作为数据分配存储空间和初始化数据。
代码实现
AREA Init,CODE,READONLY
ENTRY
CODE32
START
ADR R1,DATATEST ;将DATATEST的地址加载到R1
LDR R0,[R1] ;将DATATEST的数据加载到R1
DATATEST DCD 0x23 ;分配一片地址空间给DATATEST,并初始化位0x23
B START
END