附录5 实验指导
附录5 实验指导
实验1DEBUG及DOS常用命令使用
【实验目的】
1.掌握DOS命令:DIR,CD,DEL,RENAME,COPY。
2.掌握DEBUG命令:A,D,E,F,H,R,T,U,G。
【实验内容及步骤】
一、DOS常用命令练习
1.用DIR命令查看C,D等盘上的文件。
2.用命令COPY将DEBUG.COM复制为文件名为BEG文件。
3.用命令RENAME将文件BEG改为BG文件名。
4.用命令DEL将文件BG删除。
5.从当前盘转到D,E等盘。
6.从当前盘转到D盘下的子目录中去。
在操作时要注意提示信息,并按提示操作。
二、DEBUG命令使用
1.打DEBUG进入DEBUG控制,显示提示符“_”。
2.用命令F10010F“A”将“A”的ASCII填入内存。
3.用命令D10010F观察内存中的16进制码及屏幕右边的ASCII字符。
4.用命令F11011F41重复上两项实验,观察结果并比较。
5.用命令E100303132…3F将30H~3FH写入地址为100开始的内存。
单元中,再用D命令观察结果,看键入的十六进制数是什么字符的ASCII码。
6.用H命令检查下列各组十六进制数加减结果并和你的手算结果比较:
(1)34H,22H;(2)56H,78H;(3)A5,79H;(4)1284H,5678H;(5)A758,347FH。
7.用R命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP,以及标志位中ZF,CF和AF的内容。
8.用R命令将AX,BX内容改写为1050H及23A8H。
9.如何退出DEBUG?
三、用DEBUG练习常用指令
1.传送指令
(1)用A命令在内存100H处键入下列内容:
MOVAX,1234
MOVBX,5678
XCHG AX,BX
MOVAH,35
MOVAL,48
MOVDX,75AB
XCHG AX,DX
(2)用U命令检查键入的程序并记录,特别注意左边的机器码。
(3)用T命令逐条运行这些指令,每运行一行检查并记录有关寄存器及IP的变化情况,并注意标志位有无变化。
2.加减法指令
(1)用A命令在内存100H处键入下列内容:
MOVAH,34
MOVAL,22
ADDAL,AH
SUBAL,78
MOVCX,1284
MOVDX,5678
ADDCX,DX
SUBCX,AX
SUBCX,CX
(2)用U命令检查键入的程序及对应的机器码。
(3)用T命令逐条运行这些指令,检查并记录有关寄存器及ZF情况。
3.带进位加减法
(1)用A命令在内存200H处键入下列内容,并用U命令检查:
MOVAH,12
MOVAL,84
MOVCH,56
MOVCL,78
ADDAL,CL
ADCAH,CH
MOVDH,A7
MOVDL,58
SUBDL,7F
SBBDH,34
(2)用T命令逐条运行这些指令,检查并记录有寄存器及CF内容。
(3)上面这段程序若改用16位操作指令达到同样结果,应怎么修改?试修改并运行之。
4.BCD加减法
(1)内容:
MOVAL,58
ADDAL,25
DAA
(2)要求:用A命令键入,用U命令检查,用T命令逐条运行并记录有关寄存器及AF内容。
【实验报告要求】
(1)十六进制数加减法手算结果及实验结果。
(2)常用指令练习部分的逐条运行记录,思考结果及自编程序运行记录。
(3)列出自编程序段。
实验2熟悉寻址方法及指令系统
【实验目的】
(1)熟练掌握DEBUG的常用命令,学会用DEBUG调试程序。
(2)8086/8088系统中数据在内存中的存放方式和内存操作数的几种寻址方式。
(3)掌握简单指令的执行过程。
【实验内容及步骤】
一、内存操作数及各种寻址方式使用
MOVAX,1234
MOV[1000],AX
MOVBX,1002
MOVBYTEPTR[BX],20
MOVDL,39
INCBX
MOV[BX],DL
DECDL
MOVSI,3
MOV[BX+SI],DL
MOV[BX+SI+1],DL
MOVWORDPTR[BX+SI+2],2846
(1)用DEBUG的A命令键入上述程序,并用T命令逐条运行。
(2)每运行一条有关内存操作数的指令,要用D命令检查并记录有关内存单元的内容并注明是什么寻址方式。
注意D命令显示结果中右边的ASCII字符及双字节数存放法。
思考:有关指令中BYTEPTR及WORDPTR伪操作不加行不行?
二、多字节加法程序
MOVDI,1000
MOVCX,8
MOVSI,2000
CLC
LOP:MOVAL,[SI]
ADC[DI],AL
INCSI
INCDI
LOOPLOP
MOVAH,4CH
INT21H
(1)用命令键入此程序。
(2)用E命令在1000H开始处键入一个8字节被加数,在2000H开始处键入一个8字节加数,均为低字节在前面。
(3)用G命令运行此程序,并用D命令检查其结果(存放在哪里)是否正确?
(4)将INT20H指令改为INT3,有何区别?若这条指令不加,行不行?
三、自编程序
用16位减法指令编一个32位(4字节)数减法程序,两个源数及结果存放。地址同上题。调试并做记录。
【实验报告要求】
(1)程序说明,包括程序的功能、结构。
(2)调试说明,包括上机调试的情况、上机调试步骤、调试所遇到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。
(3)写出源程序清单和执行结果。
实验3汇编语言程序上机过程
【实验目的】
(1)掌握常用工具软件EDIT,MASM和LINK的使用。
(2)掌握汇编语言上机步骤。
(3)伪指令:SEGMENT,ENDS,ASSUME,END,OFFSET,DUP。
(4)用INT21H 4C号功能返回系统的方法。
【实验内容及步骤】
(1)用文字编辑工具(记事本或EDIT)将下列程序输入,其扩展名为.ASM。
DATASEGMENT
STRINGDB″HOW AREYOU!″,?
DATAENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA
START:MOVAX,DATA
MOVDS,AX
LEASI,STRING
AGAIN:MOVAL,[SI]
ORAL,AL
JZEXIT
CMPAL,'A'
JBNEXT
CMPAL,'Z'
JANEXT
ORAL,20H
MOV[SI],AL
NEXT:INCSI
JMPAGAIN
EXIT:MOVAH,4CH
INT21H
CODEENDS
ENDSTART
(2)用MASM对源文件进行汇编,产生.OBJ文件和.LST文件。若汇编时提示有错,用文字编辑工具修改源程序后重新汇编,直至通过。
(3)用TYPE命令显示(2)产生的.LST文件。
(4)用LINK将.OBJ文件连接成可执行的.EXE文件。
(5)在DOS状态下运行LINK产生的.EXE文件,用DEBUG检查程序结果。
【实验报告要求】
(1)汇编、连接及调试时产生的错误,其原因及解决办法。
(2)若在源程序中把INT21H的“H”省去,会产生什么现象?
(3)把INT21H 4CH号功能改为INT20H,行不行?
实验4二进制数、BCD码及ASCII码间转换
【实验目的】
(1)二进制数、BCD码和ASCII码之间的关系。
(2)如何用逻辑指令完成它们之间的转换。
(3)二进制数转换为十进制数的方法。
【实验内容及要求】
(1)将非压缩的BCD码转换为ASCII码,方法是将BCD码与30H相加及与30H相或。
(2)将数字的ASCII码转换为二进制数,方法是将ASCII码减30H及与0FH相与。
(3)将存储单元A中的无符号字节数转换成压缩的BCD码后,存入B单元中。
【实验报告要求】
(1)各项实验记录。
(2)调试说明,包括上机调试的情况、上机调试步骤、调试所遇到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。
(3)写出源程序清单和执行结果。
(4)实验体会。
实验5条件转移指令使用
【实验目的】
(1)8086/8088指令中的有条件和无条件转移指令应用。
(2)有符号数和无符号数用的转移指令的比较。
【实验内容及要求】
(1)编制一个程序,把变量X和Y中较大的数存入BIG中,若X=Y,则把其中之一存入BIG中。
(2)从键盘上输入一个字符,判断是否为“a”,若是,则输出“YES!”;否则输出“NO!”。比较两个例子中用到的转移指令,如果用错了,会产生什么结果?
【实验报告要求】
(1)程序说明。说明程序的功能、结构。
(2)调试说明。包括上机调试的情况、上机调试步骤、调试所遇到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。
(3)画出程序框图。
(4)写出源程序清单和执行结果。
(5)实验体会。
实验6分支程序设计
【实验目的】
(1)掌握分支程序的结构。
(2)掌握分支程序的设计、调试方法。
(3)掌握分支判断语句应用。
【实验内容及要求】
(1)在变量单元A、B、C中存放三个数,若三个数都不为0,则求出3个数之和存入D中;若有一个为0,则其他两个单元也清0。
本实验要求在DEBUG调试状态下检查程序结果。
(2)编制一个能循环显示十条新闻标题的控制程序,每条新闻的地址转换表NEWS放在数据区中。
【实验报告要求】
(1)程序说明。说明程序的功能、结构。
(2)调试说明。包括上机调试的情况、上机调试步骤、调试所遇到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。
(3)画出程序框图。
(4)写出源程序清单和执行结果。
(5)实验体会。
实验7循环程序设计
【实验目的】
(1)掌握循环程序的设计方法。
(2)加深对循环结构的理解。
(3)掌握循环结构中转移指令的使用。
【实验内容及要求】
(1)将从3000H内存单元开始的100个字节存储单元全部清0。
(2)有一数组含有10个数,编程将其排列成升序。
本实验要求在DEBUG调试状态下检查程序结果。
【实验报告要求】
(1)程序说明。说明程序的功能、结构。
(2)调试说明。包括上机调试的情况、上机调试步骤、调试所遇到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。
(3)画出程序框图。
(4)写出源程序清单和执行结果。
(5)实验体会。
实验8子程序设计
【实验目的】
(1)掌握子程序设计方法,合理划分层次。
(2)掌握子程序的调用与返回的方法。
(3)了解子程序的嵌套与递归。
【实验内容与要求】
编制一程序,要求键入一个班的学生成绩,并存放于50字的ERADE数组中,然后根据ERADE中的成绩,把学生名次填入50字的RANK数组中,再按学号顺序把名次从终端上显示出来。
其程序流程图如图S-1所示。提示:
①程序MAIN
功能:根据输入的学生成绩,计算并显示出学生名次。
②子程序INPUT
功能:接收一个班级学生的成绩,各成绩之间用空格隔开。
③子程序RANKP
功能:计算一个班级学生的名次。
④子程序OUTPUT
功能:输出(显示)一个班级的学生名次。
⑤子程序DECIBIN
功能:十进制转换二进制,存入BX。
⑥子程序BINIDEC
功能:十进制转换二进制,并在屏幕上显示。
⑦子程序DECIDIV
功能:BX的内容除以CX的内容,并在屏幕上显示一位商。
【实验报告要求】
(1)程序说明。说明程序的功能、结构。
(2)调试说明。包括上机调试的情况、上机调试步骤、调试所遇到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。
图S-1 程序流程图
(3)写出源程序清单和执行结果。
(4)实验体会。
实验9DOS和BIOS调用程序设计
【实验目的】
(1)掌握DOS21H中断中01H、02H、09H、0AH调用使用。
(2)掌握显示器I/O中断调用(10H)使用。
【实验内容及要求】
(1)利用INT21H中的09号功能调用显示字符串“Thisisasample!”。
(2)利用INT21H中的02号功能显示字符串“Thisisasample!”。
(3)先调用INT21H中的0A号功能向BUF为首地址存储区输入“Thisisasample!”。然后调用2号显示。
(4)编写一个程序要求在9行40列的位置显示“方块”(ASCII码为04)。要求“方块”为黑色且闪动,背景选为白色(即白底黑字)。
【实验报告要求】
(1)各项实验记录及观察体会。
(2)如果程序不采用4CH退出,还有没有其他方法或其他调用退出程序?
(3)利用INT21H调用02H和09H在显示结果上有什么不同?
(4)自编程序草稿及调试结果。
(5)实验体会
实验10综合程序设计
【实验目的】
(1)掌握分支、循环、子程序调用、DOS功能调用等基本的程序结构。
(2)掌握综合程序的编制及调试方法。
【实验内容及要求】
设有10个学生成绩分别是76,69,84,90,73,88,99,63,100和80分。试编制一个子程序,统计低于60分,60~69分,70~79分,80~89分,90~99分和100分的人数,并输出显示统计结果。
编程提示:
(1)成绩分等部分采用分支结构,统计所有成绩则用循环结构完成,显示统计结果采用DOS功能调用。
(2)统计学生成绩和显示统计结果两部分内容用子程序结构来完成。
【实验报告要求】
(1)程序说明。说明程序的功能、结构。
(2)调试说明。包括上机调试的情况、上机调试步骤、调试所遇到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。
(3)画出程序框图。
(4)写出源程序清单和执行结果。
(5)实验体会。