2017-04-12 12 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

は、より多くの潜在的な答えを誘致するために、英語に何をすることができます翻訳してください。 –

+0

コードを見やすく書式設定します。 –

+2

あなたのコードは、それが引き起こすすべての割り込みが成功すると想定しているようです。それをしないでください。使用している割り込みのドキュメントを参照して、適切なエラー処理をコードに追加してください。 – Michael

答えて

1
archivo db 0;,0;? 

あなたはarchivoを使用している方法を使用すると、キーボードの単一文字のファイル名から入力していることを示唆しています。あなたが使用する番号システムに注意を払う必要があります。ここ

archivo db 0,0 

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

:これは、罰金、あなたに正しい方法でセットアップarchivoバッファを提供しています!あなたは、サイズCXの79 h(16進数)のサイズが、81バイトのバッファーよりもはるかに大きいことをleidoに求めました。
はおそらく書きたかった:

mov cx, 79  ;Without the "h" 

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

プログラムの残りの部分は、私はあなたがセットアップスタックをした道を嫌う以外、何も問題ないはずです。あなたは、常に排他的に設定でもスタックサイズの必要があり、この小さなプログラムでは、その大きな全くである必要はありません。

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

でもサイズ権利を取得するための簡単な方法は、dwディレクティブを使用することです。
同じ512のバイトは、その後になっスタック:

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

@GuilinNEX DOS呼び出しのエラーをチェックしない場合は、少なくとも現在のディレクトリに、実際には1文字のファイル名を持つファイルが含まれていることを確認してください。 –

関連する問題