实验报告
题目2-1:调试以下工程,记录调试过程,理解ARM汇编调用C的
参数传递及语法规则。
1.新建立一个工程;
2.加入实验提供的示例源文件 EXP2_ARM.S和EXP2_C.c文件;
3.修改工程的Option,设置目标板的ROM区域为0x0~0x4000000(共64MB),RAM区域为00共64MB),并在debug选项中,加入调试脚本文件DebugInRAM . ini;
4.修改工程Option->Linker选项,在ScatterFile一项中,加入实验给定的文件ARM_C . sct;
编译工程,通过后,单步调试,观察寄存器的变化,并根据调试过程,完成下表的填写。
序号
反汇编指令
CPU 寄存器的值(十六进制表示)
R0
R1
R2
R3
R4
R12
SP
LR
PC
1
2
...
程序源代码:
源文件名称:test1_ARM.s
num EQU 0x0
IMPORT add
AREA RESET,code, readonly
ENTRY
Startup
mov r0,#1
mov r1,#2
mov r2,#3
mov r3,#4
bl add
ldr r1,=sum
str r0,[r1]
stop
b stop
AREA dt,data,readwrite
sum dcd 0;
END
源文件名称:test1_C.c
#include
extern int add(int a, int b, int c,int d)
{
int sum;
sum = a+b+c+d;
return(sum);
}
调用过程及其结果:
序号
反汇编指令
CPU 寄存器的值(十六进制表示)
R0
R1
R2
R3
R4
R12
SP
LR
PC
1
MOV
0000000002
MOV
0000000003
MOV
000000000x0000000C
4
BL
0000000005
STR
0000000006
MOV
0000000xFFFFFFFC
007
STR
00000x0000000
00xFFFFFFFC
00x0000002C
8
ADD
0000000xFFFFFFFC
009
ADD
0000000xFFFFFFFC
0010
LDR
0x0000000A
000000xFFFFFFFC
0011
BX
0x0000000A
000000x00