用ARM汇编代码实现以下C程序段 for(i=0;i<20;i++) x[i]=a[i]*b[i]

如题所述

N EQU 20
AREA Adding, CODE, READONLY
ENTRY
MOV R1,#0 ; i
MOV R2,=A ; a[ i ]
MOV R3,=B ; b[ i ]
MOV R4,=X ; x[ i ]
REPEAT
LDR R5,[R2]
LDR R6,[R3]
MUL R0,R5,R6 ; a[ i ]*b[ i ]
STR R0,[R4] ; x[ i ]= a[ i ]*b[ i ], 其中x[ i ]只存放结果的低32位
ADD R1,R1,#1 ; i++
ADD R2,R2,#4 ; [R2+4]
ADD R3,R3,#4 ; [R3+4]
ADD R4,R4,#4 ; [R4+4]
CMP R1,#N
BCC REPEAT
LDR R4,=RESULT
STR R0,[R4]
HERE B HERE
AREA DataSpace, DATA, READWRITE
A DCD 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
B DCD 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
X DCD 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
END

这是x[ i ]只存放结果低32位的ARM代码
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-11-28
吉大软件???同求啊~追问

我是文哥啊 你是几班的的?嘿嘿 今天我交上了

arm 汇编高手进! 使用arm汇编指令 实现for循环结构
int GetSum(int val) \/\/使用汇编求1+2+3+...+val的值{ int sum = 0; __asm__ __volatile__( "MOV R5 , %1\\n"\/\/val放入寄存器r5 "MOV R1 , #0\\n" \/\/sum = 0 "MOV R2 , #1\\n"\/\/i = 1 "LOOP:\\n" " ADD R1 , R1 ,R2\\n" \/\/sum = sum + i " ADD R2 , R2 ,#1\\n"...

arm程序中的软件延时程序的问题!
静态全局变量有以下特点: 该变量在全局数据区分配内存; 未经初始化的静态全局变量会被程序自动初始化为0(自动变量的值是随机的,除非它被显式初始化); 静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的; 静态变量都在全局数据区分配内存,包括后面将要提到的静态局部...

急求一个用51单片机编的可按键调时的数字时钟程序,数码管显示,C语言...
if (sec==armsec && min==armmin && hour==armhour){if (alarm)TR1=1;\/\/闹钟启用时,报警时间到,启动Timer1}}\/\/显示处理程序void pro_display(){unsigned char i;lcd_pos(0x00);for (i=0;i<=15;i++){lcd_wdat(dis_buf1[i]);}lcd_pos(0x40);for (i=0;i<=15;i++){lcd_wdat(dis_...

for(i=50000;i>0;i--);和for(i=0;i<50000;i++);在单片机延时程序中延 ...
应该说差别很微弱吧,从执行的时间上来说,for(i=50000;i>0;i--); 要比 for(i=0;i<50000;i++); 时间短些,不过这种影响是微乎其微的,如果for循环中套用for循环,那么时间准确度就有待验证了,不过话说回来,网上有很多稳定的ms级计数器。另外一种解决途径就是使用中断来实现,比较的精确。

谁能帮我设计个arm单片机的小程序啊
RA0=(nu&0x01); \/\/取最边沿数值 RB7=1; nu=nu>>1; }}void deng(int mk){ int i; for(i=0;i<8;i++) { RB7=0; \/\/时钟信号预先置零 RA0=(mk&0x01); \/\/取最边沿数值 RB7=1; mk=mk>>1; }}void niu0(){ int y0; kk=dengshuju&0x0f; if(RC2!=0) { uu=uu&0xfe; \/\/11...

ARM汇编指令实现寄存器高低位对称互换?
① 修改单独位的值,当然要用位运算了,例如一个32位变量“或”上0x0000 0001就能把最低位修改为1;“与”上(~0x0000 0001)就能把最低位修改为0。② 高低位对称互换,不计效率的话就16次循环,每次把对称的两个位交换。追求效率的话就查表。折中办法是开个16元素的表,每4位高低交换。

编写一段ARM程序,实现数据块复制
ClearPending(BIT_EINT0|BIT_EINT2|BIT_EINT8_23); \/\/ Enable EINT0,2 and the EINT8_23 INTMSK &= (~0x25); return; } int Key_Scan( void ) { int i; for(i = 0; i < 1000 ;i++) ; GPGDAT = (GPGDAT &(~((1<<6)|(1<<2))) | (1<<6) | (0<<2) ; \/\/GPG6,2 ...

写出以下C语言过程对应的MIPS汇编表示?
硬件平台是什么?pc上还是51上或者arm,mips?不 同硬件平台汇编不同,编译器对程序的处理也就不同。用汇编一般都是考虑到可以直接访问寄存器,速度有优势,但最大的缺点是不能跨平台,可移植性很差。

汇编语言编程实现一组数的大小排列 跪求啊 大神们 谢谢了
为(i = 0; I {G = G+ 1 B [我] =克;} 为(i = 0; I <C-1; i + +)为(J = C -1; J> I,J - )(A [J]> A [J-1]){T = A [J];A [J] = [J-1];A [J-1] = T;E = B [J];B [J] = B [J-1];B [j-1] = E;} 为(i = 0; <C...

arm的设计文件
在C编程语言中,循环为:int gcd (int i, int j){while (i != j) if (i > j) i -= j; else j -= i; return i;}在ARM 汇编语言中,循环为:loop CMP Ri, Rj ;设定条件为 NE(不等於) if (i != j) ; GT(大于) if (i > j), ; or LT(小于) if (i < j) SUBGT Ri, Ri, ...

相似回答