Assembly 按menu键打开组件上cmd上的.txt文件
我目前正在为大学开发一个组装项目,其中包括为迷宫游戏创建一个菜单,但首先我必须通过按“1”键访问所需的菜单选项,然后我的cmd应该显示“labirito.txt”的内容,即我的迷宫。我已经有了退出选项运行的钥匙,但我的“JOGAR”播放选项不起作用。我打开“Menu.txt”并在cmd上打印内容,我想对“maze.txt”做同样的操作,但我不知道为什么。这是我的密码:Assembly 按menu键打开组件上cmd上的.txt文件,assembly,x86,dos,dosbox,Assembly,X86,Dos,Dosbox,我目前正在为大学开发一个组装项目,其中包括为迷宫游戏创建一个菜单,但首先我必须通过按“1”键访问所需的菜单选项,然后我的cmd应该显示“labirito.txt”的内容,即我的迷宫。我已经有了退出选项运行的钥匙,但我的“JOGAR”播放选项不起作用。我打开“Menu.txt”并在cmd上打印内容,我想对“maze.txt”做同样的操作,但我不知道为什么。这是我的密码: .8086 .model small .stack 2048h dseg segment para public 'da
.8086
.model small
.stack 2048h
dseg segment para public 'data'
Erro_Open db 'Erro ao tentar abrir o ficheiro$'
Erro_Ler_Msg db 'Erro ao tentar ler do ficheiro$'
Erro_Close db 'Erro ao tentar fechar o ficheiro$'
Fich1 db 'Menu.TXT',0
Fich2 db 'Labirinto.TXT',0
Fich3 db 'Top10.TXT', 0
HandleFich dw 0
car_fich db ?
dseg ends
cseg segment para public 'code'
assume cs:cseg, ds:dseg
LE_TECLA PROC
mov ah,08h
int 21h
mov ah,0
cmp al,0
jne SAI_TECLA
mov ah, 08h
int 21h
mov ah,1
SAI_TECLA: RET
LE_TECLA endp
carrega_labirinto Proc
mov ah,3dh ; vamos abrir ficheiro para leitura
mov al,0 ; tipo de ficheiro
lea dx,Fich2 ; nome do ficheiro
int 21h ; abre para leitura
;jc erro_abrir ; pode aconter erro a abrir o ficheiro
mov HandleFich,ax ; ax devolve o Handle para o ficheiro
;jmp ler_ciclo
ret
carrega_labirinto endp
carrega_top10 Proc
mov ah,3dh ; vamos abrir ficheiro para leitura
mov al,0 ; tipo de ficheiro
lea dx,Fich3 ; nome do ficheiro
int 21h ; abre para leitura
; jc erro_abrir ; pode aconter erro a abrir o ficheiro
;; mov HandleFich,ax ; ax devolve o Handle para o ficheiro
; jmp ler_ciclo
ret
carrega_top10 endp
Main Proc
mov ax,dseg
mov ds,ax
;abre ficheiro
mov ah,3dh ; vamos abrir ficheiro para leitura
mov al,0 ; tipo de ficheiro
lea dx,Fich1 ; nome do ficheiro
int 21h ; abre para leitura
jc erro_abrir ; pode aconter erro a abrir o ficheiro
mov HandleFich,ax ; ax devolve o Handle para o ficheiro
jmp ler_ciclo ; depois de abero vamos ler o ficheiro
erro_abrir:
mov ah,09h
lea dx,Erro_Open
int 21h
jmp sair
ler_ciclo:
mov ah,3fh
mov bx,HandleFich
mov cx,1
lea dx,car_fich
int 21h
jc erro_ler
cmp ax,0 ficheiro
je fecha_ficheiro
mov ah,02h
mov dl,car_fich
int 21h
jmp ler_ciclo
erro_ler:
mov ah,09h
lea dx,Erro_Ler_Msg
int 21h
fecha_ficheiro: ; vamos fechar o ficheiro
mov ah,3eh
mov bx,HandleFich
int 21h
jnc LER_OPCAO
mov ah,09h
lea dx,Erro_Close
Int 21h
LER_OPCAO:
call LE_TECLA
; cmp ah, 1
; je ESTEND
CMP AL, '1'
JE jogar
CMP AL, '2'
JE TOP10
CMP AL, '3'
JE CONFIGURAR
CMP AL, '4'
JE SAIR
jmp LER_OPCAO
JOGAR:
; call carrega_labirinto ;1
jmp LER_OPCAO
TOP10:
; call carrega_top10 ;2
jmp LER_OPCAO
CONFIGURAR:
; call carrega_configuracao ;3
jmp LER_OPCAO
SAIR:
mov ah,4CH
INT 21H
Main endp
cseg ends
end Main
因为选项1、2和3的代码已经被注释掉了?即使您对选项1调用carrega_Labirito,它所做的只是打开一个文件并存储文件句柄-仅此而已。通过
int 21h
服务,您将无法打开名为“labirito.txt”
的文件,这样您就需要“short”8.3文件的编码名称(可能类似于“LABIRI~1.TXT”
。使用dir/?
查看哪个命令行选项显示短名称(我没有windows…实际上dosbox“dir”应该适合您)。长名称是Windows 95 IIRC的功能。@Ped7g我错过了一个好的陷阱。最简单的解决方法是使用8.3文件名,如“LABY.TXT”
或“MAZE.TXT”
。路易斯,8.3表示文件名最多8个字符+文件扩展名最多3个字符。