附录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)调试说明。包括上机调试的情况、上机调试步骤、调试所遇到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。

img127

图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)实验体会。