资源描述
《汇编语言》实验指导书
目 录
实验一 Debug命令的使用………………………………3
实验二 基本汇编指令的使用 ……………………………7
实验三 汇编语言程序的调试与运营……………………10
实验四 系统功能调用程序的调试与运营………………15
实验五 分支程序设计……………………………………17
实验六 循环程序设计……………………………………20
实验七 子程序设计………………………………………23
实验八 高级汇编语言程序设计…………………………25
实验九 I/O程序设计 ……………………………………30
实验十 中断程序设计……………………………………33
实验十一 综合程序设计…………………………………38
实验一 Debug命令的使用
一、 知识点
1、 DEBUG简介
DEBUG.EXE是DOS提供的用于调试可执行程序的一个工具软件。在汇编语言程序调试中很常用。
DEBUG的提醒符是“-”,所有DEBUG调试命令军在此提醒符下输入。
DEBUG命令都是一个字母,后跟一个或多个参数,也可使用默认参数。
DEBUG命令的使用注意问题:
(1) 字母不分大小写
(2) 只使用十六进制数,但没有带后缀字母“H”
(3) 命令假如不符合DEBUG的规则,则将以“error”提醒,并以“^”指示犯错位置。
(4) 每个命令只有按下回车键后才有效,可以用Ctrl+Break终止命令的执行。
2、 Debug的调入和退出
以WIN2023环境为例,点击“开始/运营…”,在“运营”对话框中输入命令:cmd,然后点击“拟定”,进入DOS命令行状态:
C:\Documents and Settings\lfy>
然后输入命令:
>Debug
进入Debug调试状态,出现Debug命令提醒府“-”,在此提醒符下可运营所需要的Debug命令了。
退出Debug的命令:Q
3、 Debug常用命令
(1) 汇编命令A,格式为:
- A [地址]
功能:从指定地址开始允许输入汇编指令,并将该指令汇编成机器指令代码从指定地址开始存放。若不指定地址,则系统从默认的地址开始存放。按回车键退出汇编状态
应用:用于调试一条指令或几条指令组成的一个程序段。
(2) 显示和修改寄存器命令R,格式为:
- R [寄存器名]
功能:若指定寄存器,则显示指定的寄存器的内容,并可进行修改;若不要修改,则按Enter健。若未指定寄存器,则默认为显示所有寄存器的内容。
应用:常用于通过寄存器的值查看指令的执行结果。
(3) 内存单元内容的命令E,格式为:
- E 地址 [内容表]
功能:若指定内容表,则用内容表中的内容代替指定地址开始的存储单元的值;否则,从指定地址开始逐个单元显示其内容,并等待用户修改,按空格键则继续显示下一单元的值,按回车键结束。例如:
-E 100
184E: 0100 89,78
其中,184E时数据段的段地址,0100是要修改的单元的偏移地址,89为该单元的值,78为程序员键入的值。结果0100单元的值由89H改变为78H。
应用:常用于在调试程序的过程中改变变量的初始值。
(4) 显示内存单元内容的命令D,格式为:
- D [地址] 或 –D [范围]
功能:前者为显示从指定地址开始的一段存储单元的值;后者为显示指定范围内的存储单元的值。
例如: - D 200 ;显示从DS:200单元开始的各单元的值
- D 200 L10 ; 显示从DS:200单元开始的10个字节单元的值。
应用:常用于在调试过程中检查变量的值。
(5) 单步执行命令T,格式为:
- T [=地址]
功能:从指定地址执行一条指令后停下来,显示寄存器内容和状态值。若未指定地址,则执行当前指令的下一条指令。
(6) 反汇编命令 U ,格式为:
-U [地址] 或 -U 范围
功能:从制定地址开始,反汇编32个字节,或对指定范围内的主存内容进行反汇编。若没有指定地址,则接着上一个U命令的最后一个单元开始;若还没有使用过U命令,则从当前CS:IP开始。例如:
-U 100,106
1343:0100 B80302 MOV AX,0203
1343:0103 BB0540 MOV BX,4005
1343:0106 01D8 ADD AX,BX
其中,屏幕最左边是主存逻辑地址(段地址:偏移地址),中间是该指令的机器代码,右边是相应指令的汇编语句格式。
(7) 运营命令G, 格式为:
-G[ = 起始地址] [断点地址1,断点地址2,……,断点地址10]
功能:从等号后的起始地址开始运营,直到碰到断点或程序正常结束。例如:
-G=100 106
则程序执行从100开始的程序段,到断点106停止。此时指令ADD AX,BX并未执行。
二、 实验目的及规定
1、编语言调试环境Debug的使用,重点掌握常用命令(A R D E T)的使用,其他指令在以后的学习中逐步掌握。
2、运用Debug命令,调试采用不同寻址方式的指令的执行结果,从实践中加深对寻址方式和MOV指令的理解。
三、 实验内容
1、 Debug程序的调入和退出
2、 Debug常用调试命令的使用
3、 MOV指令、XCHG指令、XLAT指令的调试
四、 实验环节
说明:
一方面输入以下程序段,然后单步执行并查看结果;改变寄存器AX的初始值后再运营,并查看结果。带下划线的部分为程序员输入的内容。
在DEBUG环境下,所有的数据均以十六进制输入和显示。
-A
137B:0100 mov ax,20
137B:0103 mov bx,ax
137B:0105 add ax,bx
137B:0107 mov [2023],ax
137B:010A
-T=0100
AX=0020 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=137B ES=137B SS=137B CS=137B IP=0103 NV UP EI PL NZ NA PO NC
137B:0103 89C3 MOV BX,AX
-T=0103
AX=0020 BX=0020 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=137B ES=137B SS=137B CS=137B IP=0105 NV UP EI PL NZ NA PO NC
137B:0105 01D8 ADD AX,BX
-T
AX=0040 BX=0020 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=137B ES=137B SS=137B CS=137B IP=0107 NV UP EI PL NZ NA PO NC
137B:0107 A30020 MOV [2023],AX
DS:2023=000
-T
AX=0040 BX=0020 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=137B ES=137B SS=137B CS=137B IP=010A NV UP EI PL NZ NA PO NC
137B:010A 0000 ADD [BX+SI],AL DS:0020=FF
-D 2023 L2
137B:2023 40 00
.
;修改0100处的指令mov ax,20 将AX的初始值改为10,并重新运营
-A 0100
137B:0100 mov ax, 10
137B:0103
;最后一条指令执行的结果如下:
AX=0020 BX=0010 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=137B ES=137B SS=137B CS=137B IP=010A NV UP EI PL NZ NA PO NC
137B:010A 0000 ADD [BX+SI],AL DS:0010=DF
;查看2023单元的值为0020H
-D 2023 l2
137B:2023 20 00
.
;修改2023单元的值,由20h改为30h 并重新显示
-E 2023
137B:2023 20.30
-D 2023 l2
137B:2023 30 00
五、 拓展题
MOV、XCHG、XLAT指令的调试。
规定:用汇编命令A输入以下源程序段,用T命令单步执行,查看执行结果:寄存器或存储单元的值。。
提醒:在DEBUG环境下输入程序段时要省掉立即数后面的字符“H”
1、MOV指令的调试
程序段:MOV AL, 55H
MOV AH, AL
MOV BX, 1000H
MOV BYTE PTR[BX], 66H
MOV WORD PTR[BX+2], 77H
MOV [BX+4], AX
2、 XCHG指令的调试
程序段:MOV AX, 0203H
MOV BX, 0405H
XCHG AX, BX
XCHG BL, BH
3、 XLAT指令的调试
(1) 用E命令从DS:200地址开始输入数据10H、20H、30H、40H、50H
(2) 用A命令输入以下程序段:
MOV BX, 200 ;将数据的首地址送给BX
MOV AL, 4用MOV ;将要查找的数据的偏移地址送给AL
XLAT
;查看结果寄存器AL中的值,以及从DS:200开始的存储单元的值。
六、 实验报告
写出在DEBUG状态下编写、运营程序段的过程以及调试所中碰到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。
实验二 基本汇编指令的使用
一、知识点
1、 最常用的传送指令 MOV
可以将立即数/内存单元的值/寄存器的值送给寄存器,或将立即数/寄存器的值送给内存单元,但不允许两个内存单元之间直接传送。
2、 常用算术运算指令 ADD/ADC/INC、SUB/SBB/DEC/CMP/NEG
两个单字节/单字之间的加法用ADD指令、减法用SUB指令;
多字节/多字之间的加/减,除最低字节/最低字用ADD/SUB指令外,其余字节/字之间的加/减都要用包含进位/借位的ADC/SBB指令。
INC和DEC指令常用于修改计数器或修改指针,常用与循环解决一批数据。
CMP指令常用于比较两个数的关系,为下一步的条件转移做准备(后跟条件转移指令)。
3、 常用逻辑运算指令 AND/OR/NOT/XOR/TEST
AND指令常用于给一个数据的某几位清零;
OR指令常用于给一个数据的某几位置1;
XOR指令常用于将一个数据某几位翻转;
NOT指令常用于将一个数据所有位取反;
TEST指令常用于测试一各数据的某一位或某几位的值,后跟条件转移指令。
4、 常用移位指令 SHL/SHR/SAR/ROL/ROR/RCL/RCR
SHL和SAL功能相同,都是将操作数左移一位或几位,移出的空位补0;
SHR和SAR功能不同,虽都是将操作数右移一位或几位,但左边移出的空位分别补0和1(SHR要补0,SAR补1)。
二、实验目的及规定
1、继续熟悉汇编语言调试环境Debug的使用,掌握常用调试命令。
2、用基本指令编写的程序段,并在Debug环境中调试,从实践中加深对基本汇编语言指令的执行过程的理解。
3、实验前要做好充足准备,涉及汇编程序段清单、调试环节、调试方法,以及对程序结果的分析等。
三、实验内容
1、 单步调试以下程序段,给出每条指令执行后AL的值,以及CF、ZF、SF、OF的状态。
MOV AL, 89H
ADD AL, AL
ADD AL, 9DH
CMP AL, 0BCH
SUB AL,AL
DEC AL
INC AL
2、 编写程序段,分别完毕11223344H与55667788H的加/减计算,并调试、观测结果。
3、 单步调试以下程序段,给出每条指令执行后AL的值,以及CF、ZF、SF、OF的状态。
MOV AX, 1470H
MOV BX, 3060H
AND AX, BX
OR AX, BX
XOR AX, AX
NOT AX
TEST AX,0F0F0H
4、 设(AX)=1234H,写出执行下列每条指令后AX寄存器的内容,并观测CF的变化。
SHL AX, 1
MOV CL, 2
SHL AX, CL
SHR AX, 1
ROL AX, 1
MOV CL, 3
ROL AX, CL
RCR AX,1
MOV CL, 2
RCR AX, CL
四、实验环节
1、运用DEBUG的A命令输入待调试的程序段。
2、运用单步执行命令T逐条执行指令,观测寄存器及相关状态位的值。
以实验内容2中的加法为例,实现加法运算:
注:下划线部分为程序员输入的内容。
(1)-A
1373:0100 MOV AX, 3344 ;DX.AX<- 11223344H
1373:0103 MOV DX, 1122
1373:0106 ADD AX, 7788 ; DX.AX+55667788H->DX.AX
1373:0109 ADC DX, 5566
1373:010D
-T=100
AX=3344 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1373 ES=1373 SS=1373 CS=1373 IP=0103 NV UP EI PL NZ NA PO NC
1373:0103 BA2211 MOV DX,1122
-T
AX=3344 BX=0000 CX=0000 DX=1122 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1373 ES=1373 SS=1373 CS=1373 IP=0106 NV UP EI PL NZ NA PO NC
1373:0106 058877 ADD AX,7788
-T
AX=AACC BX=0000 CX=0000 DX=1122 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1373 ES=1373 SS=1373 CS=1373 IP=0109 OV UP EI NG NZ NA PE NC
1373:0109 81D26655 ADC DX,5566
-T
AX=AACC BX=0000 CX=0000 DX=6688 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1373 ES=1373 SS=1373 CS=1373 IP=010D NV UP EI PL NZ NA PE NC
1373:010D 0000 ADD [BX+SI],AL DS:
;结果:DX.AX=6688AACCH
五、拓展题:
1、 编写程序段:将DX.AX中的双字右移一位。
2、 编写程序段:将AX寄存器的最低4位置1,最高3位清0,第7、8、9位取反,其余位不变。设AX中本来的值为0AAH。
3、 设AX=2AH,BX=30H,编写程序段计算:AX/BX,并将结果送BX.CX。
六、实验报告:
1、写出源程序段清单、程序说明、执行结果。
2、调试说明。涉及上机调试的情况、上机调试环节、调试所碰到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。
实验三 汇编语言程序的调试与运营
一. 知识点
1、 汇编语言源程序的格式
完整的汇编语言源程序由段组成,即代码段、数据段、附加段和堆栈段。其中,需要独立运营的程序必须包含一个代码段,并指示程序执行的起始点,一个程序只有一个起始点。
例如,输出一个字符串的源程序:
.model small ;定义程序的存储模式(小型程序一般采用小模式)
.stack ;定义堆栈段
.data ;定义数据段
string db ‘An example.’,0ah,0dh,’$’ ;在数据段中定义要显示的字符串
.code ;定义代码段
.startup ;程序的起始点
lea dx, string ;将字符串的起始地址送dx,即设立入口参数
mov ah, 09h ;设立输出字符串的功能调用号
int 21h ; 功能调用:显示
.exit 0 ;程序结束点,返回dos
end ;汇编结束
注:这是简化段定义的程序格式
2、 汇编语言程序的开发过程
一般环节:编辑、编译、连接、调试运营
(1) 源程序的编辑
源程序文献可以运用任一文本编辑器进行编辑,通常我们用“记事本”。
源程序文献保存时,一般以 .asm为文献的后缀名。
具体实现:如图
在win2023环境下,在“另存为”界面中输入文献全名(example.asm),并且将“保存类型“选择为“所有文献”。
也可以使用.txt后缀名,但是在汇编时要写源文献的全名,否则系统默认的为.asm。
(2) 源程序的汇编、连接
汇编是将源程序翻译成由机器代码组成的目的模块文献的过程。连接程序将一个或多个目的文献和库文献合成一个可执行文献。
MASM6.X提供的ML.EXE可以实现:
先汇编,若没有错误则自动调用LINK.EXE连接程序进行编译;若有错,则提醒错误信息,可运用列表文献查看错误所在位置,并改正错误,重新汇编和连接。
例如,设上面的例题程序文献为EXAMPLE.ASM,并且该文献与ML.EXE等文献都在同一目录(设该目录为当前目录)下,则汇编、连接的命令为:
>ML EXAMPLE.ASM
运营结果见实验环节2。产生:EXAMPLE.OBJ和 EXAMPLE.EXE文献
特别说明:
ML允许汇编和连接多个程序形成一个可执行文献,并且还可以带参数,格式:
ML [/参数选项] 文献列表
常用参数选项有:
/c ——只汇编源程序,不进行自动连接(注意用小写字母c)
/Fl 文献名——创建一个汇编列表文献(扩展名LST),用于查找错误。
Sg ——在省城的列表文献中,列出由汇编程序产生的指令
例如:若将字符串的引号改为中文的“‘”后重新用下面命令汇编连接,则结果见实验环节3。
>ML /Fl EXAMPLE.ASM
(3) 可执行程序的调试
在操作系统提醒符下直接输入柯执行文献名即可运营:
>EXAMPLE
当出现运营错误时,通常用DEBUG进行调试:
>DEBUG EXAMPLE.EXE
然后采用U命令进行反汇编,用T或G命令运营并观测,找犯错误所在。
二.实验目的及规定
1.掌握数据定义、段定义的方法
2.熟悉在PC机上编辑、汇编、连接、调试和运营汇编语言程序的过程。
3、熟悉常见Jcc指令、loop指令的使用。
三.实验内容
编程实现:
1、 求数组array中的20个字元素的和,并存入变量total中。其中,数组元素在定义数组时以初值的形式给出。
2、 给DX送一个初值,然后判断:若DX的高4位全为0,则使AX=0;否则使AX=-1。
3、 定义一个字符串string,包含若干字符并且以’$’结尾,用程序记录字符的个数。
四、实验环节
以实验内容1为例,介绍实验环节:
1、 编辑源程序:在记事本中输入如下程序,并存在E:\MASM6\BIN\EXAM1.ASM中。
2、 汇编、编译:
情况1:没有错误
>ml example.asm
Object Modules [.obj]: example.obj
Run File [example.exe]: "example.exe"
List File [nul.map]: NUL
Libraries [.lib]:
Definitions File [nul.def]:
产生:EXAMPLE.OBJ和 EXAMPLE.EXE文献
情况2:源程序中有错误,比如将字符串的引号改为中文的“‘”后重新用下面命令汇编连接。
>ML /Fl EXAMPLE.ASM
Microsoft (R) Macro Assembler Version 6.11
Copyright (C) Microsoft Corp 1981-1993. All rights reserved.
Assembling: example.asm
example.asm(5): error A2044: invalid character in file
example.asm(8): error A2023: undefined symbol : string
则给出2条错误信息提醒,并产生错误列表文献 EXAMPLE.LST
在记事本中打开该文献,内容如下:
;输出一个字符串的源程序:
.model small
.stack
.data
string db ’An example.',0ah,0dh,'$'
example.asm(5): error A2044: invalid character in file
.code ;定义代码段
.startup ;程序的起始点
lea dx, string
example.asm(8): error A2023: undefined symbol : string
mov ah, 09h
int 21h ; 功能调用:显示
.exit 0 ;程序结束点,返回dos
end ;汇编结束
特别提醒:
两处错误明显的标在源程序中。
事实上,只有一处错误,后面的错误是由于前面的错误引起的,所以改正错误时要从前往后逐个修改,并且每改完一处就重新存盘、汇编,以提高调试效率。
3、 调试:
C:\masm>debug example.exe
-u ;反汇编
1395:0000 BA9713 MOV DX,1397
1395:0003 8EDA MOV DS,DX
1395:0005 8CD3 MOV BX,SS
1395:0007 2BDA SUB BX,DX
1395:0009 D1E3 SHL BX,1
1395:000B D1E3 SHL BX,1
1395:000D D1E3 SHL BX,1
1395:000F D1E3 SHL BX,1
1395:0011 FA CLI
1395:0012 8ED2 MOV SS,DX
1395:0014 03E3 ADD SP,BX
1395:0016 FB STI
1395:0017 8D160400 LEA DX,[0004] ;源程序中的第一条指令
1395:001B B409 MOV AH,09
1395:001D CD21 INT 21
1395:001F B8004C MOV AX,4C00 ;相应.exit 0 指令
-u
1395:0022 CD21 INT 21
……
此时可用debug命令调试该程序了。
4、 关于变量名相应的偏移地址
源程序的第一条指令是:lea dx, string
汇编后相应的指令是:LEA DX,[0004]
因此,可看出变量string所相应的偏移地址是:0004h
假如要查看从string开始的字符串的内容,可用如下命令:
-D 04 Lc
即查看从04H开始的12个单元的内容。
五、拓展题
1、有两个64位数值,按“小端方式“存放在两个缓冲区buffer1和buffer2种,计算buffer1-buffer2,并将结果存放到变量result中。
2、将DX.AX中的双字右移4位。
六、实验报告
1、写出源程序清单、程序说明、执行结果。
2、调试说明。涉及上机调试的情况、上机调试环节、调试所碰到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。
实验四 系统功能调用程序的调试与运营
一、知识点
1、常用字符/字符串输入/出系统功能调用
(1) 输出一个字符:DOS功能调用INT 21H的02号功能调用
使用格式:
MOV AH, 02H ;设立功能调用号 AH<-02H
MOV DL, ‘*’ ;设立入口参数DL<-待显示的字符的ASCII码
INT 21H ;DOS功能调用:显示
(2) 输入一个字符:DOS功能调用INT 21H的02号功能调用
使用格式:
MOV AH, 01H ; 设立功能调用号 AH<-01H
INT 21H ;DOS功能调用:显示
出口参数:AL=字符的ASCII码
说明:执行此功能时,等待用户按键,然后读取按键值。
(3) 输出一个字符串:DOS功能调用INT 21H的09号功能调用
使用格式:
MOV AH, 09H ;设立功能调用号 AH<-09H
LEA DX, STRING ;设立入口参数DX<-待显示的字符串的首地址
INT 21H ;DOS功能调用:显示
说明:字符串必须以’$’结束;
入口参数DS:DX=待显示的字符串的首地址(段地址:偏移地址)
(4) 输入一个字符串:DOS功能调用INT 21H的0A号功能调用,将键盘输入的字符串送入指定的缓冲区。
入口参数DS:DX=待显示的字符串的首地址(段地址:偏移地址)
使用该功能前,一方面要定义接受字符串的缓冲区,格式:
BUFFER DB 81 ;定义缓冲区,以及也许输入的最大字符数
DB 0 ;该字节用于存放实际输入的字符的个数
DB 81 DUP(0) ;该区域用于存放输入的字符串,初值设为0
使用格式:
MOV AH, 0AH ; 设立功能调用号 AH<-01H
MOV DX, SEG BUFFER
MOV DS, DX ;缓冲区的段地址àDS
LEA DX, BUFFER ; 缓冲区的偏移地址àDX
INT 21H ;DOS功能调用:输入字符串
二、实验目的及规定:
1、掌握接受键盘数据的方法,掌握向显示器输出数据的方法。并了解数据显示时,须转为ASCII码的原理。
2、 握DOS功能调用的编程方法。
3、 实验前要做好充足准备,涉及汇编程序清单、调试环节、调试方法,以及对程序结果的分析等。
三、实验内容:
编程实现:
1、 从键盘输入一个小写字母,转换成大写字母,然后换行输出。
2、 从键盘输入的一个字符串(以回车结束),并将字符串末尾加上结束标志’$’,然后输出该字符串。
3、 从键盘输入的一个字符串(不超过10个字符,以回车结束,),将字符串的长度送入寄存器AL,然后输出字符串的长度。
四、实验环节:
具体编程、调试环节同实验三
编程提醒:
1、 换行的实现:输出字符0AH、0DH
2、 在字符串末尾加上结束标志’$’的实现:
若接受字符串的缓冲区为buffer,则先取出实际输入的字符: mov si, buffer+1
然后将字符串末尾加上’$’:mov [buffer+si+2], ‘$’,其中buffer+2为字符串的首地址
3、 输出字符串长度的实现:一方面取出实际输入的字符数,然后将该数字转换成相应的ASCII码,最后输出该数字相应的字符。
五、思考题:
程序中的原始数据是以如何的形式存放在数据区中的?请用DEBUG调试程序观测并分析。
六.实验报告:
1、程序说明。说明程序的功能、结构。
2、调试说明。涉及上机调试的情况、上机调试环节、调试所碰到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。
3、画出程序框图。
4、写出源程序清单和执行结果。
5、回答思考题。
实验五 分支程序设计
一、知识点
1、 控制转移类指令
无条件转移指令JMP 、条件转移指令Jcc
2、 单分支结构
注意分支条件的选择:当条件满足时,直接转到分支的下一条指令;否则,执行单分支语句段。例如,求AX中数据的绝对值:
CMP AX, 0
JGE NONEG
NEG AX
NONEG: MOV RESULT, AX
思考:假如条件改为 JL,以上分支程序段如何改写?是比较程序段的复杂度?
3、 双分支结构
双分支结构中条件的选择任意,但特别注意:
当分支语句段1结束后,一定要用JMP指令跳过度支语句段2,即跳到分支结束的位置。例如,判断AX中的数据的符号,若为非负数,则0àsign;否则,-1àsign。
CMP AX, 0
JGE NONEG
MOV SIGN, -1
JMP END0
NONEG: MOV SIGN, 0
END0: ……
4、 分支结构程序测试用例的设计
基本准则:测试用例要满足可以使每个分支都能执行一次,特别注意边界数据的测试。换句话说,就是一方面分析每个分支条件,找出使条件成立、不成立时的数据取值范围,然后从每个范围中选一个数据,形成一个测试用例;此外,边界数据作为单独一个测试用例。
举例说明:
(1)单分支/双分支结构的测试:比如上面“判断AX中的数据的符号”程序段,需要设计三个测试用例,即分AX>0、 AX<0、 AX=0三种情况,分别拟定一个数据(假设AX分别取5、-2、0三个数据)。其中,0就是一个介于条件成立与不成立之间的边界数据。
具体操作:在DEBUG环境下,用R命令改变AX的值,调试,分析程序流程和结果。
(2)多分支结构的测试:比如,实验内容第3题的多分支结构的测试:则至少要对每一种情况设计一个测试用例, 即1~9中的一个数、a~z中的一个字符、A~Z中的一个字符、回车符、其他字符,
然后设计边界测试用例1、9、A、Z、a、z,共11个测试数据。
具体操作:当测试数据需要从键盘输入时,可在在MS-DOS环境下逐个使用测试数据运营;当测试数据是程序中某个变量或寄存器的值时,可在DEBUG环境下,运用R或E命令用测试数据修改寄存器或变量的值,然后运营。
二、 实验目的及规定
1、掌握分支程序的结构。
2、掌握分支程序的设计、调试方法。
3、实验前要做好充足准备,涉及流程图、汇编程序清单、调试环节、调试方法,以及对程序结果的分析等。
4、编程时先画流程图,培养结构化程序设计的思想;调试前根据程序结构设计测试用例,逐步掌握程序测试方法。
三、 实验内容
1、 编写一个程序,显示AL寄存器中的两位十六进制数。
2、 编写一个程序,把变量bufX和bufY中较大者存入bufZ;若两者相等,则把其中之一存入bufZ中。假设变量中存放的是8位无符号数。
3、 编写一个程序,判别键盘上输入的字符;若是1-9字符,则显示之;若为A-Z或a-z字符,均显示“c”;若是回车字符<CR>(其ASCII码为0DH),则结束程序,若为其它字符则不显示,继续等待新的字符输入。
四、 实验环节
1、用记事本编写.ASM源程序。
2、对源程序进行汇编及连接,产生.EXE文献、.LST文献。
3、在DEBUG环境下调试:
(1)用DEBUG命令U反汇编,用T单步执行,查看程序的流程及每一步的执行结果。
(2)用R命令修改AL寄存器的内容,重新运营第一题的程序,分析结果。
(3)用E命令修改变量bufX和bufY的值,重新单步执行第二题的程序,分析程序的流程及运营结果。
(4)反复调试运营第三题的程序,分别输入:1~9中的一个数、a~z中的一个
展开阅读全文