许昌学院微机原理实验指导书
实验六 子程序及DOS功能调用
一.实验目的
1、掌握子程序(过程)的结构、设计及调试方法。 2、掌握常用DOS功能调用的方法。 二.实验内容
1.熟悉分支及循环程序的设计思想和方法。
过程名
PROC [NEAR|FAR] …… ENDP
;过程体
过程名
2.了解常用DOS功能的调用方法(INT 21H)。
1)输入单个字符——DOS功能号:01H;
出口参数:AL=所输入的ASCII码;
功能:等待用户从键盘输入一个字符,输入字符后返回,同时显示所输入的字符。如按Ctrl+Break或Ctrl+C则退出。(验证课本P116例46) 2)输入字符串——DOS功能号:0AH;
入口参数:DS:DX指向字符串缓冲区的第1个字符,且第1个字节需填入最多接收的字符个数;
出口参数:前述缓冲区存放实际输入字符的个数(不包括回车);第3个字节开始将存放字符串的结果。实际输入的字符数多于所定义的数时,多出的字符将被丢掉,且响铃。
功能:等待用户输入字符,以回车结束。(验证课本P117例47) 3)显示单个字符——DOS功能号:09H;
入口参数:DL=待显示字符的ASCII码;
功能:在当前显示器光标位置显示给定字符,且光标右移一个字符位置。如按Ctrl+Break或Ctrl+C则退出。(验证课本P117例48) 4)显示字符串——DOS功能号:0AH;
27
许昌学院微机原理实验指导书
入口参数:DS:DX指向字符串所在内存的首地址,要求字符以$结束; 功能:显示器上输出指定的字符串。(验证课本P117例49)
3. 验证并运行课本P111例4-43和P112例4-44。
1)课本P111例4-43,将内存中一串1位的十六进制数转换为对应的ASCII码。
DATA SEGMENT
HEXBUF DB 02H,08H,0AH,09H,0FH COUNT EQU $-HEXBUF DATA ENDS STACK SEGMENT DB 100 DUP(?) STACK ENDS CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STACK HEXD PROC NEAR CMP AL, 0AH JL ADDZ
ADD AL, 'A'-'0'-0AH ADDZ: ADD AL, '0' RET HEXD ENDP
BEGIN: MOV AX, DATA MOV DS, AX
MOV BX, OFFSET HEXBUF MOV CX, COUNT REPEAT0:
MOV AL, [BX] CALL HEXD MOV [BX], AL INC BX
28
许昌学院微机原理实验指导书
LOOP REPEAT0 MOV AX, 4C00H INT 21H CODE ENDS END BEGIN
2)课本P112例4-44,将内存中两个字单元的值分别转换为4个ASCII码表示的十六进制数码串,串的起始地址为STRING1和STRING2.
DATA SEGMENT
NUMBER DW 25AFH,33FBH STRING1 DB 4 DUP (?) STRING2 DB 4 DUP (?) DATA ENDS STACK SEGMENT DB 100 DUP (?) STACK ENDS CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STACK HEXD PROC NEAR CMP AL, 0AH JL ADDZ
ADD AL,'A'-'0'-0AH ADDZ: ADD AL,'0' RET HEXD ENDP BEGIN:
MOV AX, DATA MOV DS, AX MOV ES, AX ;第一个字单元的转换 LEA BX, STRING1
29
许昌学院微机原理实验指导书
PUSH BX PUSH NUMBER CALL BINHEX ;第二个字单元的转换 LEA BX, STRING2 PUSH BX PUSH NUMBER+2 CALL BINHEX MOV AX, 4C00H INT 21H ;子程序
BINHEX PROC PUSH BP MOV BP, SP PUSH AX PUSH DI PUSH CX PUSH DX PUSHF
MOV AX, [BP+4] MOV DI, [BP+6] ADD DI, 3 MOV DX, AX MOV CX, 4 AGAIN: AND AX, 0FH CALL HEXD STD STOSB PUSH CX MOV CL, 4
30
许昌学院微机原理实验指导书
SHR DX, CL MOV AX, DX POP CX LOOP AGAIN POPF POP DX POP CX POP DI POP AX POP BP RET 4 BINHEX ENDP CODE ENDS END BEGIN
三.实验要求
实验前要做好充分准备,包括汇编程序清单、调试步骤、调试方法,以及对程序结果的分析等。 四.思考题
子程序是怎样被调用的?请用DEBUG调试程序观察并分析。 五.实验报告
1、程序说明。说明程序的功能、结构。
2、调试说明。包括上机调试的情况、上机调试步骤、调试所遇到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。
3、画出程序框图。
4、写出源程序清单和执行结果。 5、回答思考题。
31