尝试汇编以下程序时可能导致错误******Fatal** C:\TASM\emu8086\M3\M3.asm(243) Unexpected end of file encountered****
的原因。第243行是该计划的最后一个,但我无法弄清楚出了什么问题。
.model small
.stack 100h
;org 100h
; pular seção de dados:
;jmp inicio
; ------ data section ------
.data
s_tamanho equ 7
; coordenadas da cobra
; (da cauda à cabeça)
; low byte à esquerda, high byte
; no top - [top, esquerda]
cobra dw s_tamanho dup(0)
cauda dw ?
; direcao
; (codigos de tecla da bios):
esquerda equ 4bh
direita equ 4dh
up equ 48h
baixo equ 50h
; direçao atual da cobra:
cur_dir db direita
espera_tempo dw 0
; mensagem inicial
msg db "==== como jogar ====", 0dh,0ah
db "controle a cobra utilizando as setas direcionais", 0dh,0ah
db "qualquer outra tecla fará a cobra parar.", 0dh,0ah, 0ah
db "aperte ESC para sair.", 0dh,0ah
db "====================", 0dh,0ah, 0ah
db "aperte qualquer tecla para iniciar...$"
; ------ seção de codigo ------
.code
inicio:
; imprime msg inicial:
mov dx, offset msg
mov ah, 9
int 21h
; espera teclado:
mov ah, 00h
int 16h
; esconde o cursor:
mov ah, 1
mov ch, 2bh
mov cl, 0bh
int 10h
jogo_loop:
; escolhe primeira tela do video
mov al, 0 ; numero da tela.
mov ah, 05h
int 10h
; mostra nova cabeça:
mov dx, cobra[0]
; posiciona cursor em dl,dh
mov ah, 02h
int 10h
; imprime '*' no local:
mov al, '*'
mov ah, 09h
mov bl, 0eh ; attribute.
mov cx, 1 ; single char.
int 10h
; mantem a cauda:
mov ax, cobra[s_tamanho * 2 - 2]
mov cauda, ax
call movimento_cobra
; esconde a cauda velha:
mov dx, cauda
; posiciona o curso em dl,dh
mov ah, 02h
int 10h
; imprime ' ' no local:
mov al, ' '
mov ah, 09h
mov bl, 0eh ; atribuir.
mov cx, 1 ; único char.
int 10h
aguarda_entrada_teclado:
; buscar comando:
mov ah, 01h
int 16h
jz no_key
mov ah, 00h
int 16h
cmp al, 1bh ; tecla - ESC?
je parar_jogo ;
mov cur_dir, ah
no_key:
; aguardar:
; pegar intervalos do relogio
; (aprox 18 por segundo)
; desde 00:00 ateh cx:dx
mov ah, 00h
int 1ah
cmp dx, espera_tempo
jb aguarda_entrada_teclado
add dx, 4
mov espera_tempo, dx
; loop infinito:
jmp jogo_loop
parar_jogo:
; mostrar cursor:
mov ah, 1
mov ch, 0bh
mov cl, 0bh
int 10h
ret
; ------ seção das funções ------
; este procedimento cria a
; animação movimentando todas as
; partes ateh a cauda,
; a ultima parte da cauda some:
; [ultima parte (cauda)]-> some
; [parte i] -> [parte i+1]
;------------------------------------------------------------------
movimento_cobra proc near
; seta es para o segmento de informação da bios:
mov ax, 40h
mov es, ax
; aponta di para a cauda
mov di, s_tamanho * 2 - 2
; movimenta todo o corpo
; (ultima parte some)
mov cx, s_tamanho-1
movimento_array:
mov ax, cobra[di-2]
mov cobra[di], ax
sub di, 2
loop movimento_array
cmp cur_dir, esquerda
je movimento_esquerda
cmp cur_dir, direita
je movimento_direita
cmp cur_dir, up
je movimento_up
cmp cur_dir, baixo
je movimento_baixo
jmp parar_movimento ; sem direção.
movimento_esquerda:
mov al, b.cobra[0]
dec al
mov b.cobra[0], al
cmp al, -1
jne parar_movimento
mov al, es:[4ah] ; numero da coluna.
dec al
mov b.cobra[0], al ; retornar a direita.
jmp parar_movimento
movimento_direita:
mov al, b.cobra[0]
inc al
mov b.cobra[0], al
cmp al, es:[4ah] ; col number.
jb parar_movimento
mov b.cobra[0], 0 ; return to esquerda.
jmp parar_movimento
movimento_up:
mov al, b.cobra[1]
dec al
mov b.cobra[1], al
cmp al, -1
jne parar_movimento
mov al, es:[84h] ; numero da fileira -1.
mov b.cobra[1], al ; voltar para baixo.
jmp parar_movimento
movimento_baixo:
mov al, b.cobra[1]
inc al
mov b.cobra[1], al
cmp al, es:[84h] ; numero da fileira -1.
jbe parar_movimento
mov b.cobra[1], 0 ; voltar ao topo.
jmp parar_movimento
parar_movimento:
ret
movimento_cobra endp
;------------------------------------------------------------------
mov ah,4ch
int 21h
该程序用于家庭作业,应该是蛇游戏。评论是葡萄牙语。
答案 0 :(得分:3)
也许你没有把它保存为纯文本。确保它不是Word格式甚至是Unicode。
答案 1 :(得分:3)
你需要在“end”语句中添加一个额外的行来告诉汇编程序它已经读取了所有的源代码。这很像许多C编译器,如果源文件中的最后一个大括号后面没有换行符,则会抛出错误。
答案 2 :(得分:1)
当您收到错误消息时,通常可以通过Google搜索找到确切消息文本的解决方法,例如:http://www.google.ca/search?hl=en&q=tasm+%22Unexpected+end+of+file+encountered%22
很可能以前有人曾经问过这个问题。
在您的情况下,如果它不是Unicode问题,则可能需要某种end
语句。