实验2 顺序与分支汇编语言程序设计实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ARM技术原理与应用
实验报告
实验2 顺序与分支汇编语言程序设计实验
专业电子信息工程
班级14电信班
学生姓名陈定光
学号2014010243101
指导教师曹计昌
2017年4月19 日
实验2 顺序与分支汇编语言程序设计实验
1、实验目的
(1)掌握顺序结构汇编语言程序设计;
(2)掌握分支结构汇编语言程序设计;
(3)掌握AXD环境下顺序结构和分支结构汇编语言程序的运行、调试。
2、实验要求
1、实验必须在在ADS1.2环境下进行。
2、工程名、汇编语言源文件名按照下面规则命名:
工程名:pj+学号最后4位+其它字符
汇编语言源文件名:p+学号最后4位+其它字符+.s
例如:张维智同学学号最后4位是3134
因此,pj3134、pj3134a、pj31341等都是允许的工程名;而 p3134a.s、p3134b.s等都是允许的源文件名。
3、实验报告中需要说明实验中在ADS、AXD环境下进行的实际操作;
4、实验报告中应给出实际的实验操作、编写的源程序、及计算机的调试观察结果;
5、按照规定格式打印实验报告。
3、实验内容
1、编写程序p2xxxx1.s完成下面任务:
(1)将1、2、3、4、5、6、7、8依次传送给寄存器R1-R8;
分析:如上图显示,寄存器r1-r8分别是存放1-8
(2)用STMIA指令将R1-R8保存到刚好能够存储8个字数据ARY_A数组中。
分析:如上图显示,地址0x8058-0x8078分别存放1-8
(3)用STMIB指令将R1-R8保存到刚好能够存储8个字数据ARY_B数组中。
分析:如上图显示,地址0x8088-0x80A7分别存放1-8
(4)用STMDA指令将R1-R8保存到刚好能够存储8个字数据ARY_C数组中。
分析:如上图显示,地址0x8094-0x80B3分别存放1-8
(5)用STMDB指令将R1-R8保存到刚好能够存储8个字数据ARY_D数组中。
(6)用LDMIA指令将ARY_A数组中数据5、6、7、8传送到R1-R4寄存器。
分析:如上图图中的方框图的数据显示,r1=5,r2=5,r3=7,r4=8 (7)用LDMIB指令将ARY_A数组中数据1、2、3、4传送到R5-R8寄存器。
分析:如上图图中的方框图的数据显示,r5=1,r6=2,r7=3,r8=4
2、编写程序p2xxxx2.s完成下面任务:
(1)创建由10个字元素的满递减堆栈。并将SP指向栈底。
分析:如上图显示,寄存器r0-r9分别存放0-9一共10元素,同时地址0Xffffffd8-0xffffffff分别存放着0-9,SP指向栈底
(2)将1、2、3、4、5、6、7、8依次传送给寄存器R1-R8,再用STMFD指令将R1-R8寄存器压栈。观察堆栈数据和SP。
分析:如上图显示,寄存器r1-r8分别存放1-8
分析:用STMFD指令将R1-R8寄存器压栈,如上图显示,地址0xffffffe0-oxfffffff分别存放1-8,每个数字4位
(3)用LDMFD指令将栈中8个数据依次出栈并传送给R3-R10寄存器。
分析:如上图显示,寄存器r3-r10分别存放1-8
3、编写程序p2xxxx3.s完成下面任务:
(1)开放IRQ向量中断,N标志置1;并给出程序执行前后cpsr的值。执行之前:
执行后
(2)禁止IRQ向量中断,N标志清零;并给出程序执行前后cpsr的值。
执行之前
执行后
(3)开放快中断,C标志置1;并给出程序执行前后cpsr的值。执行之前
执行后
(4)禁止快中断,C标志清零;并给出程序执行前后cpsr的值。
执行之前
执行后
4、若两个条件均成立,则将两个数相加。
其C代码为:if((a!=10)&&(b!=20)) a+=b;
编写能够实现上述C代码的汇编语言源程序p2xxxx4.s,R0为a,R1为b。然后进行汇编、调试、并给出运行结果。
程序代码:AREA EX4,CODE,READONLY
ENTRY
CODE32
START
CMP R0,#10;R0比较10
CMPNE R1,#20;不等于20
ADDNE R0,R0,R1;R0=R0+R1
END
1、创建工程与源文件,写入程序代码进行编译、调试,显示代码正确
分析:设R0=1,设R1=3, 如上图显示,寄存器r0=1,r1=3
分析:设R0=1,设R1=3, 如上图显示,执行程序后,寄存器r0=4,r1=3
5、设有内存中有op1、op2两个数据。编程p2xxxx5.s完成下面任务:
(1)当op1>0时,做op1+op2,结果送R8寄存器;
(2)当op1=0时,做op1+op2<<2;结果送R9寄存器;
(3)当op1<0时,做op2-op1,结果送R10寄存器;
分别就op1=1、op2=2;op1=0、op2=2;op1=-1、op2=2;对所编写程序进行测试,记录实验结果。
程序代码:AREA EX5,CODE,READONLY
ENTRY
CODE32
START
MOV R0,#1;R0=1
MOV R1,#2;R1=2
MOV R3,#4
MOV R8,#0
MOV R9,#0
MOV R10,#0
CMP R0,#0;1与0做比较
BEQ LOOP_2;如果op1=0,跳转到LOOP_2
BGT LOOP_3;如果op1>0;跳转到LOOP_3
SUB R10,R1,R0;否则op1<0,R10=R1-R0
B end0;结束跳转到结束
LOOP_2
ADD R0,R0,R1;R0=R0+R1
MUL R9,R0,R3;R9=R0*4
B end0;结束跳转到结束
LOOP_3
ADD R8,R0,R1;R8=R0+R1
B end0;结束跳转到结束
end0
NOP
END
1、创建工程与源文件后,进行编译、调式