📄 testfile.asm
字号:
; TestFile.ASM
;
; This program tests the file routines in the UCR Standard Library.
; Randall Hyde
; 4/13/93
;
; This code only assembles with MASM 6.0 or later!
; You will need to make appropriate modifications for TASM or MASM 5.x
ifndef @version
%out Must modify this code to work with assemblers other MASM 6.x
err
else
if @version lt 600
%out Must modify this code to work with assemblers other MASM 6.x
err
endif
endif
.xlist
; include stdlib.a6
include consts.a6
include stdout.a6
include memory.a6
include file.a6
includelib stdlib.lib
.list
dseg segment para public 'data'
File1 FileVar {}
File2 FileVar {}
count dw 0
Buffer db 256 dup (0)
Filename db "Testfile.asm",0
Filename2 db "x",0
Filename3 db "y",0
dseg ends
cseg segment para public 'code'
assume cs:cseg, ds:dseg
Main proc
mov ax, dseg
mov ds, ax
mov es, ax
meminit
jnc GoodMem
print
db "Could not properly initialize memory manager",cr,lf
db 0
jmp quit
GoodMem: printf
db "Opening '%s'",cr,lf,0
dd Filename
ldxi Filename
lesi File1
mov ax, 0 ;Open for reading
fopen
jnc GoodOpen
print
db "Could not open file 1, DOS error code = ",0
puti
putcr
jmp quit
GoodOpen: ldxi Filename2
lesi File2
fcreate
jnc ReadLoop
print
db "Could not open file 2, DOS error code = ",0
puti
putcr
jmp quit
ReadLoop: lesi File1
fgetc
jc BadRead
lesi File2
fputc
jc BadWrite
inc count
putc
jmp ReadLoop
BadWrite: print
db "Error writing file: ",0
puti
putcr
jmp Quit
BadRead: cmp ax, 0
je Quit2
print
db "Error reading file: ",0
puti
putcr
jmp Quit
Quit2: printf
db "There were %d characters in the file",cr,lf,0
dd count
lesi file2
fclose
jnc GoodClose
printf
db "Could not properly close %s\n",0
dd Filename2
GoodClose: lesi File1
fclose
printf
db "Opening '%s' again.",cr,lf,0
dd Filename
ldxi Filename
lesi File1
mov ax, 0 ;Open for reading
fopen
jnc GoodOpen2
print
db "Could not open file 1, DOS error code = ",0
puti
putcr
jmp quit
GoodOpen2: ldxi Filename3
lesi File2
fcreate
jnc ReadLoop2
printf
db "Could not open '%s', DOS error code = ",0
dd Filename3
puti
putcr
jmp quit
ReadLoop2: lesi File1
ldxi Buffer
mov cx, 256
fread
jc BadRead2
cmp ax, 256
jne LastBlock
lesi File2
ldxi Buffer
mov cx, 256
fwrite
jc BadWrite
add count, 256
jmp ReadLoop2
BadRead2: cmp ax, 0
jne BadRead
jmp CloseEm
LastBlock: lesi File2
ldxi Buffer
mov cx, ax
add count, ax
fwrite
jc BadWrite
CloseEm: lesi File1
fclose
lesi File2
fclose
Quit: ExitPgm ;DOS macro to quit program.
Main endp
cseg ends
sseg segment para stack 'stack'
stk db 1024 dup ("stack ")
sseg ends
zzzzzzseg segment para public 'zzzzzz'
LastBytes db 16 dup (?)
zzzzzzseg ends
end Main
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -