一、 实验目的
1. 掌握无条件转移指令、条件转移指令;
2. 掌握利用DOS功能调用INT21H的2号和9号功能进行屏幕显示的方法;
3. 掌握直接向视频RAM送ASCII码进行屏幕显示的方法;
4. 掌握屏幕字符显示程序编写与调试。
二、 实验内容
5. 字符、字符串的屏幕显示;
6. 直接向VRAM送ASCII码显示字符;
7. 用字符搜索法确定字符串长度;
8. 16进制数化ASCII码的一般方法(显示内存内容)。
三、 实验环境
PC微机
DOS操作系统或 Windows 操作系统
,,或宏汇编集成环境
四、 实验要求
1. 仔细阅读有关无条件转移指令、条件转移指令的内容;
2. 阅读利用DOS功能调用INT21H的2号和9号功能进行屏幕显示的内容;
3. 阅读实验指导书中的字符串屏幕显示程序、字符屏幕显示程序、直接向VRAM送ASCII码显示字符程序、用字符搜索法确定字符串长度程序、16进制数化ASCII码的一般方法的程序段,调试上述程序。
五、 主要实验步骤及结果
1.利用INT 21 0AH号功能调用显示字符串。
(1)用A命令在100H处键入下列程序:
MOV AH, 9
MOV DX,110
INT 21
INT 20
(2)用A命令在110H处键入下列字符串的ASCII码:
DB 'This is a sample!$'
(3)用N命令和W命令将此程序(包括数据区)存入文件名为AA.COM的磁盘文件中。(存入前BX:CX必须置为文件长度值)。
(4)用Q命令退出DEBUG。
(5)在DOS命令下打AA,运行此程序,即在屏幕上显示'This is a sample!'字符串,若不出现,用DEBUG检查程序有无错误。
2.利用INT 21H 2号功能显示字符
(1)用A命令在100H处键入下列程序:
XOR DL,DL
MOV CX,100
LOP: MOV AH,2
INT 21
INC DL
PUSH CX
MOV CX,8
DELY: PUSH CX
MOV CX,0
J: LOOP J
POP CX
LOOP DELY
POP CX
LOOP LOP
INT 20
(2)用G命令运行程序,即在屏幕上依次缓慢的显示256个ASCII字符。仔细观察每个字符,和IBM-PC ASCII码表对照,看07H-0DH处控制字符显示结果与表上有何不同
表中的07H-0DH处是用字符表示,如07H为BEL,0DH为CR,但是显示出来的是用小
符号来表示,如07H用笑脸表示,0DH直接是以回车来表现。
(3)按CTRL+BREAK退出此程序,若一次不行可多做几次。
3.直接向VRAM送ASCII码显示字符
(1)用A命令在100H处键入下列程序
MOV AX,B000
MOV DS,AX
XOR AL,AL
XOR BX,BX
MOV CX,100
LOP:MOV [BX],AL
INC BX
INC AL
PUSH CX
MOV CX,8
DELY:PUSH CX
MOV CX,0
J: LOOP J
POP CX
LOOP DELY
POP CX
LOOP LOP
INT 20
(2)用N命令和W命令将此程序存入文件中。(一定要先存入!)
(3)用G命令运行此程序,仔细观察每一个ASCII码显示结果,并和字符表及上一道程序运行情况进行对照,其控制字符区(07-0DH)显示结果和INT 21H 2号功能调用有何不同
控制字符区在该程序中没有显示,在上一个程序中显示为笑脸等符号。
4.用字符搜索法确定字符串长度
(1)用A命令在100H开始的内存处键入下列程序
JMP START
DB 'This is the program to measure'
DB 'the length of a string!$'
START: MOV BX,102
MOV AL,24
XOR CL,CL
LOP: CMP AL,[BX]
JZ EXIT
INC BX
INC CL
JMP LOP
EXIT: INT3
(2)用G命令运行此程序,并检查CL的统计长度是否与你自己统计的实际长度是否一样
5.用字符搜索法确定字符串长度
(1)用A命令在100H处键入下列程序:
MOV SI,0
MOV BL,10
LOP: MOV DL,[SI]
MOV CL,4
SHR DL,CL
CMP DL,0A
JC J1
ADD DL,7
J1: ADD DL,30
MOV AH,2
INT 21
MOV DL,[SI]
AND DL,0F
CMP DL,0A
JC J2
ADD DL,7
J2: ADD DL,30
MOV AH,2
INT 21
MOV DL,20
MOV AH,2
INT 21
INC SI
DEC BL
JNZ LOP
INT 20
(2)用N,W命令将此程序用CC.COM文件名存入磁盘。
(3)用Q命令退出DEBUG。
(4)在DOS命令状态下直接运行CC.COM命令文件,应在屏幕上显示出内存从0000H开始的16个字节的内容,若有错误,用DEBUG检查之。
(5)自编程序:修改上面程序,使除以16进制数形式显示内存内容外,还能在其右边显示该16进制码所对应的ASCII字符,07-0D的控制字符用'.'代替。
在DOS下输入DEBUG 打开程序,从最后一条指令INT 20(包括该指令)开始修改,修改方法如下:
MOV CX,10
MOV SI,0
J3: MOV DI,[SI]
MOV AH,2
CMP DL,0D
JBE J5
J4: INT 21
INC SI
DEC CX
JNZ J3
INT 20
J5: CMP DL,07
JNB J4
MOV DL,2E
JMP J4
六、 思考题
利用INT 21H 显示和直接向VRAM送ASCII码显示方法在显示结果上有什么不同
答:利用INT 21H显示时,07H-0DH的控制符会用笑脸之类的符号显示;直接向VRAM送ACSII码时,07H-0DH的控制符不显示。
七、 实验心得
1> 语言的实验系列自己收获很多,哪怕理论课程没有学的扎实,通过实际的实验操作也让自己更牢固地掌握了相关知识。
2> 在使用DOS中断2号功能显示字符时,尤其是数字字符,发现只要数字超过了9,那么我们在使用和0的ASCII码相加显示出来的数字是错误。
为了正确显示,我们必须先取出各位上的数字。