![用ARM汇编代码实现以下C程序段 for(i=0;i<20;i++) x[i]=a[i]*b[i],第1张 用ARM汇编代码实现以下C程序段 for(i=0;i<20;i++) x[i]=a[i]*b[i],第1张](/aiimages/%E7%94%A8ARM%E6%B1%87%E7%BC%96%E4%BB%A3%E7%A0%81%E5%AE%9E%E7%8E%B0%E4%BB%A5%E4%B8%8BC%E7%A8%8B%E5%BA%8F%E6%AE%B5+for%28i%3D0%3Bi%26amp%3Blt%3B20%3Bi%2B%2B%29+x%5Bi%5D%3Da%5Bi%5D%2Ab%5Bi%5D.png)
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语言写。要用到串口助手。到底该怎么做啊求高手帮忙。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)