2009-07-16 17 views
2

次のプログラムをアセンブルしようとすると、エラー******Fatal** C:\TASM\emu8086\M3\M3.asm(243) Unexpected end of file encountered****が発生する可能性があります。 243行目はプログラムの最後の行ですが、何が間違っているのか分かりません。アセンブリ8086プログラム - アセンブルエラー

.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

アセンブリコードのコメントはお役に立ちます。 :o –

答えて

3

多分あなたはプレーンテキストとして保存していません。 Word形式でも、Unicodeでもないことを確認してください。

+0

+1ソースコードに非アスキー文字がいくつかあります(TASM +のためのグーグル+「予期しないファイルの終了」が関連情報を表示する可能性があります) –

1

エラーメッセージが出たら、あなたは通常、例えば、正確なメッセージテキストのためにグーグルでそれを解決する方法を見つけることができます:http://www.google.ca/search?hl=en&q=tasm+%22Unexpected+end+of+file+encountered%22

チャンスは誰かが持っていたし、前にこの問題について尋ねたことがあります。

あなたのケースでは、Unicodeに問題がなければ、何らかの種類のend文が必要な場合があります。

3

"end"ステートメントで余分な行を追加して、すべてのソースを読み込んだことをアセンブラに伝える必要があります。これは、ソースファイルの最後のブレースに改行がない場合にエラーを投げる多くのCコンパイラによく似ています。

関連する問題