汇编asm程序和c语言hes,编写一个以汇编(ASM)语言为基础的DSP程序

实验3 :编写一个以汇编(ASM)语言为基础的DSP程序

一. 实验目的

1.学习用汇编语言编制程序;了解汇编语言程序与C语言程序的区别和在设置上的不同。

2.了解TMS320C28x汇编语言程序结果和一些简单的汇编语句用法。

3.学习在CCS环境中调试汇编代码。

二. 实验原理

1. 汇编语言程序

汇编语言程序除了程序中必须使用汇编语句之外,其编译选项的设置与C语言编制的

程序也稍有不同。其区别为:

(1)汇编语言程序在执行时直接从用户指定入口开始,常见的入口标号为“start”,而C语言

程序在执行时,先要调用C标准库中的初始化程序(入口标号为“_c_init00”),完成设置

之后,才转入用户的主程序main()运行。

(2)由于CCS的代码链接器默认支持C语言,在编制汇编语言程序时,需要设置链接参数,

选择非自动初始化,注明汇编程序的入口地址。

2.程序设计要求

程序框图:

61c523f17893f7a49324ce9a7b5b3c2e.png

三. 实验设备

PC兼容机一台,操作系统为Windows2000(或Windows98,WindowsXP,以下默认为

Windows2000),安装Code Composer Studio 2.2软件。

四.实验内容与步骤

1.实验准备

设置软件仿真模式,参看:第一部分、四、1。

2.建立新的工程文件

(1)双击桌面上图标,

启动Code Composer Studio 2.21。

(2)进行以下设置:

016bbf5c71d0bac348753e9516935999.png

图3-2 设置工程文件

4.编辑输入源程序

(1)汇编语言程序

-

图3-3 新建源文件

先新建源程序窗口:

-输入源程序:

.global start

start:

MOV @AR1,#9000 ;给ar1寄存器赋值

LOOP:

ADDB SP,#3 ;此时sp指针为403h地址

MOV *-SP[1],#10 ;把立即数10 放到402地址上

MOV *-SP[2],#1 ;把立即数1放到401地址上

MOV AL,*-SP[2] ;把401 地址上数据读出放到AL寄存器中

ADD AL,*-SP[1] ;把401 和402地址中数据做加法运算,把结果放到AL寄存

器中

MOV *-SP[3],AL ;把AL中值放到400h地址中

nop ;空指令

nop

SUBB SP,#3 ;设置sp指针为400h地址

BANZ LOOP,AR1-- ;有条件跳转,只要ar1中的值不为0

.end

-保存源程序为TASM.asm。

(2)连接命令文件

-如同第(1)步操作,建立空的源程序窗口。

-输入连接命令文件内容:

-stack 400h

-heap 100

MEMORY

{

PAGE 0 : PROG(R) : origin = 0x80000, length = 0x10000

PAGE 0 : BOOT(R) : origin = 0x3FF000, length = 0xFC0

PAGE 0 : RESET(R) : origin = 0x3FFFC0, length = 0x2

PAGE 0 : VECTORS(R) : origin = 0x3FFFC2, length = 0x3E

PAGE 1 : M0RAM(RW) : origin = 0x000000, length = 0x400

PAGE 1 : M1RAM(RW) : origin = 0x000400, length = 0x400

PAGE 1 : L0L1RAM(RW) : origin = 0x008000, length = 0x2000

PAGE 1 : H0RAM(RW) : origin = 0x3F8000, length = 0x2000

}

SECTIONS

{

/* 22-bit program sections */

.reset : > RESET, PAGE = 0

vectors : > VECTORS, PAGE = 0

.pinit : > PROG, PAGE = 0

.cinit : > PROG, PAGE = 0

.text : > PROG, PAGE = 0

/* 16-Bit data sections */

.const : > L0L1RAM, PAGE = 1

.bss : > L0L1RAM, PAGE = 1

.stack : > M1RAM, PAGE = 1

.sysmem : > M0RAM, PAGE = 1

/* 32-bit data sections */

.ebss : > H0RAM, PAGE = 1

.econst : > H0RAM, PAGE = 1

.esysmem : > H0RAM, PAGE = 1

}

-将文件存为C:\ICETEK-F2812-A-EDUlab\DSP281x_examples\lab0103-Asm\TASM.cmd

(3)将上述编译的源程序加入工程TASM.pjt。

5.编译源文件、下载可执行程序

(1)选择菜单Project->Rebuild All。

(2)执行FileàLoad Program,在随后打开的对话框中选择刚刚建立的

C:\ICETEK-F2812-A-EDUlab\DSP281x_examples\lab0103-Asm\debug\TASM.out 文件。完成

后,系统自动打开TASM.asm源程序窗口,并在其中指示程序的入口地址为标号“start”

后的语句。

6.打开观察窗口

(1)选择菜单View->Disassembly。注意程序运行指针停留的位置。

(2)开启CPU寄存器观察窗口:单击菜单View->Registers-> core。看PC指针取值与当前程

序运行地址对应。此处为0x80000。

(3)单击菜单View->Registers->Pseudo。看AL寄存器,此时应为0。如果AL寄存器的值不

为0,请点击Debug->Reset Cpu, 对2812 芯片进行复位。

(4)开启内存观察窗口:

选择“View”菜单中“Memory…”项,在“Memroy Window Options”窗口中的“Adress”

项中输入0x400,单击“OK”完成设置。

7.观察程序运行结果

(1)单步运行1次(按F10 快捷键即可),在观察窗中观察到AR1 寄存器被赋值0x9000。

(2)再单步运行3 次,将看到内存窗口中0x402 被赋值0x10,0x401地址被赋值0x1。

(3)再单步运行3 次,可观察0x400 地址中的值变为0xb,此数据就是把0x402 和0x401 地址

中数据相加得到的。

可以修改下面两句语句的立即数值,重新编译,然后单步运行观察结果。

MOV *-SP[1],#10 ;把立即数10 放到402 地址上

MOV *-SP[2],#1 ;把立即数1放到401 地址上

8.对照观察map文件和cmd文件的内容

(1)选择菜单File->Open…,将找到

C:\ICETEK-F2812-A-EDUlab\DSP281x_examples\lab0103-Asm\Debug目录,将文件类型改

为“Memory Map Files”,选择TASM.map文件、打开。

(2)打开TASM.cmd文件。

(3)程序的入口地址:map文件中“ENTRY POINT SYMBOL”中说明了程序入口地址(start)。

(4)内存使用情况:

-map文件中“MEMORY CONFIGURATION”标明了程序占用RAM 的使用情况,共占用

fH 个存储单元。比较一下,这比用C编制的程序占用的要小得多。

-观察map文件中的“SECTION ALLOCATION MAP”段,可以看出TASM.obj的入口地

址为80000H,这也是程序的入口地址。

9.退出CCS

五.预习要求

1.熟悉汇编语言,了解常用的汇编语言程序设计方法。

2.了解DSP内存的分配情况。

六.注意事项

1.在输入汇编语言源程序时,除了标号以外的程序行必须以一个空格或退格字符开始。

2.由于本实验的主程序为汇编语言,所以要把它设置为汇编模式才能正常工作。

七.思考题

修改程序完成0f000h+0e000h的计算。

八.实验报告要求

1.汇编语言程序从指定位置开始运行,但汇编程序需要对运行环境的初始化工作。

2.实验中的程序有堆栈操作,所以初始化堆栈指针。

3.编译后,各寄存器和内存窗口的变化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值