Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Ошибка в коде программы"Unexpected end of file encountered" (http://forum.oszone.net/showthread.php?t=279094)

LexKD 12-03-2014 00:02 2322333

Ошибка в коде программы"Unexpected end of file encountered"
 
Вложений: 1
При ассемблировании программы выдаёт такую вот ошибку **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 2322604

Какой ассемблер у вас? И вот это:
Цитата:

Цитата LexKD
.code »

Цитата:

Цитата LexKD
codeends ;конец сегмента кода »

Как-то не сходится. codeends нужен пробел, а строка эта вообще тут неизвестно зачем.
Посмотрите здесь пункт 7.1.

LexKD 12-03-2014 19:41 2322714

если 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 2322868

Цитата:

Цитата LexKD
так код работает »

Как видите, данная строка не нужна.
Если она компилируется, значит синтаксических ошибок нет.
Цитата:

Цитата LexKD
после ввода ничего не происходит. »

Как понять ничего не происходит?
Пройдитесь дебаггером, в dl, как я понимаю, ваш искомый результат.

LexKD 13-03-2014 17:01 2323093

если я не ошибаюсь, то в Programmer's file editor нет дебагера. Могу ошибаться, только недавно начал изучать ассемблер.

User001 14-03-2014 08:26 2323378

Цитата:

Цитата LexKD
если я не ошибаюсь, то в Programmer's file editor нет дебагера. Могу ошибаться, только недавно начал изучать ассемблер. »

Поищите, с tasm и tlink, насколько я помню, td шел.
Цитата:

Цитата LexKD
после ввода ничего не происходит »

В комментариях же написано, что результат в al. Данный результат вам надо либо на экран выводить, либо смотреть в дебаггере.


Время: 09:20.

Время: 09:20.
© OSzone.net 2001-