实验五输入输出程序设计
一、实验目的
1) 掌握输入输出程序的编写方法。
2) 熟悉系统功能调用的方法。
3) 熟悉动画程序的编写方法。
二、实验内容
1)在CRT上每隔一秒连续显示字符0-9。
编程提示
为了使输出的字符之间有空格,在每一个循环中输出一个0-9的字符和一个空格。
为了输出0-9,置寄存器BL初值为0,每循环一次使其增量。
为了保证输出是十进制,增量后用DAA调整指令。
由于输出为一位十进制数,用AND 0FH 指令屏蔽高4位。
2)用系统功能调用将‘HELLO’由键盘输入,再从屏幕输出‘***HELLO***’。
3)编制在屏幕上画线的子程序,调用该子程序画一矩形。
4)编制字母下落一行的子程序,调用该子程序使字母从屏幕顶部下落到底部。
5)创建一磁盘文件,保存从键盘输入的字符串。
6)编写程序用设置系统时间,首先从键盘以十进制数形式输入时间,然后修改系统时间,并重新以十进制形式显示时间。
7)编写程序将屏幕分割成格状,每一格涂上不同颜色,格数从键盘输入。
8)编写程序在屏幕上显示菜单,输入相应菜单的序号后,选种该菜单项。
三、源程序
EXAM5-1
STACK SEGMENT STACK
DB 1024 DUP(0)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,SS:STACK
START:MOV BL,0
LP:MOV DL,20H
MOV AH, 2
INT 21H
MOV AL,BL
ADD AL, 0
DAA
AND AL,0FH
MOV BL,AL
PUSH BX
OR AL,30H
MOV DL,AL
MOV AH, 2
INT 21H
MOV BX,3E8H
LP2:MOV CX,176H ;延时1ms
LP1:PUSHF
POPF
LOOP LP1
DEC BX
JNZ LP2
POP BX
INC BL
JMP LP
CODE ENDS
END START
执行程序EXAM5-1·EXE,屏幕上依次循环显示一个数字一个空格:
0 1 2 3 4 5 6 7 8 9 ……
EXAM5-2
STACK SEGMENT STACK
DB 1024 DUP(0)
STACK ENDS
DA TA SEGMENT
BUFF DB 6,7 DUP(?),‘$’
DA TA ENDS
INPUT MACRO BUFE
MOV DX,OFFSET BUFE
MOV AH,0AH
INT 21H
ENDM
PUTCHAR MACRO CHAR
MOV DL,CHAR
MOV AH,02H
INT 21H
ENDM
CODE SEGMENT
ASSUME CS:CODE,DS:DA TA,SS:STACK START:MOV AX,DA TA
MOV DS,AX
INPUT BUFF ;读取字符串➝BUFF
PUTCHAR 0DH
PUTCHAR 0AH ;光标另起一行
MOV CX,0003H
NEXT:PUTCHAR 2AH
LOOP NEXT
MOV CL,BUFF+1
SUB CH,CH
MOV BX,OFFSET BUFF+2
BEGIN:MOV AL,[BX]
PUTCHAR AL
INC BX
LOOP BEGIN
MOV CX,0003H
NEXT1:PUTCHAR 2AH
LOOP NEXT1
MOV AH,4CH
INT 21H
CODE ENDS
END START
执行程序EXAM5-2·EXE,输入HELLO↙屏幕上显示结果:
*** HELLO ***
EXAM5-5
NAME EXAM6
SSTACK SEGMENT STACK ’stack’
DB 1024 DUP(?)
SSTACK ENDS
DATA SEGMENT
ASKNAME DB 0DH,0AH,’Enter the’
DB ’dest file name:$’
ASKCONT DB 0DH,0AH,’Enter the string’
DB ’as file content:’0dh,0ah,’$’ FILEBUF DB 62,63DUP(?)
HAND_D DW?
MSGMER DB 0DH,0AH,0AH
DB ’Directory full’,0DH,0AH,’$’
MSGWER DB 0DH,0AH,0AH
DB ’Disk full’,0DH,0AH,’$’
MSGSUC DB 0DH,0AH,0AH,
DB ’Write file is Successful’
DB 0DH,0AH,’$’
DATA ENDS
DISPLY MACRO TEXT
MOV DX,OFFSET TEXT
MOV AH,09H
INT 21H
ENDM
CRHAND MACRO PATH,ATTR
MOV DX,OFFSET PATH ;文件名
MOV CL,ATTR ;文件属性
XOR CH,CH
MOV AH,3CH
INT 21H
ENDM
WRHAND MACRO HAND,BUFF,BYTE
MOV BX,HAND
MOV DX,OFFSET BUFF
ADD DX,2
MOV CL,BYTE
XOR CH,CH
MOV AH,40H
INT 21H
ENDM
CLHAND MACRO HAND
MOV BX,HAND
MOV AH,3EH
INT 21H
ENDM
CODE SEGMENT
PROG PROC FAR
ASSUME CS:CODE,DS:DATA,SS:SSTACK
PUSH DS
MOV AX,0
PUSH AX
MOV AX,DATA
MOV DS,AX
DISPLY ASKNAME ;提示输入文件名MOV DX,OFFSET FILEBUF
MOV AH,0AH
INT 21H
MOV DI,OFFSET FILEBUF[2]
MOV BL,FILEBUF[1]
XOR BH,BH
MOV BYTE PTR[BX][DI],00H
CRHAND FILEBUF[2],0 ;创建并打开新文件JC CRTERR
MOV HAND_D,AX ;存文件句柄DISPLY ASKCONT ;提示键入文件内容MOV DX,OFFSET FILEBUF
MOV AH,0AH
INT 21H
WRHAND HAND_D,FILEBUF,FILEBUF[1]
JC WRITERR
CLHAND HAND_D
DISPLY MSGSUC
JMP EXIT CRTERR:DISPLY MSGMER
JMP EXIT WRITERR:DISPLY MSGWER EXIT:RET
PROG ENDP
CODE ENDS
END PROG。