求一汇编小程序!用ARM汇编语言完成一个C语言嵌入式汇编方式实现字符串(数组)拷贝的功能

求一汇编小程序!用ARM汇编语言完成一个C语言嵌入式汇编方式实现字符串(数组)拷贝的功能,第1张

#include< reg51h>

#include< stdioh>

#include< stringh>

#define INBUF_LEN 4 //数据长度

unsigned char inbuf1[INBUF_LEN];

unsigned char checksum,count3 , flag,temp,ch;

bit read_flag=0;

sbit cp=P1^1;

sbit DIR=P1^2;

int i;

unsigned int xdata RAMDATA; /定义RAM地址指针/

unsigned char a[6] ={0x11,0x22,0x33,0x44,0x55,0x66} ;

void init_serialcomm(void)

{

SCON=0x50; //在110592MHz下,设置串行口波特率为9600,方式1,并允许接收

PCON=0x00;

ES=1;

TMOD=0x21; //定时器工作于方式2,自动装载方式

TH0=(65536-1000)%256;

TL0=(65536-1000)/256;

TL1=0xfd;

TH1=0xfd;

ET0=1;

TR0=1;

TR1=1;

// TI=0;

EA=1;

// TI=1;

RAMDATA=0x1F45;

}

void serial () interrupt 4 using 3

{

if(RI)

{ RI=0;

ch=SBUF;

TI=1; //置SBUF空

switch(ch)

{

case 0x01 :printf("A"); TI=0;break;

case 0x02 :printf("B"); TI=0;break;

case 0x03 :printf("C"); TI=0;break;

case 0x04 :printf("D"); TI=0;break;

default :printf("fg"); TI=0;break;

}

}

}

//向串口发送一个字符

void timer0() interrupt 1 using 3{

// char i;

flag++;

TH0=0x00;

TL0=0x00;

if(flag==10)

{// cp=!cp;

// for(i=0;i<6;i++)

P2=0x25;

TI=1;

temp=RAMDATA;

printf("%c",temp);

TI=0;

// RAMDATA--;

flag=0;

}

}

//主程序

main()

{

init_serialcomm(); //初始化串口

//向6264中送数据

{

RAMDATA=0x33;

}

while(1)

{

RAMDATA=0x33;;

}

}

这得看你用的哪家芯片,ARM7只是一个内核名称,用其做内核的单片机有很多。开发ARM单片机(你说的软件编程,其实到ARM芯片这里不那么简单了)用KEIL的比较多,并且很多芯片在这个环境下可以直接下载程序到单片机。

一种方法是在编译器中加上-thumb选项,在编译器中进行设置好了之后编译下,采用的指令集就是Thumb指令集了。二是可以直接在ARM汇编里实现。具体的切换是通过Branch Exchange-即BX 指令来实现的。指令格式为:Thumb状态 BX RnARM状态 BX<condition> Rn其中Rn可以是寄存器R0-R15中的任意一个。指令可以通过将寄存器Rn的内容拷贝到程序计数器PC来完成在4Gbyte地址空间中的绝对跳转,而状态切换是由寄存器Rn的最低位来指定的,如果 *** 作数寄存器的状态位Bit0=0,则进入ARM状态,如果Bit0=1,则进入Thumb状态,以下是一个用例:CODE32 //表示以下使用ARM状态下的代码,32位对齐LDR R0, =Into_Thumb+1 //将Into_Thumb地址值加1,再赋给R0//产生跳转地址并且设置最低位BX R0 //地址值位0为1,将进入THUMB状态//Branch Exchange 进入Thumb状态… CODE16 //Thumb状态下的子函数,16位对齐…LDR R3, =Back_to_ARM //将Back_to_ARM 地址值赋给R0//产生字对齐的跳转地址,最低位被清除,即bit0为0BX R3//Branch Exchange 返回到ARM状态,此时运行在ARM指令集环境里 CODE32 //ARM状态下的子函数Bach_to_ARM

只给了一部分,我就给出这一部分的理解。

LedDBuffer,是个存放十六位二进制数的地址,从第八位开始,决定使用哪个数码管,使用哪对应的那个位就清0。第0到6是要显示的数据,第7位是否显示小数点。

ARM和单片机有很大的区别,单片机基本上就是通过引脚来控制外设,而ARM不一样,一般是通过寄存器来控制,具体最终怎么控制,看你电路图我才知道。

以上就是关于求一汇编小程序!用ARM汇编语言完成一个C语言嵌入式汇编方式实现字符串(数组)拷贝的功能全部的内容,包括:求一汇编小程序!用ARM汇编语言完成一个C语言嵌入式汇编方式实现字符串(数组)拷贝的功能、ARM程序语言该用什么开发软件编写呢(arm芯片用什么编程语言)、ARM/Thumb指令集的汇编程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/zz/10109709.html

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

发表评论

登录后才能评论

评论列表(0条)

保存