problema cuando quiero crear el archivo
Publicado por matyas (1 intervención) el 11/12/2013 19:45:34
que tal?, tengo un problema estoy tratando de hacer un editor de textos en assembler 8086 y le quiero añadir la opcion de poder guardar en archivo lo que tiene escrito y poder leerlo, pero no hay caso. Mi idea es poder ingresar el nombre de archivo tanto para abrir como para guardar, no estoy seguro si por defecto busca el archivo en el directorio donde esta el .exe del programa o si hay que pasarselo tambien.
parte del codigo es este: el que me pueda dar una mano desde ya muchas gracias
parte del codigo es este: el que me pueda dar una mano desde ya muchas gracias
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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
nombre LABEL BYTE ;
longitudmax DB SIZEOF cadena ; longitud maxima que podra tener la cadena
longitudreal DB ? ;numero de bytes que mida tu cadena una vez leida
cadena DB 30 DUP(0) ; vector de caracteres en el que se guardara la cadena
vec db 200 dup(0)
leido db 2000 dup(0)
handle dw ?
BufferP DB 4000 DUP(0)
SEGVID DW 0B800H
;--------------------------------------------------------------------------------------------
abrirArchivo :
mov ah,3dh ;Instruccion para abrir el archivo
mov al,0h ;0h solo lectura, 1h solo escritura, 2h lectura y escritura
lea dx,cadena ;abre el archivo llamado archivo2.txt indicado en .data
int 21h
mov bx,ax
mov ah,3fh ;Lectura del archivo
mov cx,200 ;numero de bytes por leer
LEA dx,vec
int 21h
mov ah,09h
lea dx,vec
int 21h
mov ah,3eh ;Cierre de archivo
int 21h
MOV AH,0
INT 16H
INT 20H
ret
;-----------------------------------------------------------------------------
creaCadena macro ;esto lo hago para poder guardar la cadena con el nombre del archivo
push si
push ax
push bx
mov si,0h
mov ah,0Ah ;entrada por teclado con buffer
mov dx,OFFSET nombre ;nota que se le da la etiqueta no el vector de caracteres
int 21h
mov bh, 00h
mov bl, longitudreal
mov cadena[bx], 07 ;Recoje por teclado un carater y lo coloca en AL sin eco
mov cadena[bx+1], '$'
pop bx
pop ax
pop si
endm
;--------------------------------------------------------------------------------------------------------------
;esto lo creo para guardar lo que habia en pantalla cuando desplego la ventanita donde ingresar el nombre del ;archivo .
capturapantalla MACRO
local ciclo1
push si
push ax
push bx
MOV AX, SEGVID
MOV ES,AX
mov cx,4000
mov si,0
ciclo1: mov al,es:[si]
mov [BufferP+si],al
inc si
loop ciclo1
pop bx
pop ax
pop si
ENDM
;---------------------------------------------------------------------------------------
;recuperar la pantalla despues de ingresar el nombre del archivo
recuperaPantalla MACRO
local ciclo
; push si
; push ax
; push bx
; GOTOXY 6,2
;MOV AH,0H
;INT 16H
mov ax,segvid
mov es,ax
;assume es:videoseg
mov si, 0
mov cx, 4000
ciclo:
mov al, [BufferP+si]
mov es:[si], ax
inc si
loop ciclo
mov ah,02h
mov dx,0101h
mov bh,0
int 10h
gotoxy 6,2
;pop bx
;pop ax
;pop si
ENDM
;---------------------------------------------------------
;esto es para que me cree el area dentro del editor donde escribir el nombre del archivo
crearVentanita macro nomEtiqueta
push ax
push bx
push cx
push dx
local lineaVertical_1
local lineaVertical_2
capturaPantalla
limpiarPantalla
mov ax,0h
mov bx,0h
mov cx,0h
mov dx,0h
GOTOXY 7,20
writes_h 205,40 ;Escribo el caracter 205 30 veces
gotoxy 15,20 ;PosiciON
writes_h 205,40 ;Escribo el caracter 205 79 veces
gotoxy 8,20
MOV DH,8
lineaVertical_1:
gotoxy DH,20
write 186 ;ESCRIBE UN SOLO CARACTER
inc DH
cmp DH,15
jne lineaVertical_1
gotoxy 8,60
mov DH,8
lineaVertical_2:
gotoxy DH,60
write 186
inc DH
cmp DH,15
jne lineaVertical_2
gotoxy 7,35
mov ah,09h
mov dx,offset nomEtiqueta ;titulo de la ventana
int 21h
gotoxy 7,20 ;Extremo superior Izquierdo
write 201
gotoxy 7,60 ;Extremo superior Derecho
write 187
gotoxy 15,20
write 200 ;extremo inferior izquierdo
gotoxy 15,60
write 188 ;extremo inferior derecho
gotoxy 11,22
mov ah,09h ;salida de la cadena nombre
mov dx,offset etiquetaNombre
int 21h
gotoxy 11,30
mov ah,00h ; esperar cadena
int 16h
creaCadena
endm
Valora esta pregunta
0