-
Notifications
You must be signed in to change notification settings - Fork 0
/
CopyFich.asm
130 lines (103 loc) · 2.27 KB
/
CopyFich.asm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
.8086
.MODEL SMALL
.STACK 2048
;#############################################################################
; Faz uma Cópia do Ficheiro
; 'ABC.TXT' - Ficheiro Origem
; 'ABC_D.TXT' - Ficheiro Destinho
;#############################################################################
DADOS SEGMENT
FichD db 'ABC_D.TXT',0
FichO db 'ABC.TXT',0
HandleFichD dw 0
HandleFichO dw 0
car_fich db 60 dup(?)
Erro_Open db "Ocorreu um erro na Erro_Open!$"
Erro_Close db "Ocorreu um erro na criacao do Erro_Close!$"
msgErrorWrite db "Ocorreu um erro msgErrorWrite!$"
msgErrorCreate db "Ocorreu um erro na criacao do ficheiro!$"
Erro_Ler_Msg db "Ocorreu um erro na escrita para ficheiro!$"
DADOS ENDS
CODIGO SEGMENT para public 'code'
ASSUME CS:CODIGO, DS:DADOS
Main proc
MOV AX, DADOS
MOV DS, AX
;abre ficheiro original
xor si,si
mov ah,3dh
mov al,0
lea dx,FichO
int 21h
jc erro_abrir
mov HandleFichO,ax
jmp abre_FichD
erro_abrir:
mov ah,09h
lea dx,Erro_Open
int 21h
jmp sai
;Cria novo ficheiro
abre_FichD:
mov ah, 3ch
mov cx, 00H
lea dx, FichD
int 21h
jnc ler_ciclo
mov cx,60
ler_ciclo:
push cx
mov ah,3fh
mov bx,HandleFichO
lea dx,car_fich
mov cx,1
int 21h
jc erro_ler
cmp ax,0 ;EOF?
je fecha_ficheiroO
mov ah,02h
mov dl,car_fich
int 21h
; escreve no outro ficheiro
escreve:
mov bx, ax
mov ah, 40h
lea dx, car_fich
int 21h
jnc fecha_ficheiroO
pop cx
loop ler_ciclo
mov ah, 09h
lea dx, msgErrorCreate
int 21h
jmp sai
mov ah, 09h
lea dx, msgErrorWrite
int 21h
jmp fecha_ficheiroO
erro_ler:
mov ah,09h
lea dx,Erro_Ler_Msg
int 21h
fecha_ficheiroO:
mov ah,3eh
mov bx,HandleFichO
int 21h
jnc sai
mov ah,09h
lea dx,Erro_Close
Int 21h
fecha_ficheiroD:
mov ah,3eh
mov bx,HandleFichD
int 21h
jnc sai
mov ah,09h
lea dx,Erro_Close
Int 21h
sai:
MOV AH,4CH
INT 21H
main endp
CODIGO ENDS
END main