当前位置:文档之家› DSP第二次实验报告

DSP第二次实验报告

DSP第二次实验报告
DSP第二次实验报告

DSP实验报告(第二次实验)

实验四、正弦信号发生器

验四、正弦信号发生器

一、实验目的

1. 掌握利用DSP产生正弦信号的原理

2. 熟悉子程序调用的程序结构以及堆栈的使用

3.掌握CCS的图形输出操作

二、实验设备

1. 集成开发环境Code Composer Studio(简称CCS)

2. 实验代码Sin.s54、Lab.cmd和Lab.gel

三、实验内容

1. 阅读理解多项式逼近正弦的文档

2. 阅读和理解Sin.s54

3. 调试正弦波发生器

4. 加入断点,并选取图形观测,利用动画及时更新

5. 试利用迭代的方法来实现正弦信号发生器

四、实验结果和提示

1.

2345sin()= 3.140625 + 0.02026367 - 5.325196 + 0.5446778 + 1.800293x x x x x x ,x 为第一象限内的弧度值。因为sin()sin(),sin()sin()x x x x π-=-=-,所以只需将第二,三,四象限内的弧度值转换到第一象限即可计算出相应的正弦函数值。由于有限精度,规定弧度值从~ππ-,其中π=0x7FFF ,π/2=0x4000,π-=0x8000。利用级数展开产生正弦波,必须在调用计算子程序之前备份好累加器A 中的当前弧度值,以便计算结束后实现x 增量。正弦波的频率可以通过增幅的大小来进行控制,如果假定程序循环一次为一个时间单位,则正弦波的周期为65536/步长,频率为周期倒数。x 自动增长时要注意当x 超过π后必须调整到~ππ-的范围内才能调用计算子程序,即若,2x x x ππ>=-则。

2. 需要使用临时数据时,必须用frame 语句留出所需空间,使用结束后要将堆栈指针还原以防堆栈内存泄漏。要注意的是frame 的下一条指令不能使用直接寻址。

3. 注意事项:利用累加器写乘法寄存器T (stlm )之后的下一条指令不能使用T ;条件转移指令xc 在指令访问阶段判断条件,该条件必须在先于xc 指令的2个指令之前产生;条件转移指令bc 是在指令执行阶段判断条件,不存在这方面的问题。具体细节请参见《数字信号处理系统的应用和设计》3.6节和

4.5节。 4. 图形观测时选择菜单View->Graph->Time/Frequency ,然后设置如下图:

确定并设置好断点后(断点位置要设置对,几个地方都可以,可多尝试几次) 我自己设置的断点如图所示:

使用Debug->Animate就可以观察到动画输出的结果如图:

从图中可以观察到正弦波的周期。

使用Debug->Run 就可以观察动画输出的结果如下图所示:

从两种运行方式可以看出:用Animate 方式是动态动画输出,而用Run 方式是单步运行,动画输出不连续。

5.

{[(1)]}{[(1)]}2[(1)]()

sin n T T sin n T T sin n T cos T ωθωωθωωθω-+++-+-=-+?得

到正

弦信

号迭

公式:

()2(

)[(s i n n

T c o s

T s i n

n

ωθω

ω

θωθ+=?-+--+,

因为T ω为常数所以2()cos T ω为常数,则利用此公式迭代计算每次只需一次乘法和一次加法。

6. 尝试不用断点,而用探针Probe Point 的方式显示并观察图形。同样需要

比较两种运行方式在探针形式下有无区别。设置探针如下:

在Animate 方式下图形输出如下图所示:

在Run方式下:

从动画输出结果看,设置探针在两种方式下没有什么区别,都是动态运行。7. 在断点及动画运行方式实现正弦波显示的情况下,查找到存储器中对应存储

正弦波数据实时更新的数据单元。

五、实验心得

通过此次实验我掌握利用DSP产生正弦信号的原理,熟悉子程序调用的程序结构以及堆栈的使用,掌握CCS的图形输出操作,本次实验内容有阅读和理解Sin.s54;调试正弦波发生器;加入断点,并选取图形观测,利用动画及时更新;对比前两次实验,难度有所增加,但是在老师和助教的精心指导下,顺利完成实验,几次实验之后,我认识到实验之前预习的必要性,所以以后的实验中,我会争取做到每一次实验都提前预习。

附录:实验程序

;****************************************************************************** ; SJTU DSP Tech. Center

; Copyright (c) 2003 SJTU DSP Tech. Center. All Rights Reserved.

;

; Description:

; TMS320C54x Program for Students Experiment

;

; History:

; Date Authors Changes

; 2003/08/01 Fu Xuan Created.

;******************************************************************************

STACK_ADDR .set 0x0500

STEP .set 0x0900 ;delta x (must be positive), the more the higher frequency

;T=65536/STEP, f=1/T

.bss sin_out, 1

.mmregs

.global main

.text

main:

stm #STACK_ADDR, SP

stm #0x00A8, PMST ;IPTR=0x0080

stm #0x0000, SWWSR ;software wait status register

sub A

ssbx CPL ;direct address using SP

ssbx FRCT ;fraction mode

ssbx OVM ;overflow mode

ssbx SXM ;sign extension

stm #sin_out, AR6

sin_loop:

pshm AG ;save current x ;ddian OK

pshm AH ;ddian OK

pshm AL ;ddian OK

call calculate_sin ;-pi <= x <= pi ;ddian OK

sth A, *AR6 ;store sin(x), add probe point ;ddian OK

popm AL ;ddian OK

popm AH ;ddian OK

popm AG ;ddian OK

add #STEP, A ;add delta ;ddian OK

sub #0x7fff, A, B ;test if x>pi, B=A-pi ;ddian OK

bc normal_increase, BLT;ddian OK

ld #0x8000, A ;A=-pi

add B, A ;A=B+(-pi)=x - 2*pi

normal_increase:

b sin_loop ;ddian OK

dead_loop:

nop

nop

nop

nop

b dead_loop

;****************************************************************************** sign .set 0 ;local variable

calculate_sin:

frame -1 ;allocate sign

nop ;no direct addressing next frame

st #0, @sign ;decide sign, 0 for 1st and 2nd quadrant, 1 for 3rd and 4th quadrant

xc 2, ALT

st #1, @sign

abs A ;change to 1st and 2nd quadrant

sub #0x4000, A, B ;test for 1st quadrant

bc first_quadrant, BLEQ;if not change to 1st quadrant

sub #0x7fff, A ;As sin(pi-x)=sinx, let x=pi-x

neg A

first_quadrant:

stm #coef, AR2

stlm A, T ;T=x

ld *AR2+, 16, A ;AH=C5

ld *AR2+, 16, B ;BH=C4

rpt #5-1 ;AH=C5*x^5+C4*x^4+C3*x^3+C2*x^2+C1*x+0

poly *AR2+

ld @sign, B ;pick out sign

sfta A, 3 ;make Q15 format

nop ;nop for B condition test by xc

xc 1, BNEQ ;test sign

neg A ;sin(-x)=-sinx

frame 1

ret

;****************************************************************************** .sect "vectors"

int_RESET:

b main

nop

nop

.space 124*16

;sin(x)=0 + 3.140625x + 0.02026367x^2 - 5.325196x^3 + 0.5446778x^4 + 1.800293x^5 .data

coef: ;As the max value is -5.325196, so Q12 is used .word 0x1cce ;1.800293 * 4096

.word 0x08b7 ;0.5446778 * 4096

.word 0xaacc ;-5.325196 * 4096

.word 0x0053 ;0.02026367 * 4096

.word 0x3240 ;3.140625 * 4096

.word 0x0000 ;0

.end

;end of Sin.s54

北京理工大学汇编实验报告3

北京理工大学汇编实验报告3

本科实验报告实验名称:实验三字符串操作实验 课程名称: 课程设计Ⅰ(CPU与汇编)(实 验)实验时间: 第5-10周周五 下午 任课教师:聂青实验地点:10-102 实验教师:苏京霞 实验类型:?原理验证□综合设计□自主创新 学生姓名:罗逸雨 学号/班级:1120141208 05211401 组号:3 学院:信息与电子学院同组搭档: 专业:通信工程成绩:

CX 中值减 1,当 CX 中值减至 0 时,停止重复执行,继续执行下一条指令。当REP无条件重复前缀,重复串操作直到计数寄存器的内容 CX 为0为止。经常与REP 配合工作的字符串处理指令有MOVS、STOS和LODS。 当REPE/REPZ判断计数寄存器的内容 CX 是否为0或ZF=0(即比较的两个操作数不等),只要满足一个则重复执行结束,否则继续执行。可以与 REPE/REPZ 配合工作的串指令有CMPS和SCAS。 当REPNE/REPNZ判断计数寄存器的内容是否为0或ZF=1(即比较的两个操作数相等),只要满足一个则重复执行结束,否则继续执行。可以与 REPE/REPZ 配合工作的串指令有CMPS和SCAS。 3)字符串操作指令 lodsb、lodsw:把DS:SI指向的存储单元中的数据装入AL或AX,然后根据 DF 标志增减 SI; stosb、stosw:把AL或AX中的数据装入ES:DI指向的存储单元,然后根据 DF 标志增减 DI; movsb、movsw:把 DS:SI 指向的存储单元中的数据装入ES:DI指向的存储单元中,然后根据 DF标志分别增减SI和DI; scasb、scasw:把AL或AX 中的数据与ES:DI 指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI; cmpsb、cmpsw:把DS:SI 指向的存储单元中的数据与 ES:DI 指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI; rep:重复其后的串操作指令。重复前先判断 CX 是否为0,为0就结束重复,否则CX减1,重复其后的串操作指令。主要用在MOVS和STOS前。一般不用在 LODS 前。 上述指令涉及的寄存器:段寄存器DS和ES、变址寄存器SI和DI、累加器 AX、计数器CX。 涉及的标志位:DF、AF、CF、OF、PF、SF、ZF。 三、实验步骤 1) 编写程序,比较两个字符串BUF1和BUF2所含的字符是否相同,相同则AL 返回0,不同AL返回1,字符串长度要求自动获取,要求用字符串处理方法。提示:输入两个字符串之后,将串操作所必须的寄存器等参数设置好,然后使用串操作指令进行从头到尾的比较,两个字符串相等的条件是串长度相等且对应的字符相同。 2) 编写程序,设有一字符串存放在以BUF为首址的数据区中,其最后一字符‘$’作为结束标志,计算该字符串的长度并输出。提示:从串的第一个字符开始统计,直到遇到定义的字符串结束符为止,看看在这个过程中总共有多少个字符,

matlab第一次实验报告

Matlab第一次实验报告 2012029010010 尹康 1. 编程实现以下数列的图像,用户能输入不同的初始值以及系数。并以x,y为坐标显示图像 x(n+1) = a*x(n)-b*(y(n)-x(n)^2); y(n+1) = b*x(n)+a*(y(n)-x(n)^2) 程序代码: n=input('input the number of pionts:'); a=input('input a:'); b=input('input b:'); x=[]; y=[]; x(1)=input('input x1:'); y(1)=input('input y1:'); %输入点数、初始值以及系数for i=2:n x(i)=a*x(i-1)-b*(y(i-1)-x(i-1)^2); y(i)=a*x(i-1)+b*(y(i-1)-x(i-1)^2); %根据已输入的数据进行迭代end figure;plot(x,y,'linewidth',2) axis equal %横纵坐标等比例 text(x(1),y(1),'1st point') %标记初始点 运行结果:

心得体会及改进:在输入某些数据时,所绘曲线可能是一条折线(如:n=5,a=b=x1=1,y1=2)甚至只有一个点(如:n=5,a=b=x1=y1=1),此时可能出现曲线与坐标轴重合或无法看到点的情况,为了更清晰地展现曲线,可以使线宽适当加宽并标记初始点。 2.编程实现奥运5环图,允许用户输入环的直径。 程序代码: 函数circle: %在指定的圆心坐标处,用指定颜色、宽度的线条绘出指定半径、圆心角的弧 function f=circle(r,x,y,color,linw,alp1,alp2) alp=linspace(alp1,alp2); X=r*cos(alp)+x; Y=r*sin(alp)+y; plot(X,Y,color,'linewidth',linw) end 主程序代码: r=input('input r:');

单片机第一次实验报告

单片机第一次实验报告 姓名: 学号: 班级:

实验报告 课程名称:微机原理与接口技术指导老师:学生姓名:学号:专业:自动化日期:20140327 地点: 实验一实验名称 1. 实验目的和要求 1.掌握keil软件和STC-ISP 软件的使用方法 2.点亮第一个发光管. 3.点亮1,3,5,7发光管 4.尝试让第一个发光管闪烁. 2. 主要仪器设备 1.一台pc机 2.一个单片机开发板 点亮第一个发光管. #include void main () { P1 &=0xFE; while(1) } 点亮1,3,5,7发光管 void main () { P1 &=0xAA;

while(1) } 尝试让第一个发光管闪烁. #include #define uint unsigned int #define uchar unsigned char void delay_ms(uint timer) { uchar j = 0; while(timer--) { for(j = 124;j>0;j--) { ; } } } void main (void) { while(1) { P1 &=0xFE; delay_ms(100); P1 |=0x01; delay_ms(100); } }

实验心得:这第一次试验,没准备,所以这次实验一上机啥都不会,也不知道该做啥,在同学的帮助下安装了程序和驱动,代码也是问同学才明白的。第一个代码,通过很顺利,但是测试第二个代码的时候电脑无法连接板子,后来重新安装了驱动才就能连接了。虽然感觉还是好多不懂的,不过还是学到了一些东西,有一点成就感。

汇编实验报告(详细版)

计算机组成与汇编语言(实验报告) 内容: 实验一、六、七、八 院系专业:计算机学院计算机科学与技术 姓名:xxxxxxxxx 学号: 2011004xxxxx 完成时间:2012年12月1日

计算机组成与汇编语言实验报告 姓名xxxx 学号2011004xxxxx 计分 专业软件工程班级xxxx 实验日期2012年 12 月 1日实验名称实验一数制转换 实验目的 ●熟悉各种进制数据之间的相互转换方法。 ●掌握二-十进制数据的相互转换程序设计。 实验内容 1.将编写好的程序1输入、编译、连接并运行。 程序1清单 #include #include #include void main() { int i,l,s0=0,s=0; char a[17]; while(l!=16) { printf("请输入一个16位的二进制数:\n"); gets(a); l=strlen(a); for(i=0;i<16;i++) { if(a[i]!='0'&&a[i]!='1') {

printf("输入的二进制数不正确!!"); break; } } } if(a[15]=='1') s++; for(i=1;i<16;i++) { if(a[15-i]=='1') s+=(1<

说明:如果不是16位二进制则会提示错误。 2.将编写好的程序2输入、编译、连接并运行。 程序2清单 #include #include void main() { int t0,t1,t2,t3,i,j; int a[16]; printf("请输入一个十进制数:"); scanf("%d",&t0); t1=t0; for(i=0;i<16;i++) { t2=t1/2; if(t2>1) a[i]=t1%2; else if(t1==1) { a[0]=1; for(i=1;i<16;i++) a[i]=0; } else if(t1==2) { a[i]=0; a[i+1]=1; for(j=i+2;j<16;j++)

MCU第一次实验报告

东南大学自动化学院 实验报告 课程名称: MCU综合课程设计 第 1 次实验 实验名称:数据传送与多字节十进制加法实验 院(系):自动化专业:自动化 姓名:李周洋学号:08011328 实验室:测控技术实验室实验组别: 同组人员:刘乃广实验时间:2014 年 4 月17 日评定成绩:审阅教师:

目录 一.实验目的和要求 (2) 二.实验原理 (2) 三.实验方案与实验步骤 (3) 四.实验设备与器材配置 (5) 五.实验记录 (6) 六.实验总结 (6) 七.思考题或讨论题 (6) 八.源代码 (7)

一.实验目的和要求 实验目的 (1)熟悉掌握将数据存入片外存储空间或片内存储空间的方式和指令以及熟悉掌握外部存储空间中数据传递的方式和指令; (2)学会用汇编语言进行循环操作。 (3)熟悉掌握汇编语言进行的十进制加法运算和十进制调整指令。 (4)理解进位溢出的原理。 (5)熟悉使用Medley软件进行下载调试(单步、断点),并查看相关的寄存器值和片内外存储器的值。 实验要求 1、数据传送实验 把数据0A0H放到地址为40H的内存单元,并将数值和地址分别递增1,要求一共做十次这样的操作。然后将内存空间40H-49H的数值分别传递给50H-59H的内存空间中。 2、多字节十进制加法实验 将存放在单片机内部RAM中以40H为首的3个地址单元中的一个六位十进制数与存放在50H为首的3个地址单元中的一个六位十进制数相加,将相加结果存放在以60H为首的地址RAM地址单元中。 数据存放方式:十进制数以BCD码存放,高位数据在低地址,低位数据在高地址。 (40H) (41H) (42H) + (50H) (51H) (52H) = (60H) (61H) (62H) (63H) 最高位进位存放在60H中。数据都存放在片内数据存储器内。 二.实验原理 1、数据传送实验 当使用Ri(i=0、1)作片外寻址时候,需要预先设置高位地址线P2的值。程序中将P2的值设为00H。如果利用DPTR作间址寄存器,无需改变P2口的值,可直接使用. 因为程序中使用的是R0、R1作片外寻址,首先将P2口写0,即把高位地址置0,然后将地址初值40H放入寄存器R0。同时,将初始数据放入一个累加器A中。之后,一个MOVX A,@R0操作便可将累加器中的数据传送到片外数据存储单元中去。由于这样的操作要做十次,所以用一个寄存器R2作为计数器使用,即将0AH存放在寄存器内。当寄存器的值不为0,用DJNZ循环操作。 第二步是要将40H-49H的数值分别传到50H-59H的内存空间中。先将源地址初值和目的地址初值分别存放在寄存器R0和R1内。再重置计数初值R2,同样用DJNZ循环。循环时,先将数据初值放入一个累加器A内,通过A间接地传送数值。R0和R1经过一次循环分别加一。直至循环结束。

第一次 Java 实验报告

Java实验报告 班号学号姓名 实验地点完成日期年月日 实验一Java编程环境使用 一、实验任务和要求 掌握Java运行环境的配置 掌握Java程序的编写、编译、运行等过程 熟悉Java语言的基本语法和运行原理 掌握Java的基本数据类型、表达式和程序控制结构 熟悉Eclipse开发环境的基本使用方法 二、原理分析和程序设计 实验内容: 1、在控制台下求两个实数的最大值(CompareTwoNumbers.java) 要求:从键盘输入任意两个实数,比较两个数字的大小,将较大的数输出。数据输入和输出用Java的标准输入流和输出流来实现。请按照代码提示编写完整程序,并查看结果。 代码提示: import java.util.Scanner; //导入Scanner对象; Scanner scanner = new Scanner(System.in);//实例化一个Scanner对象; number1 = scanner.nextDouble();//从键盘输入一个实数赋值给number1; 相应代码: import java.util.Scanner; //导入Scanner对象; public class CompareTwoNumbers { public static void main(String[] args){ Scanner scanner = new Scanner(System.in);//实例化一个Scanner对象; System.out.print("请输入第一个数:"); double number1 = scanner.nextDouble();//从键盘输入一个实数赋值给number1; System.out.print("请输入第二个数:"); double number2 = scanner.nextDouble(); double c=number1>number2?number1:number2; System.out.print("最大的数为:"+c); } } 猜数字游戏(GuessNumber.java)

汇编实验报告

XXXX大学 实验报告 课程名称汇编语言程序设计成 绩 实验学时 评语: 指导教师: 年月日 班级: 学号: 姓名: 地点: 时间:

实验一汇编语言编程实验 一、实验目的 (1)掌握汇编语言的编程方法 (2)掌握DOS功能调用的使用方法 (3)掌握汇编语言程序的调试运行过程 二、实验内容 1. 将指定数据区的字符串数据以ASCII码形式显示在屏幕上,并通过DOS功能调用完 成必要提示信息的显示。 2. 在屏幕上显示自己的学号姓名信息。 3. 循环从键盘读入字符并回显在屏幕上,然后显示出对应字符的ASCII码,直到输 入”Q”或“q”时结束。 4. 实验中使用的DOS功能调用: INT 21H AH 值功能调用参数结果 1 键盘输入并回显AL=输出字符 2 显示单个字符(带Ctrl+Break检查) DL=输出字符光标在字符后面 6 显示单个字符(无Ctrl+Break检查) DL=输出字符光标在字符后面 8 从键盘上读一个字符AL=字符的ASCII码 光标跟在串后面 9 显示字符串DS:DX=串地址, ‘$’为结束字符 4CH 返回DOS系统AL=返回码 例如,实现键盘输入并回显的完整代码: MOV AH 01H INT 21H 三、实验结果 1. 将指定数据区的字符串数据”Let us go !”以ASCII码形式显示在屏幕上,并通过 DOS功能调用完成必要提示信息的显示: 2. 在屏幕上显示自己的学号姓名信息 3.循环从键盘读入字符并回显在屏幕上,然后显示出对应字符的ASCII码,直到输 入”Q”或“q”时结束。

四、实验原理 DATA SEGMENT MES DB 'NUMBER: 03099018 ',0AH,0DH,'NAME: Feng Xiaokang',0AH,0DH,'$' CENT DB 'Let us go !','$' ENTE DB 0AH,0DH,'$' INFO DB 'Origin: ','$' ASCI DB 'ASCII : ','$' MSG1 DB 'If you want to quit please press...q/Q...',0AH,0DH,'$' MSG2 DB 0AH,0DH,'Char: $' RS DB ' ASCII: $' SD DB '' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA ;存储数据 MOV DS,AX MOV DX,OFFSET MES ;显示数据 MOV AH,09H INT 21H MOV DX,OFFSET MSG1 MOV AH,09H INT 21H MOV DX, OFFSET CENT MOV SI, DX T: MOV AL,[SI] CMP AL,'$' JZ C1 AND AL,0F0H ;取高4位 MOV CL,4 SHR AL,CL CMP AL,0AH ;是否是A以上的数 JB A ADD AL,07H A: ADD AL,30H MOV DL,AL ;show character MOV AH,02H INT 21H

电路分析实验报告第一次完整版

电路分析实验报告第一 次 Document serial number【NL89WT-NY98YT-NC8CB-NNUUT-NUT108】

电路分析实验报告 实验报告(二、三) 一、实验名称实验二 KCL与KVL的验证 二、实验目的 1.熟悉Multisim软件的使用; 2.学习实验Multisim软件测量电路中电流电压; 3.验证基尔霍夫定理的正确性。 三、实验原理 KCL为任一时刻,流出某个节点的电流的代数和恒等于零,流入任一封闭面的电流代数和总等于零。且规定规定:流出节点的电流为正,流入节点的电流为负。 KVL为任一时刻,沿任意回路巡行,所有支路电压降之和为零。且各元件取号按照遇电压降取“+”,遇电压升取“-”的方式。沿顺时针方向绕行电压总和为0。电路中任意两点间的电压等于两点间任一条路径经过的各元件电压降的代数和。 四、实验内容 电路图截图: 1.验证KCL: 以节点2为研究节点,电流表1、3、5的运行结果截图如下: 由截图可知,流入节点2的电流为2.25A,流出节点2 的电流分别为750mA和1.5A。2.25=0.75+1.5。所以,可验证KCL成立。2.验证KVL:

以左侧的回路为研究对象,运行结果的截图如下: 由截图可知,R3两端电压为22.5V,R1两端电压为7.5V,电压源电压为30V。22.5+7.5-30=0。所以,回路电压为0,所以,可验证KVL成立。 一、实验名称实验三回路法或网孔法求支路电流(电压) 二、实验目的 1.熟悉Multisim软件的使用; 2.学习实验Multisim软件测量电路中电流电压; 3.验证网孔分析法的正确性。 三、实验原理 为减少未知量(方程)的个数,可以假想每个回路中有一个回路电流。若回路电流已求得,则各支路电流可用回路电流线性组合表示。这样即可求得电路的解。回路电流法就是以回路电流为未知量列写电路方程分析电路的方法。网孔电流法就是对平面电路,若以网孔为独立回路,此时回路电流也称为网孔电流,对应的分析方法称为网孔电流法。 四、实验内容 实验电路截图: 如图所示,i1,i2,i3分别为三个网孔的电流,方向如图所示,均为顺时针。 网孔一中含有一个电流源,而且电流源仅在网孔一中,所以,网孔一的电流就是电流源电流2A。设电流源两端电压为U7。

汇编实验报告..

合肥工业大学计算机与信息学院 实验报告 课程:汇编语言程序设计专业班级: 学号: 姓名:

实验一Debug程序的使用 一.实验目的 1、熟悉DEBUG程序中的命令,学会在DEBUG下调试运行汇编语言源程序。 2、掌握8086/8088的寻址方式及多字节数据的处理方法。 二.实验内容 1、利用DEBUG程序中的“E”命令,将两个多字节数“003F1AE7H”和“006BE5C4H”分别送入起始地址为DS:0200H和DS:0204H两个单元中。 2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:0200H 单元和DS:0204H单元中的数据相加,并将运算结果存放在DS:0208H单元中。要求: 本次实验的内容均在DEBUG下完成,实现数据的装入、修改、显示;汇编语言程序段的编辑、汇编和反汇编;程序的运行和结果检查。 三.实验过程和程序 1、启动DOS操作系统 2、运行https://www.doczj.com/doc/2310710893.html,程序(若当前盘为C) C:>DEBUG↙ – ;(“–”为DEBUG提示符,仅当屏幕出现该提示符后,才可输入DEBUG命令) 3、用“A”命令编辑和汇编源程序 –A ↙ 186E:0100 MOV AX,[0200]↙ 186E:0103 MOV BX,[0202]↙ 186E:0107 ADD AX,[0204]↙ 186E:010B ADC BX,[0206]↙ 186E:010F MOV [0208],AX↙ 186E:0112 MOV [020A],BX↙ 186E:0116 ↙ 4、用“U”命令反汇编验证源程序 –U CS:0100↙ 186E:0100 A10002 MOV AX,[0200] 186E:0103 8B1E0202 MOV BX,[0202] 186E:0107 03060402 ADD AX,[0204] 186E:010B 131E0602 ADC BX,[0206] 186E:010F A30802 MOV [0208],AX 186E:0112 891E0A02 MOV [020A],BX 186E:0116 – 注意:

数据库第一次实验报告

《数据库系统概论》实验报告 题目:实验一 数据库和表的基本操作和约束条件姓名班级学号日期 刘凯10031201 2012302606 2014.10 一、实验内容、步骤以及结果 1.利用图形用户界面创建,备份,删除和还原数据库和数据表 创建初始数据库信息如下 备份数据库

删除表 2.利用SQL语言创建和删除数据库和数据表创建数据库 CREATE DATABASE studentdata ( FILENAME = 'D:\studentdata.mdf' , SIZE = 20480KB , MAXSIZE = 102400KB , FILEGROWTH = 10240KB ) LOG ON ( FILENAME = 'D:\studentdata_1.ldf' , SIZE = 2048KB , MAXSIZE = 5120KB , FILEGROWTH = 1024KB ) GO 创建三张表

CREATE TABLE dbo.C( Cno char(4)PRIMARY KEY , Cname char(40) , Cpno int , Ccredit int,) GO CREATE TABLE dbo.S( Sno char(4)PRIMARY KEY , Sname char(40) , Ssex char(4) , Sbirth] char(40) , Sdept char(4) , ) CREATE TABLE [dbo].[SC]( Sno char(4) , Cno char(4) , Grade int ) GO 备份数据库 Backup database studentdata to disk = ‘D:\studentdata.db.bak’ 删除数据库 Deleta database studentdata.db 还原数据库 Restore database studentdata from disk = ‘D:\studentdata.db.bak’ 3.利用图形用户界面对上题中创建的Student库的S表中,增加以下的约束和索引 主键 Sname唯一键

汇编语言实验报告

汇编语言实验报告 专业: 班级: 姓名: 学号: 2011年12月14日

目录 实验1 利用DEBUG调试汇编语言程序段 (3) 实验2 初级程序的编写与调试实验(一) (11) 实验3 初级程序的编写与调试实验(二) (20) 实验4 汇编语言程序上机过程 (28) 实验5 分支程序实验 (33) 实验6 循环程序实验 (40) 实验7 子程序实验 (45)

实验1 利用DEBUG调试汇编语言程序段一.实验目的 1.熟悉DEBUG有关命令的使用方法; 2.利用DEBUG掌握有关指令的功能; 3.利用DEBUG运行简单的程序段。 二.实验内容 1.进入和退出DEBUG程序; 1)开始—运行,输入cmd,点确定进入命令窗口 2)在命令窗口中输入dubug进入debug程序 3)进入debug窗口后,输入q命令退出debug 2.学会DEBUG中的 1)D命令(显示内存数据D 段地址:偏移地址) 例1:-D100;显示DS段, 0100开始的128个节内容

说明:指定要显示其内容的内存区域的起始和结束地址,或起始地址和长度。 ①DSEGREG[起始地址] [L 长度] ;显示SEGREG段中(缺省内默认为DS), 以[起始地址] (缺省内为当前的偏移地址),开始的[L 长度] (缺省内默认为128)个字节的内容. ② D SEGREG[段地址:偏移地址] ;显示SEGREG段中(缺省内默认为DS), [段地址:偏移地址]开始的[L 长度] (缺省内默认为128)个字节内容 -D ;默认段寄存器为DS,当前偏移地址(刚进入debug程序偏移地址为0100H) -D DS:100 ;显示DS段, 0100H开始的128个字节内容 -D CS:200 ;显示CS段, 0200H开始的128个字节内容 -D 200:100 ;显示DS段, 0200:0100H开始的128个字节内容

并行计算第一次实验报告

并行计算上机实验报告题目:多线程计算Pi值 学生姓名 学院名称计算机学院 专业计算机科学与技术时间

一. 实验目的 1、掌握集群任务提交方式; 2、掌握多线程编程。 二.实验内容 1、通过下图中的近似公式,使用多线程编程实现pi的计算; 2、通过控制变量N的数值以及线程的数量,观察程序的执行效率。 三.实现方法 1. 下载配置SSH客户端 2. 用多线程编写pi代码 3. 通过文件传输界面,将文件上传到集群上 4.将命令行目录切换至data,对.c文件进行编译 5.编写PBS脚本,提交作业 6.实验代码如下: #include

#include #include #include #include #include static double PI=0; static int N=0; static int numOfThread=0; static int length=0; static int timeUsed=0; static int numOfThreadArray[]={1,2,4,6,8,10,12,14,16,20,24,30}; static int threadArraySize=12; static int nTime=4; static int repeatTime=30; static double totalTime=0; struct timeval tvpre, tvafter; pthread_mutex_t mut; clockid_t startTime,endTime;

汇编实验报告

汇编语言程序设计 实验报告 学号:100511530 班级:电气信息类1005 姓名:陆淑琴 指导老师:李诗高

实验一、汇编语言上机的基本过程及环境 【实验目的】 (1)熟悉汇编语言的编辑、汇编、连接及调试的全过程,重点掌握使用DEBUG调试程序的方法。 (2)了解汇编语言的程序结构。 【实验内容】 (1)在数据段中定义两个数(数据自拟,包含有正数和负数),要求编写程序分别计算出这两个数的和、差、积、商,并用Debug的相关命令查询计算结果(包括对CF,OF,SF,ZF的影响)。 (2)首先对AX,BX,CX寄存器赋初值(数据自拟),再将AX寄存器的中间八位,BX的低四位和CX的高四位拼接成一个新的字,并把结果存入偏移地址为0000H的存储单元。其中BX的低四位作为结果字的高四位,CX的高四位作为结果字的低四位。并用Debug的相关命令查询内存单元的结果字。 源代码: DA TA SEGMENT val1 DW 1000h val2 DW 2000h maxv DW ? DA TA ENDS STACK SEGMENT STACK 'STACK'

DB 100H DUP(?) STACK ENDS CODE SEGMENT 'CODE' ASSUME CS:CODE, DS:DATA,SS:STACK .386 MAIN: MOV AX, DATA; MOV DS, AX PUSH val1 PUSH val2 CALL MAX ; POP maxv ;栈顶返回值出栈 MOV AX, 4c00H INT 21H MAX PROC PUSH BP ;执行该指令前堆栈情况 MOV BP, SP ;执行后堆栈情况 MOV AX, [BP+4] CMP AX, [BP+6] JA EXIT MOV AX, [BP+6] EXIT: MOV [BP+6], AX ;用栈顶返回值 POP BP RET 2 ;执行后堆栈情况 MAX ENDP CODE ENDS END MAIN 【实验步骤】 (1)用编辑软件(记事本、UltraEdit等)编辑一个扩展文件名为ASM的汇编语言源程序。 (2)用汇编程序MASM汇编上述的汇编语言源程序,形成目标代码文件。(扩展名为OBJ) (3)用连接程序LINK连接目标代码文件,形成可执行文件。(扩展名为EXE)(4)用DEBUG32调试可执行文件,观察执行结果,以验证其正确性。

东北大学操作系统第一次实验报告

实验1:熟悉Linux系统 一、题目:熟悉Linux系统 二、目的: 熟悉和掌握Linux系统基本命令,熟悉Linux编程环境,为以后的实验打下基础。 1、启动、退出、ls(显示目录内容)、cp(文件或目录的复制)、mv(文件、目录更名或移动)、rm(删除文件或目录)、mkdir(创建目录)、rmdir(删除空目录)、cd(改变工作目录)… 2、C语言编辑、编译 三、内容及要求: 1、熟练掌握Linux基本文件命令; 2、掌握Linux编辑程序、对源代码进行编译、连接、运行及调试的过程; 3、认真做好预习,书写预习报告; 4、实验完成后要认真总结、完成实验报告。 四、内容及要求: 在Linux环境下编制、调试源程序的实际过程(每一步的具体说明)。 实验2:进程状态 一、题目:进程状态

二、目的: 自行编制模拟程序,通过形象化的状态显示,使学生理解进程的概念、进程之间的状态转换及其所带来的PCB内容、组织的变化,理解进程与其PCB间的一一对应关系。 三、内容及要求 1、设计并实现一个模拟进程状态转换及其相应PCB组织结构变化的程序; 2、独立设计、编写、调试程序; 3、程序界面应能反映出在模拟条件下,进程之间状态转换及其对应的PCB 组织的变化。 4、进程的状态模型(三状态、五状态、七状态或其它)可自行选择, 5、代码书写要规范,要适当地加入注释; 6、鼓励在实验中加入新的观点或想法,并加以实现; 7、认真进行预习,完成预习报告; 8、实验完成后,要认真总结,完成实验报告。 四、程序流程图

图4.1 进程转换流程五、使用的数据结构及其说明 struct PCB //进程控制块PCB { char name; //名字标识 string state; //状态 int time; //执行时间 }; typedefstruct PCB ElemType; structQNode { ElemType data; structQNode *next; }; //链式队列结点 typedefstructQNodeQNode; //结点 typedefstructQNode *PNode; typedefstruct { PNodefrnt; PNode rear;

示波器使用实验报告模板(完整版)

报告编号:YT-FS-8141-75 示波器使用实验报告模板 (完整版) After Completing The T ask According To The Original Plan, A Report Will Be Formed T o Reflect The Basic Situation Encountered, Reveal The Existing Problems And Put Forward Future Ideas. 互惠互利共同繁荣 Mutual Benefit And Common Prosperity

示波器使用实验报告模板(完整版) 备注:该报告书文本主要按照原定计划完成任务后形成报告,并反映遇到的基本情况、实际取得的成功和过程中取得的经验教训、揭露存在的问题以及提出今后设想。文档可根据实际情况进行修改和使用。 【实验目的】 1.了解示波器显示波形的原理,了解示波器各主 要组成部分及它们之间的联系和配合; 2.熟悉使用示波器的基本方法,学会用示波器测 量波形的电压幅度和频率; 3.观察李萨如图形。 【实验仪器】 1、双踪示波器 GOS-6021型1台 2、函数信号发 生器YB1602型 1台 3、连接线示波器专用 2根 示波器和信号发生器的使用说明请熟读常用仪器 部分。 [实验原理] 示波器由示波管、扫描同步系统、Y轴和X轴放 大系统和电源四部分组成,

1、示波管 如图所示,左端为一电子枪,电子枪加热后发出一束电子,电子经电场加速以高速打在右端的荧光屏上,屏上的荧光物发光形成一亮点。亮点在偏转板电压的作用下,位置也随之改变。在一定范围内,亮点的位移与偏转板上所加电压成正比。 示波管结构简图示波管内的偏转板 2、扫描与同步的作用 如果在X轴偏转板加上波形为锯齿形的电压,在荧光屏上看到的是一条水平线,如图 图扫描的作用及其显示 如果在Y轴偏转板上加正弦电压,而X轴偏转板不加任何电压,则电子束的亮点在纵方向随时间作正弦式振荡,在横方向不动。我们看到的将是一条垂直的亮线,如图 如果在Y轴偏转板上加正弦电压,又在X轴偏转板上加锯齿形电压,则荧光屏上的亮点将同时进行方向互相垂直的两种位移,其合成原理如图所示,描出

第一次实验报告

长春理工大学 汇编语言 预习报告 实验题目:DEBUG调试程序的使用 实验时间:2016年4 月 6 日实验地点:东三教912 班级:1405111 学号:140511114 姓名:王国伟

一.实验目的 a)学习使用DEBUG程序的各种命令。 b)利用DEBUG学习了解计算机取指令、执行指令的工作过程。 c)掌握用DEBUG调试自编程序的方法。 二.实验准备 了解什么是DEBUG 1. Debug 是DOS、WINDOWS都提供的实模式(8086方式)程序的调试工具。使用它,可以调试CPU各种寄存器中的内容、内存的情况和在机器码级跟踪程序运行。 实验中主要用到的DEBUG功能 1.R命令查看、改变CPU中寄存器的内容; 2.D命令查看内存的内容; 3.E命令改写内存的内容; 4.U命令将内存中的机器指令翻译成汇编指令; 5.T命令执行一条机器指令; 6.用DEBUG的A命令以汇编指令的格式在内存中写入一条机器指令 学习进入DEBUG的方式 1.使用win+R打开运行框 2.输入cmd指令进入DOS操作界面 3.在界面中输入debug来进入DEBUG编辑界面

使用DEBUG的几点说明 1.提示符“-”下才能输入命令,在按“回车”后该命令才开始执行 2.命令的大小写不区分 3.出现语法错误时,界面会给出”^ERROR” 4.用ctrl+c或ctrl+break来终止当前命令的执行,还可以用ctrl+s来暂停屏幕显 示(当连续不断地显示信息时) 5.BUG使用十六进制来计数 常用指令 1.R命令(Register) 格式1:R 功能1:显示所有寄存器中的内容 格式2:R寄存器名称 功能2:显示特定寄存器中的内容,并且可以做修改 2.D命令 功能:显示内存单元内容 格式1: D起始位置 功能1: DEBUG从起始位置显示128个字节的内容。输入命令D 0C0B:100格式2: D 起始位置结束位置 功能2: DEBUG 从起始位置一直显示到结束位置。输入命令D DS:100 11F 格式3: D 起始位置L 长度

汇编语言程序设计实验报告

实验报告实验名称汇编语言程序设计 | | 专业班级:信息安全 学号: 姓名:

实验一汇编语言上机过程和Debug常用调试命令 一.实验目的: 学习程序设计的基本方法和技能,熟练掌握用汇编语言设计、编写、调试和运行程序的方法。 二.实验题目: 熟悉与实验有关的系统软件(如编辑程序、汇编程序、连接程序和调试程序等)的使用方法。在调试过程中,学习及掌握debug程序的各种操作命令。 三.问题描述: 试编写一程序:比较两个字符串string1和string2所含的字符是否相同,若相同则显示‘match’; 否则,显示‘no match’。 四.方法说明: a)使用ws、tc或EDIT编辑程序来建立源文件,然后存盘,使系统返回DOS。 b)用汇编程序masm(或asm)对源文件汇编产生目标文件obj 如:汇编指示出错则需重新调用编辑程序修改错误,直至汇编通过为止。 c)用连接程序link 产生执行文件EXE. d)执行程序,可直接从DOS执行程序。 e)使用debug程序调试程序的方法。 五.实验步骤: 1.调用字处理程序EDIT 建立以sample.asm文件 datarea segment string1 db‘move the cursor backward.’ string2 db‘move the cursor backward.’ mess1 db ‘Match..’,13,10,’$’ mess2 db ‘No match!..’,13,10,’$’ datarea ends prognam segment main proc far assume cs:prognam,ds:datarea,es:datarea start: push ds sub ax,ax push ax mov ax,datarea mov ds,ax mov es,ax lea si,string1 lea di,string2 cld mov cx,25

数据结构第一次实验报告

《数据结构(C语言)》第一次实验报告

附录代码 集合运算器 #include #include #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define OVERFLOW -1 #define LIST_INIT_SIZE 100 //初始表空间大小 #define LISTINCREMENT 10 //表长增量 typedef int Status; /**Status是函数类型,其值是函数结果状态代码,如OK等**/ typedef char ElemType; /*ElemType类型根据实际情况而定,这里假设为char*/ /**顺序表的定义**/ typedef struct{ ElemType *elem; /**储存空间基地址**/ int length; /**当前长度**/ int listsize; /**当前分配的储存容量(以sizeof(Elemtype)为单位)**/ }SqList; SqList La,Lb,Lc,Ld; /**定义全局变量**/ /**构造一个空的线性表L**/ Status InitList_Sq(SqList &L){ L.elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType)); if(!L.elem) exit(OVERFLOW); /**储存分配失败**/ L.length = 0; /**空表长度为0**/ L.listsize = LIST_INIT_SIZE; /**初始储存容量**/ return OK; } /**该函数的时间复杂度为O(n)**/ /**在顺序表的逻辑为i的位置插入新元素e的函数**/ Status ListInsert_Sq(SqList &L,int i,ElemType e){ ElemType *newbase,*p,*q; //i的合法值为(1 <= i <= L.length_Sq(L) + 1) //异常处理 if(i < 1 || i > L.length + 1) return ERROR; if(L.length >= L.listsize){ //当前储存空间已满,增加分配

汇编实验报告

实验三算术运算与代码转换程序设计 一、实验目的 1)掌握算术运算程序的设计方法。 2)掌握代码转换程序的设计方法。 3)进一步掌握各种程序结构。 4)熟练掌握和使用用DEBUG调试程序。 二、实验内容 1)编制两个多字节整数加法和减法程序,并将结果按十六进制形式显示在屏幕上。 2)编制程序实现二进制定点数与十进制数的ASCII码串之间转换,并将结果显示在屏幕上。 3)编写程序计算从键盘输入两个不超过四位的十进制数的和、差、积、商,并以十进制形式输出。 4)写程序把从键盘输入的四位十六进制数转换为压缩的BCD码,并显示输出。 5)编写一通用过程用来将十进制数(从键盘输入)转换为P(从键盘输入)进制数。 三、实验设备 PC机一台

四、实验步骤 1) 按程序流程图编制实验程序。 2) 输入源程序。 3) 汇编、连接程序,执行程序,检查结果。 4) 程序的执行可用DEBUG的G命令,也可用T命令单步跟踪执行。 5) 用D命令检查执行结果。 六、源程序 实验一 DATA SEGMENT NUM1 DB 22H,33H,44H,55H,66H,77H NUM1L DB 6H NUM2 DB 22H,22H,22H,22H NUM2L DB 4H OUTCOME1 DB 10H DUP(0) OUTCOME2 DB 10H DUP(0) N DB 0H DATA ENDS STACK1 SEGMENT PARA STACK DW 20H DUP(0) STACK1 ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK1 START:MOV AX,DATA

相关主题
文本预览
相关文档 最新文档