您好,欢迎来到叨叨游戏网。
搜索
您的当前位置:首页初级程序的编写与调试

初级程序的编写与调试

来源:叨叨游戏网


一、 实验目的

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码相加显示出来的数字是错误。

为了正确显示,我们必须先取出各位上的数字。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- gamedaodao.net 版权所有 湘ICP备2024080961号-6

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务