;------------------------------------------------------
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 :(得分:1)
archivo db 0;,0;?
您使用 archivo 的方式表明您从键盘输入单个字符文件名。如果您以正确的方式设置 archivo 缓冲区,这很好:
archivo db 0,0
mov bx, handle mov cx, 79h mov dx, offset leido mov ah, 3fh int 21h
在这里你需要注意你使用的数字系统!您已询问79 h (十六进制数)的大小(CX
),远远大于 leido 的81字节缓冲区。
你可能想写:
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