2017-04-12 2 views
-1
;------------------------------------------------------ 
Pila Segment 

    db 0FFFFh Dup (?) ;declracion del segmento de pila 

Pila EndS 
;------------------------------------------------------ 

;------------------------------------------------ 
Datos Segment ; declaracion del segmento de datos 

    archivo db 0;,0;? 
    leido db 81 dup (24h) ; Cantidad de letras que va a leer. 
    handle dw ? ; Identificador para el archivo. 

Datos ENdS 
;------------------------------------------------ 

;---------------------------------------------------- 
Codigo Segment ; declaracion del segmento de codigo 

Assume CS:Codigo, DS:Datos, SS:Pila 

Inicio: 

    mov ax, Datos 
    mov DS, ax 
    xor ax,ax 


    mov ah,01h 
    int 21h 

    mov archivo, al 
    mov dx, offset archivo ; 

    mov al, 0h 
    mov dx, offset archivo 
    mov ah, 3dh 
    int 21h 
    mov handle, ax 
    mov bx, handle 
    mov cx, 79h 
    mov dx, offset leido 
    mov ah, 3fh 
    int 21h 


    mov bx, handle 
    mov ah, 3eh 
    int 21h 

    xor ax,ax 
    xor dx,dx 
    ;imprimir el contenido de leido 
    mov dx, offset leido ; 
    mov ah, 9 
    int 21h 

    xor ax,ax ;Limpia el al y prepara el ah para la salida. 
    mov ax,4c00h ;Servicio AH=4c int 21h para salir del programa. 
    int 21h ;Termina el programa. 

Codigo EndS 
    End Inicio 
+0

pour aider à attirer des réponses plus potentiels, s'il vous plaît traduire ce que vous pouvez en anglais. –

+0

Et formatez votre code afin qu'il soit lisible. –

+2

Votre code semble supposer que chaque interruption qu'il déclenche réussira. Ne fais pas ça. Consultez la documentation pour les interruptions que vous utilisez et ajoutez une gestion adéquate des erreurs à votre code. – Michael

Répondre

1
archivo db 0;,0;? 

La façon dont vous utilisez Archivo suggère que vous saisissez au clavier un nom de fichier de caractères. Ceci est bien fourni vous configurer le Archivo tampon de manière correcte:

archivo db 0,0 

mov bx, handle 
mov cx, 79h 
mov dx, offset leido 
mov ah, 3fh 
int 21h 

Ici, vous devez prêter attention au système de numéro que vous utilisez! Vous avez demandé une taille (en CX) de 79 h (un nombre hexadécimal) qui est beaucoup plus que le tampon de 81 octets à leido.
Vous vouliez sans doute écrire:

mov cx, 79  ;Without the "h" 

db 0FFFFh Dup (?) ;declracion del segmento de pila 

Le reste du programme ne devrait poser aucun problème, sauf que je n'aime pas la façon dont vous avez configuré la pile. Vous devez toujours configurer exclusivement un même taille pile et dans ce petit programme, il n'a pas besoin d'être grand que tout:

db 512 dup (?) ;declracion del segmento de pila 

Un moyen facile d'obtenir le droit même taille est en utilisant la directive dw.
Les mêmes 512 octets pile devient alors:

dw 256 dup (?) ;declracion del segmento de pila 
+0

@GuilinNEX Si vous ne vérifiez pas les erreurs des appels DOS, assurez-vous que le répertoire en cours contient bien le fichier (avec un seul nom de fichier!) Que vous voulez lire. –