问答题 以下不完整的程序完成的功能是取内存单元0x38000000的值(无符号数),如果该值超过0x80000000,则循环累加队列中的所有元素(由Array2指示),直到遇到结束标志0xAA55为止,结果放在R4,R0指向队列头,使用命令LDR R1,[R0,#2]!来装载,累加结束转到NEXT2;否则把一个含64个带符号的16位数据组成的队列(由Array1指示)求平方和放到R5中。试填写ARM汇编程序片段中的空白,完善该程序。
AREA MyExCode,CODE,READONLY
ENTRY
CODE32 ;32位ARM模式代码
Addr1 ______0x38000000 ; 定义Addr1地址为0x38000000
Data1 EQU 0x80000000
START LDR R1,=Addr1 ;将内存地址装入寄存器R1中
______ ; 取内存数据到R0中
CMP R0,#0x80000000
______ ; 超过0x80000000转向GOING1
MOV R7,#64 ;64个带符号数据,数据个数
LDR R0,=Array1 ;取数据队列首地址
MOV R5,#0 ;平方和初始化为0
NEXT1 ______ ; 取16位的数(半字)到R1且R0←R0+2
MUL R6,R1,R1 ;求数据平方放R6中
______ ; 求平方和放R5中
______ ; 数据个数减1
BNE______ ; 64个数据未处理完则继续
GOING1 MOV R4,#0 ;累加和初始化为0
______ ; 取待累加的数据首地址到R0
LOOPM LDR R1,[R0,#2]! ;取待累加的数据放R1中,地址自动更新,R0=R0+2
______ ; 判断是不是结束了(特征0xAA55)
BEQ NEXT2 ;如果遇到结束标志则转NEXT2
ADD R4,R4,R1 ;累加数据到R4中
______LOOPM ; 直接返回LOOPM继续累加
NEXT2 B START
AREA BUFDATA,DATA,READWRITE ;定义一个可读/写的数据段BUFDATA
Array1 DCW 0x0123,1,4,0x6789,0xof,… ;64个16位有符号数
Array2 DCD 0x11 ;若干个32位无符号数,以0为结束
DCD 0x22
DCD 0x33

DCD 0
END ;整个程序结束
【正确答案】
【答案解析】EQU
LDR RO,[R1]
BHI GOING1
LDRH R1,[R0+2]!
ADD R5,R5,R6
SUB R7,R7,#1
NEXT1
LDR RO,=Array2
CMP R1,#0xAA55
B