Ensamblador - problema cuando quiero crear el archivo

 
Vista:
Imágen de perfil de matyas

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

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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder