2017-04-12 82 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 db 0,0 

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

這裏需要注意的是使用數字系統!您已要求79 h(十六進制數字)的大小(CX),這比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調用中是否有任何錯誤,那麼至少確保當前目錄包含您想要讀取的文件(使用單個字符文件名!)。 –

相關問題