Assembly 有人可以帮忙,为什么这不读取文件?

Assembly 有人可以帮忙,为什么这不读取文件?,assembly,x86-16,tasm,Assembly,X86 16,Tasm,您使用archivo的方式表明您正在从键盘输入一个单字符文件名。如果您以正确的方式设置archivo缓冲区,则可以: archivo db 0;,0;? 这里你需要注意你使用的数字系统!您要求的大小(在CX中)为79h(一个十六进制数),远大于leido的81字节缓冲区。 你可能想写: mov bx, handle mov cx, 79h mov dx, offset leido mov ah, 3fh int 21h 程序的其余部分应该不会带来任何问题,除非我不喜欢你设置堆栈的方式

您使用archivo的方式表明您正在从键盘输入一个单字符文件名。如果您以正确的方式设置archivo缓冲区,则可以:

archivo db 0;,0;?

这里你需要注意你使用的数字系统!您要求的大小(在
CX
中)为79h(一个十六进制数),远大于leido的81字节缓冲区。
你可能想写:

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

程序的其余部分应该不会带来任何问题,除非我不喜欢你设置堆栈的方式。您应该始终专门设置一个大小均匀的堆栈,在这个小程序中,它根本不需要那么大:

db 0FFFFh Dup (?) ;declracion del segmento de pila
使用
dw
指令是获得均匀尺寸的简单方法。
然后,相同的512字节堆栈变为:

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

为了吸引更多潜在的答案,请尽可能地将代码翻译成英语。并对代码进行格式化,使其清晰易读。您的代码似乎假设它触发的每个中断都会成功。不要那样做。请参阅您正在使用的中断的文档,并在代码中添加适当的错误处理。@GuilinNEX如果您没有检查DOS调用中的任何错误,那么至少要确保当前目录确实包含该文件(文件名为单字符!)您要读取的文件。@GuilinNEX如果您没有检查DOS调用是否有任何错误,那么至少要确保当前目录确实包含您要读取的文件(文件名只有一个字符!)。
mov cx, 79       ;Without the "h"
db 0FFFFh Dup (?) ;declracion del segmento de pila
db 512 dup (?) ;declracion del segmento de pila
dw 256 dup (?) ;declracion del segmento de pila