发展部件技术分享 http://blog.sciencenet.cn/u/求新 研究方向:数据库、MIS,教育部教指委计算机分委会专家工作组成员

博文

汇编语言实验手册详细目录

已有 12689 次阅读 2009-2-16 12:27 |个人分类:生活点滴|系统分类:教学心得|关键词:学者| 实验, 程序设计, 汇编

              实验手册详细目录

实验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.求一个数X9-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. 单步运行以下82进制数加法:88H+0CH0CEH+0C4H0CEH+84H162进制数加法:9588H+720CH9588H+0B284H运算程序,对每次运算分析其对标志位的影响。记录实验结果,并与分析结果比较。

     2. 分析以下程序功能是什么?分析其每一次算术运算对标志位的影响。记录实验结果,并与分析结果比较。

     3. 已知数据存储区如下所示,DN1DN2均为双字,自编程序段:计算DN1+DN2,将结果放到DSUM中。上机验证,报告其中各进行算术运算后对标志位影响的情况。          

     4. 修改上面的程序,将运行结果以16进制形式在屏幕上显示。

     5. 按下列要求编写指令序列上机实现

     1)清除DH中最低3位而不改变其他位,结果存入BH

     2)将DL中最高3位置1而不改变其他位。

     3)将AX0~3位置17~9位取反、其他位清0

     4)检查BX中第259位是否至少有1位是1

     5)检查CX中第1611位是否同时为1

     6)检查BX中第02913位是否至少有1位是0

     7)检查DX中第141114位是否同时是0

     6. 编写指令序列实现:

     1)右移DL 3位,并将0移入最高位。

     2)将AL左移一位,将0移入最低位。

     3DX右移6位且保持正负特性不变。

     4)将AL中压缩BCD码变成AX中的非压缩BCD码。

     7.设A,B,C8位带符号数,D16位带符号数,计算算术表达式((A*B-32486H)+C)/D的值,结果中的商存放到(AX)寄存器中(假设D的值足够大),余数存放到(DX)寄存器中。

附:供参考程序段:

     1. 双字加法程序段

     2. 16进制形式在屏幕上显示二进制数据程序段

     3. 清除DH中最低3位而不改变其他位,结果存入BH

     4. DL中最高3位置1而不改变其他位,结果存入BH

     5. AX0~3位置17~9位取反、其他位清0

     6. 检查BX中第259位是否至少有1位是1

     7. 检查CX中第1611位是否同时为1

     8. 检查BX中第02913位是否至少有1位是0

     9. 检查DX中第141114位是否同时是0

     10. 右移DL 3位,并将0移入最高位。

     11. AL左移一位,将0移入最低位。

     12. DX右移6位且保持正负特性不变。

     13. AL中压缩BCD码变成AX中的非压缩BCD码。

 

实验6  自编有关双精度数据运算及逻辑运算、移位程序

     1. 设数据区有双精度数据AB 定义例如:A  DD  2A3D0B2CH

                                      B  DD  2573ADEH

   求自编程序,计算AB的和与差,并用二进制形式分别显示。

     2. 设数据区有双精度数据AB 定义如上,求自编程序,计算AB的积,并用十六进制形式显示。

     3. 自编程序,任意设AX的值,求将其中135位清0249位置167位求反。分别用二进制形式显示原数据及处理后的数据。

     4. 自编程序,任意设4位压缩BCD码数据放到AX中,求用移位方法及2DOS中断显示其值。

     5. 设数据区有压缩BCD码数据AB 定义例如:A  DW  2937H

                                         B  DW  877H

   求自编程序,计算AB的和,并用十进制形式显示。

     6. 设数据区有非压缩BCD码数据AB 定义例如:A  DW  0907H

                                           B  DW  0807H

   求自编程序,计算AB的和,并用十进制形式显示。

     7. 设计求两个二位压缩BCD码的乘积(用压缩BCD码表示)的程序。(例如86H*39H,结果为3354H

     8. 设计求四位压缩BCD码除以二位压缩BCD码表示的程序。(例如8390H÷29H,结果为289H9

     9. 设数据区有双精度数据A、字类型数据B ,求自编程序,计算A/B的商与余数,各用十进制形式显示。

     10. 设数据区有双精度数据AB ,求自编程序,计算A/B的商与余数。,各用十进制形式显示。

供参考的程序段:

     (1)以二进制形式显示任意字符的ASCII码(要求在数据区设置ADB类型)

     (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码的减法运算;已知AX1234HBX4612H,计算12344612的差

     (8)非压缩BCD码的加法运算

     (9)非压缩BCD码的减法运算

     (10)一位非压缩BCD码的乘法运算

     (11)非压缩BCD码的除法运算

     (12)两个二位压缩BCD码的乘积(用压缩BCD码表示)。

     (13)设计求四位压缩BCD码除以二位压缩BCD码表示的程序。(例如8390H÷29H,结果为289H9

     (14)双字加法

     (15)双字除单字除法(设被除数在DX AX中,除数在BX中,在数据区中准备字类型3个字数据区CC  DW ?,?,?

     (16)双精度数减法

 

实验7  循环程序设计练习

     1. 求利用2号中断接受从键盘输入的最多416进制数字组成一个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. 将以下参考程序段中第39题补充完整再上机验证。

供参考的程序段:

     (1)二进制数转换为十六进制数显示。

     (2)ASCII码表示的十进制数转换为二进制数并显示。要求在数据区设置要求显示的BUF数据,DB类型

     (3)以移位方式显示16进制数(要求在数据区设置用来变十六进制数的数D0,例如  D0 DW 1234h)

     (4)ASCII码表示的十六进制数到二进制数的转换

     (5)十进制数的ASCII码转换为压缩型BCD码。要求在数据区有ASC_BUFBCDBUF二个数据集,由若干个十进制数的ASCII码字符组成,要定义其长度放到COUNT中。

     (6)BCD码转换为十进制数的ASCII码,要求在数据区有ASC_BUF数据,DB类型,共3个数据。

     (7)双字除10取余求变10进制数(设双字在DX AX中,除数10BX中,在数据区中准备字节类型10个字数据区DD  DB 10 DUP(?) 

     (8)利用10DOS中断输入11010进制数,求变成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、比较AB两个串的大小,如果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. 用子程序形式求解实验73题:在内存的源数据区SOURCE处有若干个ASCII码字符,要求将其中的英文大写字母变换为小写字母,其它字符不变换,并存放到结果数据区DEST处。       (附实现程序)

     4. 修改上述程序:利用9号系统功能调用将输入到数据区DEST处的字符串在屏幕上显示出来。

     5. 用子程序形式求解实验83题:在数据区SOURCE处有20个字节无符号数,计算其累加和,结果存放在符号地址RESULT字单元处。要求以16进制形式在屏幕上显示结果。

     6. 求将一个16位二进制数转换为任意P019)进制数,P从键盘输入并显示(超过9的数字按:10A11B,……,19I表示)。       (附实现程序)

     7. 求一个小于65535的整数N的因数分解,即将一个整数分解成质数的乘积。

分析:因数分解的方法是从I=2起,看能否整除N,如果能,则I为一个质数,记下整除后的数代换N并继续整除到不能整除为止。再将I1后继续,……,直到I大于被除数为止。       (附实现程序)

     8. 计算:f= +  

其中xy为整型数据,分别存放在XBUFYBUF单元中,所得结果f存放在FBUF中。要求将FBUF中数据在屏幕上显示。       (附实现程序)

 

实验10  利用子程序进行串处理及有关日期的程序设计

     1. 要求自行设定二个字类型的串STRING1STRING2的内容,用程序对这二个串进行比较,如果相等,0BX,否则,0FFFFHBX。设串长为COUNT。最后分别以16进制形式显示BXSTRING1STRING2的内容。

     2. 已知程序段如下,将它补充完整,使能将结果(BX的值)以16进制形式在屏幕上显示,根据显示情况分析说明其功能是什么?要求将16进制显示程序段利用子程序进行设计。       (附实现程序)

     3. 对程序段进行补充设计,要求对设计加详细注释。要求自行设定一个长度COUNT的字节类型的串STRING的内容,用程序对这个串进行搜索,如果搜索到字节类型数据A ,显示当前位置(字长)。STRINGCOUNTA的内容自行设计。

     4. 在一个串中查找一个字符,显示查到该字符的次数。        (附实现程序)

     5. 在一个串中查找一个字符,显示所有查到位置的地址。如果没有欲查字符,显示“-1        (附实现程序)

     6.在一个串中查找另一串,如果找到,将查到串的首地址存到DI中。       (附实现程序)

     7.求编写显示系统的当前日期和时间的程序。要求程序运行时显示的信息格式为:

Current date is 10-30-2008. Current time is 10:23:26.12       (附实现程序)

     8. 设计一个万年历程序。已知200811为星期二,求2008年之后21世纪的某年某月某日是星期几?不考虑输入错误。       (附实现程序)

 

实验11  宏汇编程序设计

     1. 求三个字节变量x, y, Z的值的平均值,并显示其整数部分。       (附实现程序)

     2. 编一个菜单程序,在屏幕上显示各菜单项提示,当用户选择并输入12时调用相应宏程序MACRO1MACRO2MACRO1将字符串中小写字变大写。MACRO2将字符串中大写字变小写。       (附实现程序)

     3.设计从键盘输入AB二个数,求其和并显示的程序(AB的和不大于65535)。要求将其中键盘输入、求和、显示的程序分别用宏程序实现。       (附实现程序)

     4.求建立宏库MACRO1.lib

     5.将实验678中供参考的程序段改造成宏程序,并添加到宏库MACRO1.lib中去。要求宏体开始处将其中与输入、输出参数无关的所以涉及的寄存器中数据压入堆栈保护。

 

实验12  递归程序与浮点运算

     1. 利用递归程序求数组最大值。       (附实现程序)

     2. 有二个正整数MNM>=N),求它们的最大公约数,放到DIVISO中。       (附实现程序)

     3. 斐波那契的兔子问题:假定小兔子一个月后可以长成大兔子,二个月及之后的大兔子每个月都会生出一对小兔子。如果年初养了一对小兔子,问到年底时将有多少对兔子?       (附实现程序)

     4. Hanoi塔的递归程序       (附实现程序)

     5. 假设有两个浮点数,其中被加数在双字变量BUF1中,加数在双字变量BUF2中。试计算其和并置于BUF3中。       (附实现程序)

 

实验13  BIOS功能调用程序设计

     1. 读键盘,把用户所按键显示出来,若用户按下SHIFT键,则结束运行。写出完成该功能的程序。       (附实现程序)

     2. 单色文本显示方式举例。在屏幕上的第9行第16列的位置显示一个“黑桃”(对应的ASCII码为06H),要求“黑桃”为黑色且闪动,背景选为白色(即白底黑字)。       (附实现程序)

     3. 彩色文本显示方式举例。以蓝色为背景,在102023列显示四个“梅花”(ASCII码为5,梅花的颜色分别选为红、绿、黄和黑色。          (附实现程序)

     4. 彩色图形显示方式举例。在屏幕中间显示彩色的梯子。       (附实现程序)

     5.在数据区设置变量X,其值为2040之间数,求在屏幕中心显示一个正方形,边长等于X

     6. 如果已知二个点的坐标(X1Y1)与(X2Y2),画出连接这两点的连线,假设X2>X1       (附实现程序)

     7.在屏幕上设置鼠标位置。       (附实现程序)

     8. 已知汉字字模如图所示,求显示该二汉字。如果欲将其长宽均放大一倍,求显示。如果长宽缩小一半,求显示。说明出现的问题。       (附显示汉字实现程序)

 

实验14  有关声音的程序设计

     1. 编写通用发声子程序,它能利用定时器发出指定频率的声音。在DI中存放指定的发声频率,利用BX控制延时时间的计数初始值       (附实现程序)

     2. 试编写发声程序,利用定时器发出音乐1234567ⅰ。       (附实现程序)

     3. 设计一个虚拟钢琴程序,手按键盘,根据键盘输入的数据进行演奏。       (附实现程序)

     4.编写一个游戏程序,实现如下功能:(1)首先用蓝色清屏。(2       在在屏幕中央显示由字符串“-============#”组成的黄色的小蛇,#为蛇头,-为蛇尾。(3  按下方向键可以控制上述小蛇按蛇行方式在屏幕上行走。       (附实现程序)

 

实验15  文件处理

     1. 利用顺序存取方式建立一个文件 FILE1.DAT ,再将预先存放在数据区中的数据顺序写到文件中。       (附实现程序)

     2. 从文件FILE1.DAT读入一条记录再写入到文件FILE2.DAT中。       (附实现程序)

     3. 利用随机存取方式建立一个文件 FILE1.DAT ,从键盘输入数据存放在数据区中,再将存放在数据区中的数据写到文件中。       (附实现程序)

     4. 求编程序:从键盘输入20H个字符到利用扩充文件管理方式建立的文件 FILE1.DAT       (附实现程序)

     5. 求编程序:将数据从文件 FILE1.DAT读取10H个字符到文件 FILE2.DAT中。       (附实现程序)

     6. 利用扩充文件管理方式从文件FILE1.DAT中读出全部内容,再转存到文件FILE2.DAT的原内容的后面。       (附实现程序)

     7. 从文件FILE1.DAT中读出从N1,长度为N2的字符串,在屏幕上显示。N1N2为十进制数。       (附实现程序)

     8. 读出文件FILE1.DAT的内容,在屏幕上显示。每次读1200个字符,文件最大64K       (附实现程序)

     9. 设数据区中有定义:DATA1    DB 100H   DUP(0) FNAME  DB  'FILE1.DAT'  FCB1     DB 100H   DUP(0)。求利用顺序或随机存取方式建立一个文件 FILE1.DAT ,再将数据区DATA中的数据写到文件中。以下给出程序段,请补充完整并上机验证。

     10. 查出C盘上所有文件名并写入到文件FilEl.DAT中。       (附实现程序)

     11. 读出D盘目录MASM5中的文件FILE1.DAT的日期与时间。        (附实现程序)

     12. 求显示某文件夹下文件目录名称。       (附实现程序)

 

实验16  结构类型及其他程序设计

     1. 设成绩表数据按如下结构组织。所有数据按左靠齐存放。求填写各人分数排名。

学号(长度:5  姓名(长度:8  分数(长度:1   排名(长度:2       (附实现程序)

     2. 设成绩表数据按如下结构组织。所有数据按左靠齐存放,求按分数排名对记录排序。

;学号(长度:5 姓名(长度:10       分数(长度:1         (附实现程序)

     3. 设成绩表数据结构与第二题相同。求录入一条新记录到所有记录之后的程序。       (附实现程序)

     4. 设成绩表数据结构与第二题相同。求根据姓名查找并删除所查到记录的程序。       (附实现程序)

     5. 已知数据表结构如表所示,数据从文件FILE1.DBF起始位置开始,均以ASCII码形式存放,每列中的数据长度相同,见标在表中的数据。各行的长度也为定值,等于各列长度之和。求设计依次显示表中各人年龄的程序,年龄以二位ASCII码形式存放。(附实现程序)

              数据表结构

序号(长度:4  姓名(长度:8  年龄(长度:2

1                     Chen                 23

2                     Wang                25

6. 已知数据表结构及文件结构与上题相同,求编修改程序:根据键盘输入的人的姓名查找行(记录),再将键盘输入的数据去修改表中年龄数据。 (附实现程序)

7. 计算B/A的值。利用条件汇编判断A是否为0后再处理。(附实现程序)

8. 编写在内存中驻留时钟显示的程序(附实现程序)

9. 编写驻留内存显示键盘缓冲区数据程序(附实现程序)

 

附录 输入输出程序设计

1、已知8279LED显示器及小键盘连接如图所示, 8279的片选CS79连至译码处的210~2178279工作方式为:左边输入,八位显示,外部译码,双键互锁。求设计程序:(1)将键盘接收到的字符送到计算机的显示器上显示。(2)在数据区定义二个压缩BCD码,求和后在LED上显示。

2、某实验系统将8255的片选CS55连至译码处的200~2078255PA口分接4个四个双色灯按要求发光。双色灯接法如下图所示。双色LED是由一个红色LED管芯和一个绿色LED管信封装在一起,公用负端。当红色正端加高电平,绿色正端加低电平时,红灯亮;红色正端加低电平,绿色正端加高电平时,绿灯亮;两端都加高电平时,黄灯亮。求设计程序:状态1为:南绿东红北黄西黄灯;延时后状态2:南黄东绿北红西黄灯;再延时后状态3:南黄东黄北绿西红灯;再延时后状态4:南红东黄北黄西绿灯;再反复循环至状态1

3、编写一个程序完成两台计算机通过COM2端口进行串行数据通信。要求从一台计算机上输入字符传送到另一台计算机上,若按下ESC键,则退出程序。COM2端口初始化为4800波特/秒,8位数据位,无校验,1位终止位。

4、在AB两台微机之间实现串行通信,A机发送,B机接收。要求把A机中的200个字符传送到B机中。

分析:CPU8251之间采用查询方式控制数据传输过程,异步传送。发送方CPU每查询到TXRDY有效,则向8251A并行输出一个字节数据;接收方CPU每查询到RXRDY有效,则从8251接收一个字节数据,一直进行到全部数据传送完毕为止。假设传送时数据位为2位、1位停止位、波特率因子为64、偶校验。8251的命令/状态端口地址为309H,数据端口为308H



https://m.sciencenet.cn/blog-2551-215317.html

上一篇:汇编语言实验手册前言
下一篇:汇编语言实验园地_10

0

发表评论 评论 (3 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-5-22 02:42

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部