||||
实验手册详细目录
实验1 认识性实验
1.显示数据区中的一个字符
2.显示数据区中的一个十进制数字
3.10以内的加法程序并显示结果
4.以二进制形式显示一个字符的ASCII码
实验2 数据转换实验
1.二进制数转换为十进制数。将D0起字单元中存放的16 位二进制数转换为十进制数,并将其ASCII码存入DI所指向的缓冲区BUF中,最后显示出来。
2.ASCII码表示的十进制数转换为二进制数并显示。将SI指向的缓冲区BUF中保存的五位ASCII码十进制数(0-65535)转换成对应的二进制数并存放在DX中,再以二进制形式显示。
3.二进制数到十六进制数的转换
4.ASCII码表示的十六进制数到二进制数的转换。从键盘输入四位十六进制数,将其转换十六位二进制数,并保存在DX寄存器中,再显示。
实验3 简单数据运算程序设计
1.求计算二个字类型无符号数的和并以十进制形式显示。设和的大小不超过16位二进制数。
2.如果要将二进制数的和以十六进制形式显示,求修改以下实验程序,补充数据区设计,使能上机实现。
3.检查4个输入的数,如果是16进制数字就保留并显示,否则停止输入并退出。
4.求一个数X的9-X并显示。
5.求解二元一次方程组:A1X+B1Y=C1
A2X+B2Y=C2
实验4 涉及压缩BCD码数据的转换程序及DEBUG练习
1.按如下步骤操作,了解 DEBUG 命令及其使用方法。
2.在编译与连接生成执行程序之后利用DEBUG调试该程序,了解不同变量数据存储情况,了解变量的三种含义及用法,了解加法、乘法运算方法及对标志位的影响。
3.检查下面那些指令是错误的,说明原因并改正。
4.十进制数的ASCII码转换为压缩型BCD码
5.压缩BCD码转换为十进制数的ASCII码
6.二进制数转换为压缩BCD码
7.压缩BCD码转换为二进制数
实验5 算术运算程序设计
1. 单步运行以下8位2进制数加法:88H+0CH;0CEH+
2. 分析以下程序功能是什么?分析其每一次算术运算对标志位的影响。记录实验结果,并与分析结果比较。
3. 已知数据存储区如下所示,DN1与DN2均为双字,自编程序段:计算DN1+DN2,将结果放到DSUM中。上机验证,报告其中各进行算术运算后对标志位影响的情况。
4. 修改上面的程序,将运行结果以16进制形式在屏幕上显示。
5. 按下列要求编写指令序列上机实现
1)清除DH中最低3位而不改变其他位,结果存入BH。
2)将DL中最高3位置1而不改变其他位。
3)将AX中0~3位置1、7~9位取反、其他位清0。
4)检查BX中第2、5、9位是否至少有1位是1。
5)检查CX中第1、6、11位是否同时为1。
6)检查BX中第0、2、9、13位是否至少有1位是0。
7)检查DX中第1、4、11、14位是否同时是0。
6. 编写指令序列实现:
1)右移DL 3位,并将0移入最高位。
2)将AL左移一位,将0移入最低位。
3)DX右移6位且保持正负特性不变。
4)将AL中压缩BCD码变成AX中的非压缩BCD码。
7.设A,B,C为8位带符号数,D为16位带符号数,计算算术表达式((A*B-32486H)+C)/D的值,结果中的商存放到(AX)寄存器中(假设D的值足够大),余数存放到(DX)寄存器中。
附:供参考程序段:
1. 双字加法程序段
2. 16进制形式在屏幕上显示二进制数据程序段
3. 清除DH中最低3位而不改变其他位,结果存入BH。
4. 将DL中最高3位置1而不改变其他位,结果存入BH。
5. 将AX中0~3位置1、7~9位取反、其他位清0。
6. 检查BX中第2、5、9位是否至少有1位是1。
7. 检查CX中第1、6、11位是否同时为1。
8. 检查BX中第0、2、9、13位是否至少有1位是0。
9. 检查DX中第1、4、11、14位是否同时是0。
10. 右移DL 3位,并将0移入最高位。
11. 将AL左移一位,将0移入最低位。
12. DX右移6位且保持正负特性不变。
13. 将AL中压缩BCD码变成AX中的非压缩BCD码。
实验6 自编有关双精度数据运算及逻辑运算、移位程序
1. 设数据区有双精度数据A、B 定义例如:A DD
B DD 2573ADEH
求自编程序,计算A与B的和与差,并用二进制形式分别显示。
2. 设数据区有双精度数据A、B 定义如上,求自编程序,计算A与B的积,并用十六进制形式显示。
3. 自编程序,任意设AX的值,求将其中1、3、5位清0,2、4、9位置1,6、7位求反。分别用二进制形式显示原数据及处理后的数据。
4. 自编程序,任意设4位压缩BCD码数据放到AX中,求用移位方法及2号DOS中断显示其值。
5. 设数据区有压缩BCD码数据A、B 定义例如:A DW 2937H
B DW 877H
求自编程序,计算A与B的和,并用十进制形式显示。
6. 设数据区有非压缩BCD码数据A、B 定义例如:A DW 0907H
B DW 0807H
求自编程序,计算A与B的和,并用十进制形式显示。
7. 设计求两个二位压缩BCD码的乘积(用压缩BCD码表示)的程序。(例如86H*39H,结果为3354H)
8. 设计求四位压缩BCD码除以二位压缩BCD码表示的程序。(例如8390H÷29H,结果为289H余9)
9. 设数据区有双精度数据A、字类型数据B ,求自编程序,计算A/B的商与余数,各用十进制形式显示。
10. 设数据区有双精度数据A、B ,求自编程序,计算A/B的商与余数。,各用十进制形式显示。
供参考的程序段:
(1)以二进制形式显示任意字符的ASCII码(要求在数据区设置A,DB类型)
(2)二进制数转换为十进制数。
要求在数据区设置BUF DB 10 DUP(0)和D0,例如 D0 DW 1234
(3)二进制数转换为压缩型BCD码,要求在数据区有ASC_BUF数据,DB类型,共16个单元,要转换的数据要放到DX中。
(4) 压缩型BCD码转换为二进制数,要转换的数据要放到DX中。
(5) 压缩型BCD码的加法运算
(6)单字节压缩BCD码的减法运算
(7)单字压缩BCD码的减法运算;已知AX=1234H、BX=4612H,计算1234-4612的差
(8)非压缩BCD码的加法运算
(9)非压缩BCD码的减法运算
(10)一位非压缩BCD码的乘法运算
(11)非压缩BCD码的除法运算
(12)两个二位压缩BCD码的乘积(用压缩BCD码表示)。
(13)设计求四位压缩BCD码除以二位压缩BCD码表示的程序。(例如8390H÷29H,结果为289H余9)
(14)双字加法
(15)双字除单字除法(设被除数在DX AX中,除数在BX中,在数据区中准备字类型3个字数据区C:C DW ?,?,?)
(16)双精度数减法
实验7 循环程序设计练习
1. 求利用2号中断接受从键盘输入的最多4个16进制数字组成一个16进制数,并依次用十六进制、十进制显示的程序。
2. 接上题,求将字变量BUF的值乘以上述16进制数,再用十六进制数显示的程序。
3. 在内存的源数据区SOURCE处有若干个ASCII码字符,要求将其中的英文大写字母转换为小写字母,其它字符不转换,并存放到结果数据区DEST处。已知数据区如下。
DATA SEGMENT
SOURCE DB ‘BEIjin2008OLYMPIC’
COUNT EQU $-SOURCE ;字符个数
DEST DB COUNT DUP(?)
DATA ENDS
4. 修改上述程序:将输入到数据区DEST处的字符串在屏幕上显示出来。
5. 将以下参考程序段中第3到9题补充完整再上机验证。
供参考的程序段:
(1)二进制数转换为十六进制数显示。
(2)ASCII码表示的十进制数转换为二进制数并显示。要求在数据区设置要求显示的BUF数据,DB类型
(3)以移位方式显示16进制数(要求在数据区设置用来变十六进制数的数D0,例如 D0 DW 1234h)
(4)ASCII码表示的十六进制数到二进制数的转换
(5)十进制数的ASCII码转换为压缩型BCD码。要求在数据区有ASC_BUF、BCDBUF二个数据集,由若干个十进制数的ASCII码字符组成,要定义其长度放到COUNT中。
(6)BCD码转换为十进制数的ASCII码,要求在数据区有ASC_BUF数据,DB类型,共3个数据。
(7)双字除10取余求变10进制数(设双字在DX AX中,除数10在BX中,在数据区中准备字节类型10个字数据区D:D DB 10 DUP(?) )
(8)利用10号DOS中断输入1到10个10进制数,求变成2进制数存到DX AX中。
(9)在数据区SOURCE处有20个字节无符号数,计算其累加和。
实验8 用循环程序设计方法解串操作问题实验
1、如果有字节变量X,存放一个字母,在DEST数据区存放有一字符串,求在该字符串中查找该字母,如果找到,显示该字母及该字母所在位置的偏移地址。
2、接上题,如果有字变量X,存放二个字母,求在DEST数据区查找该二字母,如果找到,显示该字母所在位置的偏移地址。 (附实现程序)
3、在数据区SOURCE处有20个字节无符号数,计算其累加和,结果存放在符号地址RESULT字单元处并在屏幕上显示。 (附实现程序)
4、从键盘输入一个字符串,然后在下一行以相反的顺序显示出来。 (附实现程序)
5、有一个长度COUNT的字节类型的串BUF,用程序对这个串进行从小到大的排序,要求分别用气泡法、选择法、插入法完成。 (附实现程序)
6、假设待匹配的元素存放在KEY单元中,且LIST表为一个所有元素已按从小到大顺序排列的有序表。编制程序实现在LIST表中用折半查找法查找是否有与KEY单元中的内容相匹配的元素,若查找到将其在表中的地址存入ADR单元;若未找到则将ADR单元置全1。 (附实现程序)
7、比较A、B两个串的大小,如果A串大,显示A;如果B串大,显示B;否则,显示E。
实验9 利用子程序实现数据变换与数据处理的程序设计
1. 在数据区中有如下定义,要求首先将有关常量存放到数据区BUF中,再编一个循环程序,使依次以10进制形式显示各变量的值(不要求显示变量名)。要求将10进制形式显示程序段利用子程序进行设计。 (附实现程序)
NUM1 EQU 25*4-50
NUM2 EQU NUM1/7
VAR1 DB 1,2,3,4,5
VAR2 DB '12345'
NUM4 EQU VAR2-VAR1
NUM5 EQU 0FH
BUF DB 7 DUP(?)
2. 利用子程序结构将八位无符号二进制数转换为十进制数的ASCII码并显示。 (附实现程序)
3. 用子程序形式求解实验7第3题:在内存的源数据区SOURCE处有若干个ASCII码字符,要求将其中的英文大写字母变换为小写字母,其它字符不变换,并存放到结果数据区DEST处。 (附实现程序)
4. 修改上述程序:利用9号系统功能调用将输入到数据区DEST处的字符串在屏幕上显示出来。
5. 用子程序形式求解实验8第3题:在数据区SOURCE处有20个字节无符号数,计算其累加和,结果存放在符号地址RESULT字单元处。要求以16进制形式在屏幕上显示结果。
6. 求将一个16位二进制数转换为任意P(0到19)进制数,P从键盘输入并显示(超过9的数字按:10用A,11用B,……,19用I表示)。 (附实现程序)
7. 求一个小于65535的整数N的因数分解,即将一个整数分解成质数的乘积。
分析:因数分解的方法是从I=2起,看能否整除N,如果能,则I为一个质数,记下整除后的数代换N并继续整除到不能整除为止。再将I加1后继续,……,直到I大于被除数为止。 (附实现程序)
8. 计算:f=