回 帖 发 新 帖 刷新版面

主题:汇编时出现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
    
    
        















    

回复列表 (共2个回复)

沙发

是那些中文造成的,把中文删掉就可以了。

板凳

第60行的分号“;”是中文状态输的,改成英文状态输一遍就行了,大概是全角、半角的原因

我来回复

您尚未登录,请登录后再回复。点此登录或注册