📄 loadfa.asm
字号:
STACK SEGMENT PARA STACK 'STACK'
DB 64 DUP('STACK')
STACK ENDS
DSEG SEGMENT PARA PUBLIC 'DATA'
hand dw 0
FILENAME DB 'F144.IMG',0,0
HANDLE Dw 0
MYDATA DB 'I AM A BOY.',24h*200h dup ('d')
cont db 0
pin db '.$'
WMessage db 13,10,'There is a error. about?(a) quit?(q)',13,10,'$'
aa db 'a'
ab db 'A'
qa db 'q'
qb db 'Q'
DSEG ENDS
CSEG SEGMENT PARA PUBLIC 'CODE'
ASSUME CS:CSEG,DS:DSEG,SS:STACK
ENTRY PROC FAR
MOV AX,DSEG
mov es,ax
MOV DS,AX ;GRT READY
MOV AX,0 ;reset disk
MOV BX,0
MOV CX,0
MOV DX,0
MOV AX,0212H
MOV BX,OFFSET MYDATA
mov ch,cont
MOV CL,1H
MOV DX,0000H
INT 13H
mov ax,0000h ;reset disk
mov dl,00h
int 13h
call error
MOV DX,OFFSET FILENAME ;MAKE
MOV AX,3C00H
MOV CX,00H
INT 21H
call error
MOV hand,AX
MOV AX,3E00H ;close
MOV BX,hand
INT 21H
call error
MOV AX,3D00H ;OPEN
MOV AL,01H
MOV DX,OFFSET FILENAME
INT 21H
call error
MOV HANDLE,AX
read: MOV AX,0 ;read disk(1)
MOV BX,0
MOV CX,0
MOV DX,0
MOV AX,0212H
MOV BX,OFFSET MYDATA
mov ch,cont
MOV CL,1H
MOV DX,0000H
INT 13H
call error
mov ah,40h ;write(1)
mov bx,handle
mov cx,12h*200h
mov dx,offset mydata
int 21h
call error
MOV AX,0 ;read disk(2)
MOV BX,0
MOV CX,0
MOV DX,0
MOV AX,0212H
MOV BX,OFFSET MYDATA
mov ch,cont
MOV CL,1H
MOV DX,0100H
INT 13H
call error
mov ah,40h ;write(2)
mov bx,handle
mov cx,12h*200h
mov dx,offset mydata
int 21h
call error
call display
mov ah,cont ;jump
inc ah
mov cont,ah
mov al,80
cmp ah,al
jb read
mov ax,0 ;close
mov bx,0
mov cx,0
mov dx,0
MOV AX,3E00H
MOV BX,HANDLE
INT 21H
call error
mov ax,4c01h ;end
int 21h
error proc near
jc wrong
ret
wrong: mov ax,0900h
mov dx,offset wmessage
int 21h
mov ax,0100h
int 21h
cmp al,aa
je about
cmp al,ab
je about
cmp al,qa
je quit
cmp al,qb
je quit
jmp wrong
quit: pop ax
mov ax,4c01h ;end
int 21h
about: ret
error endp
display proc near
mov ax,0900h
mov dx,offset pin
int 21h
ret
display endp
ENTRY ENDP
CSEG ENDS
END ENTRY
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -