DSP实验1 关于C与汇编的编程.docx
- 文档编号:4960248
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:10
- 大小:245KB
DSP实验1 关于C与汇编的编程.docx
《DSP实验1 关于C与汇编的编程.docx》由会员分享,可在线阅读,更多相关《DSP实验1 关于C与汇编的编程.docx(10页珍藏版)》请在冰豆网上搜索。
DSP实验1关于C与汇编的编程
北京邮电大学实验报告
题目:
中断的使用
班级:
2008211128
学号:
08210766
姓名:
彭栋(15)
实验一关于C与汇编的编程
一、实验要求
1.利用C语言调用汇编子程序
2.其中5个输入参数和3个返回结果的汇编子程序调用
a)输入整数a,b,c,d,e,
b)请计算a+b+c,a+c+d+e,a-b的值
c)讨论a-b后算术状态标志寄存器的状态(ASTAT)
d)请讨论输入整数数组e[3],f[3],参数如何传递的
二、实验分析
1.整体设计
a,b,c,d,e五个整数的输入,两个整数数组的初始化,及最后的结果显示都通过C语言实现。
设计4个子程序,分别实现计算a+b+c,a+c+d+e,a-b的值,及三元数组对应元素相减的功能,并能对要求讨论的值以及状态进行明确的表示,以完成实验要求,这四个子程序由汇编语言实现。
2.详细分析
a.子程序一add1
externint*add1(inta,intb,intc)
此函数参数为输入的整数a,b,c。
通过分步调试,可观察到,a,b,c三个参数分别传递给了DataRegister中的R0,R1和R2,利用R3坐中间变量,计算三者相加的结果并存结果于R3。
将PRegister中的P0清零,将计算结果存储于P0中存储的地址,并将P0的值(即计算出的结果存储的的地址)存入R0作为结果传回。
b.子程序二add2
此函数参数为输入的整数a,c,d,e。
通过分步调试,可观察到,a,c,d,e四个参数分别传递给了DataRegister中的R0,R1,R2和R3,利用R0作中间变量,依次将四者相加,计算结果于R0。
函数返回值的过程与子函数一一致,在此不作赘述。
c.子程序三add3
externint*add3(inta,intb);
此函数参数为输入的整数a,b。
通过分步调试,可观察到,a,b两个参数分别传递给了DataRegister中的R0,R1,利用R2作中间变量,计算两者相减的结果并存结果于R2。
将P0清零,将R2的值(即计算结果)放到当前P0所指向的地址,利用R2作中间变量,将算术寄存器的状态值赋给当前P0,函数返回值的过程与子函数一一致,在此不作赘述。
d.子程序四add4
此函数参数为输入的两个三元数组名,数组首地址。
通过分步调试,可观察到,两个参数(数组首地址)分别传递给了DataRegister中的R0,R1,将R0,R1的值分别存到指针寄存器P0,P1,即P0,P1分别指向了两个三元数组的首元素,利用数组元素地址的连续性,分别将e[3]的三个元素存到R0,R1,R2,f[3]的三个元素存到R3,R4,R5,并各自相减,并将结果存在R0,R1,R2,将P0清零,将R0到R2的值(即计算结果)依次放到当前P0所指向的地址,且P0依次指向下一个相邻位置。
最后返回R2的地址,函数返回值的过程与子函数一一致,在此不作赘述。
上述函数运行结果
3.问题讨论
a.讨论a-b后算术状态标志寄存器的状态(ASTAT)
为方便讨论,分别用十进制和二进制输出ASTAT的值
这里根据a,b大小不同做三组测验,下面用截图表示三种情况的计算结果和状态寄存器的值
i.a>b
ii.a=b
iii.a
讨论ASTAT的值
可观察到三组结果中只有AZ,AN,AC三个状态不同,查阅帮助了解到AZ标志是否为0,AN标志是否为负数,AC标志是否产生进位
b.参数传递讨论
i.函数参数为多个时(超过4个)
为方便讨论此内容,设子函数add5的参数设为5个。
通过观察子函数add1,add3参数传递可知,当函数参数较少时,将它们依次传给R0,R1,R2…。
观察add5(五个参数)第一、第二和第三个参数依次传给了R0,R1,R2,其余的参数依次被压入堆栈,最后一个入栈的参数地址为FP-4,并且见最后一个参数的值传给R3。
同样的输入,结果为
ii.输入整数数组e[3],f[3],参数如何传递
若函数参数为数组名,即数组首地址。
通过分步调试可观察到,参数(数组首地址)依次传递给了R0,R1…,及传递的不是数组元素的值而是数组的首地址。
三、实验程序
1..c文件
2.asm文件
四、实验心得
这是我第一次接触DSP实验,通过课上老师的讲解和对例程的学习,让我对使用的以及编程思想有了初步的了解。
实验的要求比较简单,实现起来相对比较容易。
但在实验过程中也遇到了一些问题,总结如下:
1.子函数与asm文件不能重名
2.汇编程序中不能在运算符两边同时出现两个内存单元。
在子程序add4中为计算两个数组对应元素相减的结果,最开始写的语句是R3=[P0++]-[P1++]);编译报错,检查后发现[P0++]和[P1++]均是内存单元不能同时传到ALU中,应该加以改正。
3.多个参数的传递
开始在分步时,观察到最后一个参数传给了R3,便认为它并没有被压入堆栈,因此在这里花了很长时间去找被压进栈的参数,才发现这个误解。
4.在编写程序特别是汇编程序时思路要清晰,要随时观察寄存器中数值的变化,利用好各类寄存器的观察窗口。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DSP实验1 关于C与汇编的编程 DSP 实验 关于 汇编 编程