Помогите пожалуйста с программой на ассемблере

01.01.2001

Помогите пожалуйста с программой на ассемблере
Здравствуйте, начал изучать ассемблер по книги Юрова. И тут примере первой программы которая переводит двузначное шестнадцатеричное число в символьном виде в двоичное представление. Пользуюсь fasm. вот сам код:
data segment para public 'data'
message db "Ââåäèòå äâå øåñòíàäöàòåðè÷íûå öèôðû.$"
data ends
stk segment stack
db 256 dup ("?");
stk ends
code segment para public "code";
main proc;
assume cs:code,ds:data,ss,stk
mov ax,data;
mov ds,ax;
mov ah,9
mov dx,offset message
int 21h
xor ax,ax;
mov ah,1h;
int 21h;
mov dl,al;
sub dl,30h;
cmp dl,9h;
jle m1;
sub dl,7h;
m1:;
mov cl,4h;
shl dl,cl;
int 21h;
sub al,30h;
cmp al,9h;
jle m2;
sub al,7h;
m2:;
add dl,al;
mov ax,4c00h;
int 21h;
main andp;
code ends;
end main

во время компиляции он выдает ошибку illegal instruction, ссылаясь на первую строку. Пожалуйста подскажите почему она не работает и как ее заставить работать. Masm не ставлю потому что у меня windows 7 64 bit. Заранее спасибо

  • Программа не компилируется, потому что книги Юрова расчитаны на использование компиляторов MASM и TASM.
    FASM имеет другой синтаксис.
    MASM32 нормально работает в 64-разрядной среде Windows, но идущий в комплекте 16-разрядный линковщик link16 (для сборки исполняемого кода из объектного данной программы) работать не может.

    Но даже когда вы её скомпилируете, переписав под FASM, или собрав сторонним 32-разрядным линковщиком, то программа получится 16-разрядной и под Windows 7 x64 запускаться откажется.

    Выходы из создавшейся ситуации:
    - Начинать изучение ассемблера сразу с 32-разрядных программ.
    - Использовать виртуальную среду для запуска 16-разрядных приложений: как компиляторов, так и созданных ими программ. Можно установить виртуальную машину (Virtual Box, VMWare) и в ней установить 32-разрядную Windows или 16-разрядную MS DOS, или использовать эмулятор MS DOS DosBox.

Вас заинтересует