汇编指令与 C语言程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
调试命令脚本文件与实验A 相同。 3、实验C 1)参考以前实验的操作步骤建立一个新的工程,命名为c1; 2)参考C源程序,编辑输入源代码,保存文件为C1.c; 3)按照实验参考程序建立调试脚本文件DebugInRam.ini; 4)在Project workspace 工作区中右击target1->Source Group 1,在弹出菜单中选 择 “Add file to Group ‘Source’ ”,在随后弹出的文件选择对话框中,选择刚才建立的源文
mov r0, #y ; put y value into R0
ldr r1, [sp] ; read the data from stack,and put it into r1
add r0, r0, r1 ;R0=R0+R1
str r0, [sp]
stop
b stop ; end the code £¬cycling
件C1.c; 5)选择菜单项Project ->Build target 或快捷键F7,生成目标代码; 6)选择菜单项Debug ->Start/Stop Debug Session 或快捷键 Ctrl+F5,即可进入调 试模式。这里使用的是μVision3 IDE 中的软件仿真器;在Option For Target 对话框的 Debug 页中将Initialization 文本框的内容清空; 7)选择菜单项Debug ->run 或F5,即可运行代码; 8)在Output Windows 中的Command 输入栏中输入“Include DebugInRam.ini” 命令; 9)单步执行,通过memory、register、watch&call stack 等窗口分析判断结果,在watch 框中输入要观察变量I 和变量J 的值,并记录下来。特别注意观察变量I 的变化并记录下来; 10)结合实验内容和相关资料,学习和尝试一些调试命令,观察程序运行,通过实验;
新建工程后,要为工程选择CPU,在此选择SAMSUNG 的S3C44B0X。然后会弹出一个 对话框,问是否要添加启动代码。由于本实验是简单的汇编实验,因此不需要启动代码,选 择否。 3)建立源文件
点击菜单项 File - New,系统弹出一个新的文本编辑窗,按照实验参考程序编辑输入 源文件代码。编辑完后,保存文件asm1_a.s。 4)添加源文件
AREA text,CODE,READONLY
export Reset_Handler ; code start
ldr sp, =stack_top
mov r0, #x ; put x value into R0
str r0, [sp] ; save the value of R0 into stacks
单击工程管理窗口中的相应右键菜单命令,选择 Add Files to…,会弹出文件选择对话 框,在工程目录下选择刚才建立的源文件asm1_a.s。 5)工程配置
选择菜单项Project->Option for Target…,将弹出工程设置对话框,如图(1)所 示。Target 选项页的配置如图(1),Linker 选项页的配置如图2,Debug 选项页的配 置如图3。需要注意,在Debug 选项页内需要一个初始化文件:DebugINRam.ini。此.INI 文件用于设置生成的.AXF 文件下载到目标中的位置,以及调试前的寄存器、内存的初始化 等配置操作。它是由调试函数及调试命令组成调试命令脚本文件。
二、 实验步骤
1. 实验A 1) 新建工程
首先在\Keil\ARM\Examples\目录下建立文件夹命名为Asm1_a,运行μVision3 IDE 集成开发环境,选择菜单项Project – New…– μVision Project,系统弹出一个对话 框,输入相关内容。点击“保存”按钮,将创建一个新工程asm_1a.Uv2。 2) 为工程选择CPU
南昌航空大学实验报告
二 00 一四 年 五 月 十四 日
课程名称: 嵌入式系统设计及应用
实验名称:
班级:
姓名:
同组人:
指导教师评定:
汇编指令与 C 语言程序 签名:
一、 实验内容
1、 熟悉开发环境的使用并使用 LDR/STR,MOV 等指令访问寄存器或存储单元。 2、 使用 ADD/SUB/LSL/LSR/AND/ORR 等指令,完成基本数学/逻辑运算。 3、利用函数初始化栈指针,并使用 c 语言完成延时函数。
end
调试命令脚本DebugINRam.ini:
/*** <<< Use Configuration !disalbe! Wizard in Context Menu >>> ***/
/*Name: DebugINRam.ini*/
FUNC void Setup (void) { // <o> Program Entry Point, .AXF File download Address PC = 0x030000000; } map 0x00000000,0x00200000 read write exec map 0x30000000,0x34000000 read write exec Setup(); // Setup for Running //g, main
理解和掌握实验后,完成实验练习题。
2、实验B 实验B与上述步骤完全相同,只要把对应的asm1_a.s文件改成asm1_b.s以及工程名即可。
实验A汇编程序
; asm1_a.s
x EQU 45 ; x=45
y EQU 64 ; y=64/
stack_top EQU 0x30200000 ; define the top address for stacks export Reset_Handler
for(j = 0; j < 10; j++); } }
2. 调试脚本文件 //*** <<< Use Configuration !disalbe! Wizard in Context Menu >>> *** FUNC void Setup (void) { // <o> Program Entry Point PC =main;; } //LOAD debug_in_RAM\Project.axf INCREMENTAL // Download //map 0x000,0x200000 READ WRITE EXEC map 0x30000000,0x30200000 READ WRITE exec Setup(); // Setup for Running //g, main
/* NAME : C1.C */ void delay(int nTime);
main() {
int i = 5; for( ; ; ) {
delay(i); } } void delay(int nTime) { int i, j = 0; for(i = 0; i < nTime; i++) {
图1 基本配置—Targe
图2基本配置—Linker
图3 基本配置—Debug
6)生成目标代码
选择菜单项 Project - Build target 或快捷键F7,生成目标代码。在此过程中,若
有错误,则进行修改,直至无错误。若无错误,则可进行下一步的调试。
7)调试 选择菜单项 Debug - Start/Stop Debug Session 或快捷键 Ctrl+F5,即可进入调
实验B汇编程序
; asm1_b.s x EQU 45 ;/* x=45 */ y EQU 64 ;/* y=64 */ z EQU 87 ;/* z=87 */ stack_top EQU 0x30200000 ;/* define the top address for stacks*/ export Reset_Handler AREA text,CODE,READONLY Reset_Handler ; /* code start */ mov r0, #x ;/* put x value into R0 */ mov r0, r0, lsl #8 ;/* R0 = R0 << 8 */ mov r1, #y ;/* put y value into R1 */ add r2, r0, r1, lsr #1 ;/* R2 = (R1>>1) + R0 */ ldr sp, =stack_top str r2, [sp] mov r0, #z ;/* put z value into R0 */ and r0, r0, #0xFF ;/* get low 8 bit from R0 */ mov r1, #y ;/* put y value into R1 */ add r2, r0, r1, lsr #1 ;/* R2 = (R1>>1) + R0 */ ldr r0, [sp] ;/* put y value into R1 */ mov r1, #0x01 orr r0, r0, r1 mov r1, R2 ;/* put y value into R1 */ add r2, r0, r1, lsr #1 ;/* R2 = (R1>>1) + R0 */ stop b stop ;/* end the code £¬cycling*/ END
三、实验结果
r /o
四、实验分析
在将汇编代码输完之后,编译时总发现有错误,但经过和同学讨论与检查并没有发现 语法错误,最后通过 查找资料发现在写指令的时候不能够顶格书写,将这个错误更改之后, 虽然编译没有出错但是在单步运行的时候发现不能正确执行,通过 PC 指针的值我们找到的 错误的原因在于,在配置文件中的值与在 R/Obas 处设置的值是不一样的,导致程序入口 出现问题。改正这些之后程序便能够正确执行了,通过此次实验熟悉了开发环境的使用并使 用 LDR/STR,MOV 等指令访问寄存器或存储单元。也学会了使用 ADD/SUB/LSL/LSR/AND/ORR 等指令,完成基本数学/逻辑运算。还利用函数初始化栈指针,并使用 c 语言完成延时函数。
试模式。若没有目标硬件,可以用μVision 3 IDE 中的软件仿真器。
做如下调试工作:
Hale Waihona Puke Baidu
打开memory窗口,单步执行,观察地址0x8000~0x801f 的内容与地址 0xff0~0xfff的 内容;
单步执行,观察寄存器的变化;
结合实验内容和相关资料,观察程序运行,通过实验加深理解ARM指令的使用;
相关文档
最新文档