实验二 C语言与汇编语言混合编程
一、 实验目的
1.掌握ARM嵌入式C语言编程基本方法。
2. 掌握嵌入式汇编(Inline Assembly)编程规则和方法。
3.掌握汇编语言程序和C语言程序之间相互调用规则和编程方法。
二、实验步骤
1. 创建工作空间并且添加工程。
2.编写程序并且利用软件仿真查看结果。
三、实验内容
1. 利用汇编语言编写初始化程序,实现管理模式下堆栈指针初始化,并最终跳转到C语言程序开始c语言中文网汇编语言Main函数处执行。
2. 利用汇编语言编写子程序实现字符串拷贝功能,利用C语言在Main函数中定义字符串“Hello World!”定义并调用该子程序完成字符串拷贝。
3. 利用汇编语言编写子程序完成冒泡法排序,利用C语言在Main函数中定义字符串“Hello World!”定义并调用该子程序将数组中字符按照ASCII码值由小到大重新排序。
思考:
1. GNU编译环境下混合编程与ADS环境下有些什么区别?
.global _start
.global str_cpy
.text
_start:
BIC R0,R0,#MODEMASK @将CPSR中的模式位
ORR R1,R0,#FIQMODE @设置模式位为FIQ模式
MSR CPSR_c, R1 @切换处理器到FIQ模式
LDR SP,=FIQStack @设置该模式下的堆栈
BIC R0,R0,#MODEMASK @将CPSR中的模式位
ORR R1,R0,#IRQMODE @设置模式位为IRQ
MSR CPSR_c, R1 @切换处理器到IRQ模式
LDR SP,=IRQStack @设置该模式下的堆栈
BIC R0,R0,#MODEMASK @将CPSR中的模式位
ORR R1,R0,#USRMODE @设置模式位为IRQ
MSR CPSR_c, R1 @切换处理器到IRQ模式
LDR SP,=IRQStack @设置该模式下的堆栈
BL Main
B .
.equ FIQMODE,0x11
.equ IRQMODE,0x12
.equ SVCMODE,0x13
.equ USRMODE,0x10
.equ SVCStack,0x03FE0100
.equ FIQStack,0x03FE0200
.equ IRQStack,0x03FE0300
.equ MODEMASK,0x1F
str_cpy:
LDRB R2,[R0],#1
STRB R2,[R1],#1
CMP R2,#0
BNE str_cpy
MOV PC,R14
.end
extern void str_cpy(char *x,char *y);
int Main()
{
char *a="Hello World!\n";
char b[13];
str_cpy(a,b);
return 0;
}
.global _start
.global str_cpy
.global line
.text
_start:
BIC R0,R0,#MODEMASK @将CPSR中的模式位
ORR R1,R0,#FIQMODE @设置模式位为FIQ模式
MSR CPSR_c, R1 @切换处理器到FIQ模式
LDR SP,=FIQStack @设置该模式下的堆栈
BIC R0,R0,#MODEMASK @将CPSR中的模式位
ORR R1,R0,#IRQMODE @设置模式位为IRQ
MSR CPSR_c, R1 @切换处理器到IRQ模式
LDR SP,=IRQStack @设置该模式下的堆栈
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论