Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Jun 2nd, 2012  |  syntax: None  |  size: 4.51 KB  |  hits: 9  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. ;CODIGO MODIFICADO POR VALERIA MEDELLIN CONTRERAS PARA LA MATERIA
  2. ;DE PROGRAMACION DE SISTEMAS DE UVM CAMPOS CUMBRES
  3. ;DAD POR LA MAESTRA GABRIERLA CUMPEAN
  4.  
  5.  
  6. .MODEL SMALL
  7. .STACK
  8. .DATA
  9.  ContieneHandle          DW    0      
  10.  
  11.      EntradaDelFichero       DB    13,10,"Nombre del archivo: $"
  12.      MensajeDeMostramosError DB    13,10," Error.Verifica el nombre y extension de archivo ",13,10,10,"$"
  13.      GuardarEntradaTeclado   DB    80 DUP (0)   ; BufferLeerDisco para leer desde el teclado
  14.      BufferLeerDisco         DB    2000 DUP (0) ;   "     "     "     "  el disco
  15.      BufferLeerDisco2        db    2 dup(0)
  16.  
  17.   .CODE
  18.  
  19.      ComenzandoElCodigo:
  20.     MOV AX,@DATA
  21.     MOV DS,AX
  22.  
  23.                    LEA   DX,EntradaDelFichero  ;Lo que hacemos con estas instrucciones
  24.                    MOV   AH,9                  ;es pasar a la pantalla, el contenido
  25.                    INT   21h                   ;de la memoria, apuntado por EntradaDelFichero
  26.  
  27.  
  28.                    LEA   DX,GuardarEntradaTeclado        ; Puntero a la dirección para la entrada
  29.                    MOV   BYTE PTR [GuardarEntradaTeclado],60  ; Fijamos los 60 caracteres
  30.                    MOV   AH,10  ; función de entrada de teclado
  31.                    INT   21h  ; LLamar a la interrupción del DOS
  32.  
  33.  
  34.                    MOV   BL,[GuardarEntradaTeclado+1]    ; Esta es la longitud efectiva tecleada
  35.                    MOV   BH,0              
  36.                    ADD   BX,OFFSET GuardarEntradaTeclado ; apuntamos  al final
  37.                    MOV   BYTE PTR [BX+2],0 ; ponemos el cero al final
  38.  
  39.  
  40.  
  41.                    LEA   DX,GuardarEntradaTeclado+2    ; offset
  42.                    MOV   AL,0              ; Lo abrimos para  lectura
  43.                    MOV   AH,3Dh            ; Esta función nos abrirá el fichero
  44.                    INT   21h               ; Y ahora llamamos al DOS
  45.                    JC    MostramosError     ; Mirando los flags si CF=1 Mostrariamos un error
  46.                    MOV   ContieneHandle,AX   ; En el buffer reservado guardamos
  47.                                              ;el handle, para futuras utilizaciones
  48.  ;CODIGO DE ACCESO AL FICHERO
  49.  
  50.    LeemosElFichero: MOV   BX,ContieneHandle ;Movemos a BX el handle contenido en Contiene Hanndle        
  51.                    MOV   CX,2000           ; 2000 será el número de bytes a leer
  52.                    LEA   DX,BufferLeerDisco         ; dirección del BufferLeerDisco
  53.                    MOV   AH,3Fh            ; Esta función es para leer del fichero
  54.                    INT   21h               ; Y aquí llamamos  al DOS
  55.                    JC    MostramosError    ;Si el flag  CF=1 --> MostramosError
  56.                    MOV   CX,AX             ; bytes leídos realmente
  57.                    JCXZ  CerramosElFichero  ;Si es 0 leidos entonces no hay nada que i
  58.                    PUSH  AX                ; preservarmos ax en La Pila
  59.                    LEA   BX,BufferLeerDisco  ; imprimir BufferLeerDisco ...
  60.  
  61.  
  62. SacamosPorPantalla: MOV   DL,[BX]        ; carácter a carácter
  63.                     MOV   AH,2              ; ir llamando al servicio 2 del
  64.                     INT   21h               ; DOS para imprimir en pantalla
  65.                     INC   BX                ; siguiente carácter
  66.                     LOOP  SacamosPorPantalla           ; acabar caracteres
  67.                     POP   AX                ; recuperar nº de bytes leídos
  68.                     CMP   AX,2000           ; ¿leidos 2000 bytes?
  69.                     JE    LeemosElFichero           ; sí, leer otro LeemosElFichero más
  70.  
  71.  
  72. CerramosElFichero: MOV   BX,ContieneHandle  ;Handle de acceso al fichero hilario.txt
  73.                    MOV   AH,3Eh            ; CerramosElFichero
  74.                    INT   21h               ; Llamaremos  al DOS
  75.                    JC    MostramosError
  76.                                            ; sI EL FLAG CF = 1, QUE ESTARÍA EN CY --> MostramosError
  77.                    MOV AH,4CH
  78.                    INT   21h               ; Y llegamos al fin del programa
  79.  
  80. MostramosError:    LEA   DX,MensajeDeMostramosError     ;  MostramosError
  81.                    MOV   AH,9              ; función de escribir en consola
  82.                    INT   21h               ; Llamaremos al DOS
  83.                    CMP   ContieneHandle,0  ;Coparamos si el handle está 0 "!fichero abierto"!
  84.                    JNE   CerramosElFichero
  85.                    MOV AH,4CH            ; sí: CerramosElFicherolo
  86.                    INT 21H                ; Y fin del programa
  87.                    END ComenzandoElCodigo