Assembly 汇编8086程序-汇编错误

Assembly 汇编8086程序-汇编错误,assembly,Assembly,在尝试汇编以下程序时,可能导致错误的原因是什么?**********致命**C:\TASM\emu8086\M3\M3.asm(243)遇到意外的文件结尾****。243行是程序的最后一行,但我不知道出了什么问题 .model small .stack 100h ;org 100h ; pular seção de dados: ;jmp inicio ; ------ data section ------ .data s_tamanho equ 7 ; c

在尝试汇编以下程序时,可能导致错误的原因是什么?**********致命**C:\TASM\emu8086\M3\M3.asm(243)遇到意外的文件结尾****。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

这个程序是用来做家庭作业的,应该是蛇游戏。评论是葡萄牙语的。

可能您没有将其保存为纯文本。确保它不是Word格式,甚至不是Unicode。

当您收到错误消息时,通常可以通过谷歌搜索确切的消息文本来找到解决方法,例如:

有可能是有人曾经问过这个问题


在您的情况下,如果这不是Unicode问题,可能是您需要某种
end
语句。

您需要在“end”语句中添加一行额外的内容,告诉汇编程序它已经读取了所有源代码。这很像许多C编译器,如果源文件中的最后一个大括号后面没有换行符,就会抛出错误。

汇编代码中的注释确实会有所帮助。:o+1源代码中有一些非ascii字符(搜索TASM+“遇到意外的文件结尾”可能会显示相关信息)