版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验一DEBUG 调试工具熟悉、使用一、 实验题目熟悉、使用DEBUG 调试工具二、 实验目的1. 了解并逐步熟悉汇编语言的编辑方法及特点.2. 复习 8088 汇编语言的段结构、常用的指令与伪指令、存储空间的分配等。3. 掌握汇编语言的编辑、汇编及连接的过程。4. 了解并逐步掌握运用DEBUG 进行调试汇编语言程序。5. 借助 DEBUG 调试工具来发现汇编语言程序的错误所在并加以改正。三、 实验内容: 1、 进入DEBUG1 / 22.方法 1:在 Windows 开始菜单中单击运行命令,直接在运行对话框中输入"DEBUG"方法 2:在运行对话框中输入 "CM
2、D"启动 DOS 命令窗口后输入"DEBUG"方法 3:在程序、附件、命令提示符,启动 DOS 命令窗口后输入"DEBUG"2、DEBUG 命令格式DEBUG 的每个命令都是一个字母 ,后跟一个或多个参数。下面对DEBUG 命令作几点说明。·字母不分大小写。·只使用 16 进制数,且不能带后缀H。·以空格或逗号作为命令各项之间的分隔符。分隔符只在两个数值之间是必须的。·可以用Ctrl-C 或Ctrl-Break 终止命令的执行。·若输入的命令有语法错误,则提示"Error",
3、并用""指出错误位置。3、 常用的Debug 功能用Debug 的R 命令查看、改变CPU 寄存器的内容; 用Debug 的D 命令查看内存中的内容;用Debug 的E 命令改写内存中的内容;用Debug 的U 命令将内存中的机器指令翻译成汇编指令; 用Debug 的T 命令执行一条机器指令用Debug 的A 命令以汇编指令的格式在内存中写了一条机器指令22 / 224、 用 Debug 的R 命令查看、改变CPU 寄存器的内容; R 命令用来显示和修改寄存器的值,包括以下两种格式。1 R显示所有寄存器和 8 个标志位的值,并反汇编CS:IP 所指的指令。2 R<寄存
4、器名>显示指定寄存器的值,并等待用户键入新的值,按回车键结束R 命令。5、 用 Debug 的D 命令查看内存中的内容;D 命令可以查看内存中的内容,D 命令的格式较多,只介绍本次实验中用到的格式,8086/8088CPU 能够访问 1M 内容,D 命令可以显示0000:0000H-FFFF:FFFFH 中的任何一个单元的内存如果想知道内存 10000H 处的内容,可以用"d 段地址:偏移地址" 的格式来查看,如输入-d 1000:0使用 d 1000:9 查看 1000:9 处的内容。使用 d 1000:0 9 查看 1000:0-1000:9 的内容一进入 Deb
5、ug,可直接使用 D 命令直接查看,将列出 Debug 预设的地址处的内容6、 用 Debug 的E 命令改写内存中的内容;使用"e 起始地址 数据 数据 数据."的格式来进行如将内存 1000:0-1000:9 单元中的内容分别写为 0、1、2、3、4、5、6、7、8、9-e 1000:0 0 1 2 3 4 5 6 7 8 9也可以采用提问方式一个一个修改内存中的内容,如输入 e 1000:0,按 Enter 键 输入修改的数据,再按空格键输入下一个要修改的数据,最后Enter 键结束操作。输入字符串的格式:如-e 1000:10 1 'a' 2 &qu
6、ot;c+" 3 "IBM"将输入 1 a 2 c+ 3 IBM 到相应单元向内容中写入机器码,如 b80100 <代表 mov ax, 0001>, b90200< 代表 mov cx, 002>, 01c8<代表 add ax, cx>,那么输入-e 1000:0 b8 01 00 b9 02 00 01 c8就将该程序输入内容 1000:0 处,然后使用u 命令-u 1000:0 可以将内存单元中的内容翻译成汇编指令。如果要执行该程序,首先用 r 命令将 cs 修改成 1000,ip 修改成 0,再执行t 命令,单步执行程
7、序。执行 T 命令时,CPU 执行CS:IP 执行的指令并将IP 加 1.7、 用 Debug 的A 命令以汇编指令的形式在内存中写了机器指令示例:用A 命令,输入下列程序并运行-a 1000:0mov ax, 1mov bx, 2mov cx, 3 add ax, bx add ax, cx add ax, ax直接按 Enter 键结果输入。用 r 命令将 cs 修改成 1000,ip 修改成 0,再执行t 命令,单步执行程序。执行 T 命令时,CPU 执行 CS:IP执行的指令并将IP 加 1.实验二设计汇编语言程序一实验题目设计汇编语言程序二实验目的字符串统计程序设计双字乘法程序设计三
8、实验内容1. 字符串统计。在数据段中建立一个缓冲区BUFFER,变量VER,编程使得程序具有如下功能:从键盘输入一个子字符串存入VER,从键盘输入包含一个或几个子字符串的字符串存入BUFFER。统计BUFFER 中的字符串含有多少个子字符串以及每个子字符串的位置。2. 双字乘法程序。设计一个程序实现 32 位带符号双精度数乘法运算。由于只有 8 位和 16 位的乘法指令。因此32 位乘法运算是不能直接用指令实现的。但可以用 16 位乘法指令,通过 4 次想乘然后把部分积想加。对于带符号数,可以先根据绝对值求得积。然后判断积的符号,若积为负数,应将其用补码表示。四、 程序设计1、字符串统计程序设
9、计#include<iostream> using namespace std;int main<>char a;int b=0,c=0,d=0,e=0,f=0; cout<<"请输入一行任意字符:" a=cin.get<>while<a!='n'>if<a<0|a>=128> b+;else if<a>='a'&&a<='z'|a>='A'&&a<='Z
10、39;> c+;else if<a=' '> d+;else if<a>='0'&&a<='9'> e+;else f+; a=cin.get<>cout<<"总共有"<<b/2+c+d+e+f<<"个字符:"<<endl; cout<<"中文"<<"t"<<"英文"<<"t
11、"<<"空格"<<"t"<<"数字"<<"t"<<"其他"<<endl;cout<<b/2<<"t"<<c<<"t"<<d<<"t"<<e<<"t"<<f<<endl;return 0;分别统计出英文字母,空格,数字和
12、其他字符的个数。2、双字乘法程序设计data segmentx dw 1,2;被乘数y dw 3,4;乘数z dw 4 dup <?>积data endscode segmentassume ds:data,cs:code start:mov ax,data mov ds,ax mov ax,x mul ymov z,ax mov z+2,dx mov ax,x+2 mul ymov z+4,ax mov z+6,dxmovax,xmuly+2addz+4,axadcz+6,dxmovax,x+2muly+2adcz+8,axadcz+10,dxadcz+12,0movax,4c0
13、0hint21hcode ends end start实验三8253 定时器/计数器接口与数字电子琴一、 实验题目8253 定时器/计数器接口与数字电子琴二、 实验目的改变定时器 2 的计数值来改变声音频率,通过编程来获得声调频率和节奏延时长短,使计算机演奏出乐曲来。三、 实验内容设计程序让微机演奏一段简单乐曲利用 DOS 的键盘管理功能。将微机变为一个具有简单功能的电子琴选作。四、 程序设计硬件设计利用实验板上的 8253 计数/定时器和 8255 并行接口,定时器 8253 利用工作方式 3 产生一定频率信号,通过可编程的并行外围接口芯片8255 控制频率信号的通断。8255 的 A 口设
14、置为输出,8255 的 A 口的低两位用来控制扬声器驱动,当输出端口的 PA0 位为"1"或为"0"时,将使控制驱动器的与门电路接通或关闭,使 8253 所发出的音频信号能到达驱动器或被阻断。这样通过控制 PA0 的变化,可使扬声器接通和断开,控制扬声器是否能发出声音。此外,通过控制 PA0 的通断时间,就能发出不同的音长。8255 的PA1 位为"1"时,控制 8253 定时器产生驱动扬声器发声的音频信号,该位为"0"则不发信号。8253 有三个定时器,分为 0 号、1 号和2 号定时器,驱动扬声器的是0 号定时
15、器,该定时器工作在方式3,是一个频率发生器,它负责向扬声器发送指定频率的脉冲信号。当 8255 的PA0 和PA1 都为 1 时,8253 发出指定频率的声音信号的前提下,声音信号通过与门到达驱动器驱动扬声器发声。硬件原理图如图 1 所示:Q082558253PA0计数器门控图 1 硬件原理图825扬5 声PA器1 驱动控电制喇路叭如图 2 所示。与门扬声器驱动扬声器图 2 扬声器驱动电路软件设计系统要求实现2个功能,电子琴和音乐盒的功能。两者发声的方法一样,只是一个数据是从键盘读取的,另一个是已经保存好的数据。首先我们可以用一个子程序实现单个音调的产生,对8253输入不同的计数初值生成不同频
16、率的波形,然后延时一段时间。电子琴程序主要是读取键盘按键,根据键值产生不同的音调即可。而乐曲的播放先将乐曲的音符编码表和节拍编码表建立好的,然后在播放时读取数据。1. 单音调子程序SOUND单音调子程序的调用前需要进行以下几个方面工作:1确定相应的音调所对应的频率,查表可以得到,再由频率得到对应的8253计数初值。2确定音长,即一个音符所持续的时间。读取 8253 计数初值和音长8253 置初值开启与门和 8253GATE延时关闭与门和 8253GATE返回在单音调子程序中实现发出一个音符的声音,持续所需的时间,流程图如图 3 所示:图 3 单音调子程序流程图2. 音乐盒程序音乐盒的乐曲播放程
17、序中需要有两组数据支持:一组是频率数据, 一组是节拍时间数据。音符的频率可以通过简谱从频率表中查得。节拍时间就是音符的持续时间,取决于乐曲的速度和每个音符的节拍数据。如 4/4四四拍中,每小节包括 4 拍,全音符持续 4 拍,二分音符持续 2 拍,四分音符持续一拍,八分音符持续半拍等。有了音调与频率和时间的关系后 ,就可以按照乐曲的曲谱将每个音符的频率和持续的时间定义成两组数据表,然后编程依次取出表中的频率值和节拍值,调用单音调子程序就可依次产生各个音调 ,播放出乐曲。在程序中存储几个乐曲数据 ,根据音乐盒子菜单选择相应的乐曲演奏,读取对应的数据输出。乐曲两只老虎的简谱如下:两只老虎1=C4/
18、41231 | 1231 | 345- |345- | 56 5431 | 56 54 31 |251- | 251- |对应的频率数据表Freq、节拍数据表Time如下: TWOTIGERS_FREDW2 DUP<524,588,660,524,0>;乐曲的频率表DW2DUP<660,698,784,0>DW2DUP<784,880,784,698,660,524,0>DW2DUP<588,392,524,0>,1TWOTIGERS_TIMEDW10 DUP<100>,200,100,100,200;乐曲的时间表DW2 DUP<
19、;50,50,50,50,100,100>DW2 DUP<100,100,200>outb_p<0x34,0x43> outb_p<LATCH&0xff,0x40> outb_p<LATCH>>8,0x40>outb<inb_p <0x21> & 0x01, 0x21> /允许接收定时器中断void do_timer<void>这是定时器主程序,用于每隔一段时间后进行某些操作 8253.asm:/以下是nasm 格式的汇编代码,这个中断处理函数必须用汇编timer_interr
20、upt:push gs push fs push es push ds push ebp push edi push esi push edx push ecx push ebx push eax;如果你不在操作系统下使用 ,以下三行必须删除,否则必须把 0x10 更改为内核段选择符mov eax,0x10 mov ds,ax mov es,ax mov al,0x20out 0xa0,al ;发送 EOI out 0x20,alcall do_timer pop ebxpop ecx pop edx pop esi pop edi pop ebp pop ds pop es pop fs p
21、op gsxor eax,eax iretd实验四实时时钟实验一、实验目的:掌握ARM7 嵌入式系统实验箱的使用方法;掌握 LPC2148 的内部定时器模块的使用方法;掌握LPC2148 的 RTC 模块的使用方法。二、实验内容:学习使用 LPC2148 的内部定时器以及 RTC 模块;自行编程实现利用 RTC 模块在串口调试助手上显示当前时间,自行编程实现利用定时器模块在串口调试助手上显示 9-0 的倒计时,间隔 1S三、实验原理:1、定时器模块:对 TOTC 设置,即设置定时器的值,TOPR,设置预分频值,TOMCR 设置匹配模式,复位并中断,TOMR,设置匹配值,TOTCR,启动寄存器。
22、2、RTC 模块。设置RTC 基准时钟分频器。初始化RTC 时钟值,如year,month。报警中断设置,如 CIIR,AMR 等。启动 RTC,即 CCR 的CLKKEN 位置位。读取完整时间寄存器值或等待中断。四、实验步骤:1. 在D:ARM7_ToolDebug_ToolR340 安装RTC 驱动;2. 打开对应的IAR 工作空间RS232_SMG;3. 修改主程序使其达到实验内容的要求并仿真直至程序无误;4. 将程序烧入试验箱中,运行;5. 打开D:ARM7_ToolDebug_Tool串口调试助手V2.26. 我的电脑-管理-设备管理器-端口com 和 lpt-观测串口号 com4,
23、 修改串口调试助手对应的串口号,选择十六进制发送,手动发送。五、实验程序: RTC 实时时钟:#include"includes.h" #include<stdlib.h> #include<stdio.h> #define UART_BPS 9600uint8 strymd16="" uint8 strhms16=":"void DelayNS<uint32 dly> uint32 i; for<dly>0;dly->for<i=0;i<5000;i+>void
24、 UART0_Ini<void>U0LCR=0x83;U0DLM=0x00;U0DLL=0x14;U0LCR=0x03;void UART0_SendByte<uint8 data>U0THR= data;while<<U0LSR & 0x40> = 0>uint8 UART0_RcvByte<viod>uint8 rcv_data; while<<U0LSR&0x01>=0> rcv_data = U0RBR; return rcv_data;void UART0_SendStr<uin
25、t8 const *str> while<1>if<*str = '0'>break; UART0_SendByte<*str+> void RTCIni<void> PREINT = 95;PREFRAC = 0;YEAR = 2005;MONTH = 6;DOM = 10;HOUR = 8;MIN = 30;SEC = 0; CIIR = 0x01; CCR = 0x01;struct DATEuint16 year; uint8 mon;uint8 day;/ uint8 dow;struct TIMEuint8 ho
26、ur; uint8 min; uint8 sec; ;void GetTime<struct DATE *d,struct TIME *t> d->year = YEAR;d->mon = MONTH; d->day = DOM;t->hour = HOUR; t->min = MIN;t->sec = SEC;void timefuz<struct DATE *d,struct TIME *t> strymd0=d->year/1000+'0'strymd1=d->year/100%10+'0
27、39; strymd2=d->year/10%10+'0' strymd3=d->year%10+'0' strymd5=d->mon/10+'0'strymd6=d->mon%10+'0' strymd8=d->day/10+'0' strymd9=d->day%10+'0' strhms0=t->hour/10+'0' strhms1=t->hour%10+'0' strhms3=t->min/10+'
28、0' strhms4=t->min%10+'0' strhms6=t->sec/10+'0' strhms7=t->sec%10+'0'int main<void> RTCIni<>struct DATE *d; struct TIME *t ;d = <struct DATE*>malloc<sizeof<struct DATE>> t = <struct TIME*>malloc<sizeof<struct TIME>>
29、while<1>while<<T0IR & 0x01> = 0> T0IR = 0x01;GetTime<d,t> timefuz<d,t> UART0_SendStr<strymd> UART0_SendStr<strhms> free<d>free<t> return 0;TIMR 显示 0-10 秒void Time0Init<void> T0PR = 99;T0MCR=0x03;T0MR0=110592;T0TCR=0x03;T0TCR=0x01;int ma
30、in<void>Time0Init<> uint8 Char = '9' while<1>while<<T0IR & 0x01> = 0> T0IR = 0x01;UART0_SendByte<Char> Char-;if<Char ='/'> Char = '9' return 0;实验五8255 并行接口键盘实验一、 实验目的和要求1. 学习利用并行接口芯片 8255 构成并行接口电路的基本方法。2. 熟悉掌握并行接口芯片 8255 的基本性能及在实际应用中硬件连接、初始化编程方法。二、 实验内容编写程序,使 8255 的 219 口为输出口,218 为输入口,从 218 口将K0K7 作为一个字读入,再从 219 口输出这一反码字节。三、 实验算法先初始化 8255,将 219 口设置为输出口,218 为输入口;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 健康技术虚拟护理行业市场调研分析报告
- 动物清洁行业相关项目经营管理报告
- 汽车发动机冷却用散热器水管产品供应链分析
- 医疗咨询行业经营分析报告
- 快递服务信件或商品行业经营分析报告
- 婴儿用驱蚊贴产品供应链分析
- 外科器械的消毒行业营销策略方案
- 健康监测设备行业相关项目经营管理报告
- 反不正当竞争法法律服务行业营销策略方案
- 医用足底按摩拖鞋产品供应链分析
- 2024年电池行业培训资料
- 优抚年审标题
- 民办小学招生方案
- 中班班本课程《你好-小鸟》
- 神经外科标准护理的计划范文
- 2022-2023学年北京市大兴区八年级(上)期中数学试卷-普通用卷
- 池塘养殖尾水生态处理技术规程
- 青少年情绪管理
- GH-T 1384-2022 大麦青汁粉标准
- 山地旅游问卷调查
- 脑病医院项目可行性分析报告
评论
0/150
提交评论