第一部分 汇编语言程序设计
实验一 熟悉、使用DEBUG调试工具
一. 上机目的:
1. 了解并逐步熟悉汇编语言的编辑方法及特点.
2. 复习8088汇编语言的段结构、常用的指令与伪指令、存储空间的分配等。 3. 掌握汇编语言的编辑、汇编及连接的过程。
4. 了解并逐步掌握运用DEBUG进行调试汇编语言程序。 二. 实验内容:
1. 运用8086汇编语言,编辑多字节非压缩型BCD数除法的简单程序,文件名取为
*.ASM。
2. 运用MASM﹒EXE文件进行汇编,修改发现的各种语法错误,直至正确,形成*.OBJ
文件。
3. 运用LINK.EXE文件进行连接,形成*.EXE文件。
4. 仔细阅读附录中的DEBUG部分,掌握各种命令的所有方法。
5. 运用DEBUG。EXE文件进行调试,使用单步执行命令—T两次,观察寄存器中内
容的变化,使用察看存储器数据段命令—D,观察存储器数据段内数值。
6. 再使用连续执行命令—G,执行程序,检查结果是否正确,若不正确可使用DEBUG
的设置断点,单步执行等功能发现错误所在并加以改正。 程序清单:
多字节非压缩型BCD数除法 (88754/6=14792) DATA SEGMENT A DB 8,8,7,5,4 B DB 6 C DB 5DUP (0) N EQU 5 DATA ENDS
CODE SEGMENT ASSUME CS:CODE;DS:DATA;ES:DATA, START MOV AX,DATA MOV DS,AX MOV ES,AX CLD LEA SI,A LEB DI,C MOV CX,N MOV AH,0 LP1: LODSB AAD DIV B STOSB LOOP LP1 MOV CX,N LEA DI,C
LP2: MOV DL,[DI] MOV AH,2 开始 INT 21H DEC DI 设置被除数、商的地址指针 LOOP LP2 设置单位除法次数计数器 MOV AH,4CH INT 21H 取被除数一位作十进制调整 CODE: ENDS END START 作字节除法、存商
N 被除数各位已除完? Y 显示运算结果 结束
实验二 设计汇编语言程序
一. 8088提供了一套字符串处理指令,这些指令的特点是:在使用前必须先
在指定的寄存器中存入源字符串和目的字符串的首地址及相关字符数,在处理过程中还可以使用REP重复操作前缀。灵活使用这些特点,将会给编程带来很大的方便。
8088对算术运算只提供了基本指令。实际编程中需要我们加以扩展,这也要求我们很好地掌握。
二. 实验内容 1. 字符串统计。
在数据段中建立一个缓冲区BUFFER,变量VER,编程使得程序具有如下功能:从
键盘输入一个子字符串存入VER,从键盘输入包含一个或几个子字符串的字符串存入BUFFER。统计BUFFER中的字符串含有多少个子字符串以及每个子字符串的位置。
2. 双字乘法程序。
设计一个程序实现32位带符号双精度数乘法运算。由于只有8位和16位的乘法指令。因此32位乘法运算是不能直接用指令实现的。但可以用16位乘法指令,通过 4次想乘然后把部分积想加。对于带符号数,可以先根据绝对值求得积。然后判断积的符号,若积为负数,应将其用补码表示。 三. 实验报告:
1.提供所设计的完整的程序清单。
2.记录调试过程中发现的问题及解决方法。 3.可以考虑如何设计更好功能的程序。
提示:可以参考的程序流程图
被乘数存放:NUM1 乘数存放:NUM2
积数存放: MRLT 乘积符号标志存放:SIGN 变量NUM1,NUM2,MRLT均用DW定义。
子程序入口 AX←NUM1
开始 DX:AX←AX*NUM2 乘积符号标志SIGN=0 被乘数>0 ? Y N 被乘数取补 SIGN标志取反 乘数>0 ? Y N 乘数取补 DX:AX SIGN标志取反 MRLT+2 调用32位无符号乘法子程序 SIGN=0 ? Y AX N 乘积取补 DX:AX 结束
32位带符号数乘法流程图 MRLT+4
RET
MRLT←AX,MRLT+2←DX AX←NUM1+2 DX:AX←AX*NUM2 MRLT+2←AX+MRLT+2,MRLT+4←DX+C AX←NUM1 ←AX*NUM2+2 ←AX+MRLT+2,MRLT+4←DX+C 保存进位 ←NUM1+2 ←AX*NUM2+2 恢复进位 ←AX+MRLT+4,MRLT+6←DX+C 32位无符号乘法子程序流程图
实验三 中值滤波与均值滤波
一.在一般工业控制装置中,最常遇到的问题就是干扰。由于有工业干扰信号的存在,使得
从工业现场检测的数据出错,对于不同类型的干扰可以采用不同的办法来排除。其中对于脉冲干扰常采用中值滤波和均值滤波的方法来解决能获得较好的效果。因为脉冲干扰是随机叠加在被检测信号之上的,它们造成的后果是使有用信号的幅度增大或变小。我们在采样程序中加入上述数字滤波程序就可以消除或减少这类干扰的影响。 (1) 中值滤波程序:在一个采样周期中连续进行奇数次采样,依次可得奇数个采样值,
取其中大小为“中值”的 那个采样值作为该采样周期的测量值。
(2) 均值滤波:在一个采样周期中,连续进行偶数次采样,去掉最大和最小的两个采
样值,求出其余采样值的平均值。
二.实验内容
1. 在数据段设变量数组合TADA1和TADA2,并存入假设的两组采样值作为某一
采样周期的奇数个和偶数个采样值。 2. 设计中值滤波程序求出测量值。 3. 设计均值滤波程序求出测量值。 4. 每个程序应能将结果显示在屏幕上。 5. 在计算机上调试程序,并获得正确结果。 四. 实验报告:
1. 分析中值滤波和均值滤波各有什么优缺点。 2. 整理出运行正确的程序清单(加以注释)。并给出程序流程图。 3. 试提出对数字滤波器的改进方法或新的方法。
第二部分 接口程序设计
实验四 8253定时器/计数器接口与数字电子琴
一,原理
PC机的主机箱上装有一只小喇叭,由定时器8253和并行接口芯片8255控制其发音,其电路如下:
8253 DRIVER
1.9318MHZ CLK OUT2 8255
PB0 GATE2 PB1
8253用定时器2来产生896Hz的音频信号使喇叭发声,我们可以改变定时器2的计数值来改变声音频率,通过发声的延时程序来获得时间长短不同的声音,于是就可以通过编程;来获得声调(频率)和节奏(延时长短),使计算机演奏出乐曲来。如果再把音符1,2,3,4, . . . 5,6,7,1,2,3,······与数字键1,2,3,4,5,6,7,8,9,······对应起来,就可以把计算机变成电子琴。 以下给出有关资料: 1.音符 1, 2, 3, 4 , 7, 1, 2, 3, 4, 5, 6, 7, ⅰ ....,5 .,6..
频率 131 147 165 175 196 220 247 262 294 330 349 392 440 494 523
2.计数值计算公式
计数值=1.19318MHz(时钟频率)/ 给定频率 =1234DCH / 给定频率
8253道地地定时器通道2的端口地址:42H(存放计数值,先送低位字节,后送高位字
节)
命令寄存器地址:43H 4.编程参考:
1) 计算计数值程序段:
MOV DI, 给定频率 MOV DX, 12H MOV AX, 34DCH DIV DI
AX中即为计数值。
2) 打开扬声器发声,8255PB0,PBI送出高电平:
IN AL 61H OR AL 3 OUT 61H AL 3)关闭扬声器,停止发声:
IN AL 61H OR AL 0FCH OUT 61H AL
二.实验内容:
1. 设计程序让微机演奏一段简单乐曲
2. 利用DOS的键盘管理功能。将微机变为一个具有简单功能的电子琴(选作)。 三. 实验报告:
1. 总结设计中断服务的要点及程序结构;
2. 整理出运行正确的源程序清单(加以注释)给出详细程序流程图; 3. 有什么新的设想?
提示:可以在数据段定义两个表,一个存放乐曲的音调参数(频率对应的计数值),一个存放乐曲的节奏(延时长短)。然后依次读出,依次发音,直至演奏完整段乐曲。