lunes, 15 de noviembre de 2010

Ejemplo de manejo de archivos con ensamblador 8086

;******************************************************************************
;Ejemplo de manejo de archivos
; el programa combina los contenidos de dos archivos
; genera un tercer archivo con los caracteres alternados de los archivos leidos
;******************************************************************************
;
;  elaborado por Fernando Monrroy Dipp
;
;******************************************************************************
.model small
.stack 64
.data
arch1 db 'uno.txt',0    ;un archivo, debe estar en la misma carpeta del ejecutable
arch2 db 'dos.txt',0    ;otro archivo, debe estar en la misma carpeta del ejecutable
arch3 db 'tres.txt',0    ;se crea al ejecutar el programa
buf1 db 20 dup(?)    ;buffer de lectura del archivo 1
buf2 db 20 dup(?)    ;buffer de lectura del archivo 2
buf3 db 40 dup(?)    ;buffer de escritura del archivo 3
erm db 10,13,'error!!!!',10,13,'$'
exm db 10,13,'exito!!!!',10,13,'$'
fiha1 dw ?
fiha2 dw ?

.code
uno:    mov ax,@data
    mov ds,ax    ; lo de siempre
    lea dx,arch1
    mov ax,3d00h
    int 21h        ;abre archivo 1
    jc error
    mov fiha1,ax
    mov bx,fiha1
    mov ah,3fh
    mov cx,20
    lea dx,buf1
    int 21h        ;lee archivo 1 en buf1
    jc error   
    mov ah,3eh
    int 21h        ;cierra arch1
    lea dx,arch2
    mov ax,3d00h
    int 21h        ;abre archivo 2
    jc error
    mov fiha1,ax
    mov bx,ax
    mov ah,3fh
    mov cx,20
    lea dx,buf2
    int 21h        ;lee archivo 2 en buf2
    jc error
    mov ah,3eh
    int 21h        ;cierra archivo 2
    mov ah,3ch
    lea dx,arch3
    mov al,0
    mov cx,0
    int 21h        ;crea archivo 3
    jc error
    mov fiha2,ax

    xor bx,bx        ;base para apuntar los tres buffers
    mov cx,20        ;caracteres a mover
    xor si,si        ;indice para desplazar buffer 3
lazo:    mov al,buf1[bx]        ;lee ch de buffer 1
    mov buf3[bx+si],al    ;mueve a buffer 3
    inc si            ;desplaza indice
    mov al,buf2[bx]        ;lee ch de buffer 2
    mov buf3[bx+si],al    ; mueve a buffer 3

    inc bx            ;actualiza base
    loop lazo        ;repite lazo hasta que cx sea 0

    mov bx,fiha2    ;   
    mov ah,40h
    lea dx,buf3
    mov cx,40
    int 21h        ;escribe 40 ch de buffer 3 a archivo 3
    jc error
    mov ah,3eh
    int 21h        ;cierra archivo
    jc error
    lea dx,exm    ;
    mov ah,9
    int 21h        ;muestra mensaje de exito
    jmp fin
error:    lea dx,erm
    mov ah,9
    int 21h        ;muestra mensaje de error
fin:    mov ah,4ch
    int 21h        ;retorna al ss oo
    end uno

7 comentarios:

  1. En serio muchas gracias, su publicación me acaba de ayudar mucho , gracias nuevamente por publicaciones tan buenas :)
    Saludos :)

    ResponderEliminar
  2. Gracias, de verdad fue muy útil, andaba como loco buscando esta info.

    ResponderEliminar
  3. Oye, para que sirve las variables fiha?

    ResponderEliminar
  4. como puedo editar un txt, escribirle o eliminarle

    ResponderEliminar
  5. los comentarios del código son una basura la verdad. ¿Que es eso de "lo de siempre"?

    ResponderEliminar