PDA

Показать полную графическую версию : Ошибка в коде программы"Unexpected end of file encountered"


LexKD
12-03-2014, 00:02
При ассемблировании программы выдаёт такую вот ошибку **Fatal** 3.ASM(40) Unexpected end of file encountered

Подскажите в чём проблема и как решить.


;---------Prg_1.asm----------------------
;Программа преобразования двузначного шестнадцатеричного числа
;в двоичное представление с использованием команды xlat.
;Вход: исходное шестнадцатеричное число; вводится с клавиатуры.
;Выход: результат преобразования в регистре al.
.model small
.data ;сегмент данных
message db ‘Введите две шестнадцатеричные цифры,$’
tabl db 48 dup (0),0,1,2,3,4,5,6,7,8,9, 8 dup (0)
db 0ah,0bh,0ch,odh,0eh,0fh,27 dup (0)
db 0ah,0bh,0ch,odh,0eh,0fh, 153 dup (0)
.stack 256 ;сегмент стека
.code
;начало сегмента кода
main proc ;начало процедуры main
mov ax,@data ;физический адрес сегмента данных в регистр ax
mov ds,ax ;ax записываем в ds
lea bx,tabl ;загрузка адреса строки байт в регистр bx
mov ah,9
mov dx,offset message
int 21h ;вывести приглашение к вводу
xor ax,ax ;очистить регистр ax
mov ah,1h ;значение 1h в регистр ah
int 21h ;вводим первую цифру в al
xlat ;перекодировка первого введенного символа в al
mov dl,al
shl dl,4 ;сдвиг dl влево для освобождения места для младшей цифры
int 21h ;ввод второго символа в al
xlat ;перекодировка второго введенного символа в al
add al,dl ;складываем для получения результата
mov ax,4c00h ;пересылка 4c00h в регистр ax
int 21h ;завершение программы
main endp ;конец процедуры main
codeends ;конец сегмента кода
main end ;конец программы с точкой входа main

User001
12-03-2014, 15:03
Какой ассемблер у вас? И вот это:
.code »
codeends ;конец сегмента кода »
Как-то не сходится. codeends нужен пробел, а строка эта вообще тут неизвестно зачем.
Посмотрите здесь (http://natalia.appmat.ru/c&c++/assembler.html) пункт 7.1.

LexKD
12-03-2014, 19:41
если code ends написать раздельно, то появляется ошибка.

компилирую в PFE32 через tasm и tlink

Прога должна переводить шестнадцатеричное число в двоичное значение.


;---------Prg_1.asm----------------------
;Программа преобразования двузначного шестнадцатеричного числа
;в двоичное представление с использованием команды xlat.
;Вход: исходное шестнадцатеричное число; вводится с клавиатуры.
;Выход: результат преобразования в регистре al.
.model small
.data ;сегмент данных
message db ‘Введите две шестнадцатеричные цифры,$’
tabl db 48 dup (0),0,1,2,3,4,5,6,7,8,9, 8 dup (0)
db 0ah,0bh,0ch,odh,0eh,0fh,27 dup (0)
db 0ah,0bh,0ch,odh,0eh,0fh, 153 dup (0)
.stack 256 ;сегмент стека
.code
;начало сегмента кода
;начало процедуры main
Имя:mov ax,@data ;физический адрес сегмента данных в регистр ax
mov ds,ax ;ax записываем в ds
lea bx,tabl ;загрузка адреса строки байт в регистр bx
mov ah,9
mov dx,offset message
int 21h ;вывести приглашение к вводу
xor ax,ax ;очистить регистр ax
mov ah,1h ;значение 1h в регистр ah
int 21h ;вводим первую цифру в al
xlat ;перекодировка первого введенного символа в al
mov dl,al
shl dl,4 ;сдвиг dl влево для освобождения места для младшей цифры
int 21h ;ввод второго символа в al
xlat ;перекодировка второго введенного символа в al
add al,dl ;складываем для получения результата
mov ax,4c00h ;пересылка 4c00h в регистр ax
int 21h ;завершение программы
end имя ;конец программы с точкой входа main

так код работает, но возник спор с другом.Он говорит, что так прога работает с багами.Я правильно исправил?
Прога работает не полностью, она выводи сообщение, что нужно ввести шестнадцатеричное число, после ввода ничего не происходит.

User001
13-03-2014, 07:55
так код работает »
Как видите, данная строка не нужна.
Если она компилируется, значит синтаксических ошибок нет.
после ввода ничего не происходит. »
Как понять ничего не происходит?
Пройдитесь дебаггером, в dl, как я понимаю, ваш искомый результат.

LexKD
13-03-2014, 17:01
если я не ошибаюсь, то в Programmer's file editor нет дебагера. Могу ошибаться, только недавно начал изучать ассемблер.

User001
14-03-2014, 08:26
если я не ошибаюсь, то в Programmer's file editor нет дебагера. Могу ошибаться, только недавно начал изучать ассемблер. »Поищите, с tasm и tlink, насколько я помню, td шел.
после ввода ничего не происходит »В комментариях же написано, что результат в al. Данный результат вам надо либо на экран выводить, либо смотреть в дебаггере.




© OSzone.net 2001-2012