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

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

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代码

U表示unsigned long,“变量=0xffffU<<16”后,变量=0xffff0000;

volatile表示可变的,对于中端服务程序和主循环中均会读写访问的全局变量,应声明为volatile。

具体去我空间看

//

//功能:LPC2103的UART0演示

//内容:上位机PC以9600的波特率向LPC2103发送一个字符

// LPC2103再返回该字符

#include<lpc2103h>

#define Fosc 11059200 //晶振

#define Fcclk Fosc5 //系统频率

#define Fpclk Fcclk/4 //PCLK

#define UART_bps 9600 //波特率

#define u8 unsigned char

//以下是函数声明

void uart_ini(void);

u8 get_char(void);

void put_char(u8);

void put_string(u8);

int main()

{

u8 zifu;

uart_ini(); //UART初始化

put_string("Please input a char:"); //输出字符串

while(1)

{

zifu=get_char(); //接收一个字符

put_string("\nYou have sent:");

put_char(zifu); //发送该字符

}

}

//UART初始化

void uart_ini()

{

unsigned short Fdiv;

APBDIV=0; // Fpclk = Fcclk/4

PINSEL0=0x05; //选择P00和P01为TXD0和RXD0

U0LCR=0x80; //除数锁存访问位打开

Fdiv=(Fpclk/16)/UART_bps;//波特率bps=(Fpclk/16)/(U0DLM:U0DLL),计算(U0DLM:U0DLL)

U0DLM = Fdiv / 256; //U0DLM放除数高八位

U0DLL = Fdiv % 256; //U0DLL放除数低八位

U0LCR=0x03; //关闭除数锁存访问位(这时RBR,THR处于可寻址状态),并设定一个字符的位宽为8位

}

//接收一个字符

u8 get_char()

{

while((U0LSR&0x01)==0); //等待接收完成

return(U0RBR); //返回接收的字符

}

//发送一个字符

void put_char(u8 byte)

{

U0THR=byte; //发送一个字符

while((U0LSR&0x40)==0); //等待发送完毕

}

//发送字符串

void put_string(u8 p)

{

for(;p!='\0';p++) //如果不是结束符,就发送

put_char(p);

}

//

以上就是关于用ARM汇编代码实现以下C程序段 for(i=0;i<20;i++) x[i]=a[i]*b[i]全部的内容,包括:用ARM汇编代码实现以下C程序段 for(i=0;i<20;i++) x[i]=a[i]*b[i]、C语言在ARM编程中的问题、在ARM的基础上进行串口通信仿真,程序用C语言写。要用到串口助手。到底该怎么做啊求高手帮忙。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10213120.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-06
下一篇2023-05-06

发表评论

登录后才能评论

评论列表(0条)

    保存