主题:汇编时出现out of memory,是什么意思? 谢谢
;程序名: T4-6.ASM
;功能: 显示当前目录下的文本文件TEST.TXT内容
;符号常量定义
EOF = 1AH ;文件结束符ASC码
;数据段
DSEG SEGMENT
FNAME DB 'TEST.TXT', 0 ;文件名
ERROR1 DB 'File not found', 07H, 0 ;提示信息
ERROR2 DB 'Reading error', 07H, 0
BUFFER DB ? ;1字节的缓冲区
DSEG ENDS
;代码段
CSEG SEGMENT
ASSUME CS : CSEG, DS : DSEG
START: MOV AX, DSEG
MOV DS, AX ;置数据段寄存器
;
MOV DX, OFFSET FNAME
MOV AX, 3D00H ;为读打开指定文件
INT 21H
JNC OPEN_OK ;打开成功,转 (CF=0)
;
MOV SI, OFFSET ERROR1
CALL DMESS ;显示打开不成功提示信息
JMP OVER
;
OPEN_OK:MOV BX, AX ;保存文件柄
CONT: CALL READCH ;从文件中读一个字符
JC READERR ;如读出错,则转
CMP AL, EOF ;读到文件结束符吗?
JZ TYPE_OK ;是,转
CALL PUTCH ;显示所读字符
JMP CONT ;继续
;
READERR:MOV SI, OFFSET ERROR2
CALL DMESS ;显示读出错提示信息
;
TYPE_OK:MOV AH, 3EH ;关闭文件
INT 21H
OVER: MOV AH, 4CH ;程序结束
INT 21H
;
;子程序
;
READCH PROC
MOV CX, 1 ;置读字节数
MOV DX, OFFSET BUFFER ;置读(一个字节的)缓存区地址
MOV AH, 3FH ;置功能调用号(读文件)
INT 21H
JC READCH2 ;读出错,转(CF=1)
CMP AX, CX ;判文件是否结束 (CX==应读入字节数,AX=实际读到的字节数)
MOV AL, EOF ;设文件已结束,置文件结束符
JB READCH1 ;文件确已结束,转(CF==1)
MOV AL, BUFFER ;文件未结束,取所读字符
READCH1:CLC ;CLC使进位标志器清零
READCH2:RET ;
READCH ENDP
;
;
;子程序名: DMESS
;功能: 显示一个以0为结束符的字符串
;入口参数: SI=字符串首地址
;出口参数: 无
DMESS PROC
DMESS1: MOV DL, [SI]
INC SI
OR DL, DL
JZ DMESS2
MOV AH, 2
INT 21H
JMP DMESS1
DMESS2: RET
DMESS ENDP
;
PUTCH PROC
PUSH DX
MOV DL, AL
MOV AH, 2
INT 21H
POP DX
RET
PUTCH ENDP
CSEG ENDS
END START
;功能: 显示当前目录下的文本文件TEST.TXT内容
;符号常量定义
EOF = 1AH ;文件结束符ASC码
;数据段
DSEG SEGMENT
FNAME DB 'TEST.TXT', 0 ;文件名
ERROR1 DB 'File not found', 07H, 0 ;提示信息
ERROR2 DB 'Reading error', 07H, 0
BUFFER DB ? ;1字节的缓冲区
DSEG ENDS
;代码段
CSEG SEGMENT
ASSUME CS : CSEG, DS : DSEG
START: MOV AX, DSEG
MOV DS, AX ;置数据段寄存器
;
MOV DX, OFFSET FNAME
MOV AX, 3D00H ;为读打开指定文件
INT 21H
JNC OPEN_OK ;打开成功,转 (CF=0)
;
MOV SI, OFFSET ERROR1
CALL DMESS ;显示打开不成功提示信息
JMP OVER
;
OPEN_OK:MOV BX, AX ;保存文件柄
CONT: CALL READCH ;从文件中读一个字符
JC READERR ;如读出错,则转
CMP AL, EOF ;读到文件结束符吗?
JZ TYPE_OK ;是,转
CALL PUTCH ;显示所读字符
JMP CONT ;继续
;
READERR:MOV SI, OFFSET ERROR2
CALL DMESS ;显示读出错提示信息
;
TYPE_OK:MOV AH, 3EH ;关闭文件
INT 21H
OVER: MOV AH, 4CH ;程序结束
INT 21H
;
;子程序
;
READCH PROC
MOV CX, 1 ;置读字节数
MOV DX, OFFSET BUFFER ;置读(一个字节的)缓存区地址
MOV AH, 3FH ;置功能调用号(读文件)
INT 21H
JC READCH2 ;读出错,转(CF=1)
CMP AX, CX ;判文件是否结束 (CX==应读入字节数,AX=实际读到的字节数)
MOV AL, EOF ;设文件已结束,置文件结束符
JB READCH1 ;文件确已结束,转(CF==1)
MOV AL, BUFFER ;文件未结束,取所读字符
READCH1:CLC ;CLC使进位标志器清零
READCH2:RET ;
READCH ENDP
;
;
;子程序名: DMESS
;功能: 显示一个以0为结束符的字符串
;入口参数: SI=字符串首地址
;出口参数: 无
DMESS PROC
DMESS1: MOV DL, [SI]
INC SI
OR DL, DL
JZ DMESS2
MOV AH, 2
INT 21H
JMP DMESS1
DMESS2: RET
DMESS ENDP
;
PUTCH PROC
PUSH DX
MOV DL, AL
MOV AH, 2
INT 21H
POP DX
RET
PUTCH ENDP
CSEG ENDS
END START