Здравствуйте я начинаю изучать Assembler по книге Юрова. В седьмой главе находится программа код которой предоставлен ниже. При компиляции, компилятор пишет "(27)error A2070: invalid instruction operands". Компилировал используя masm611. Подскажите пожалуйста, почему компилятор ругается и как это можно исправить. Большое спасибо. Код (Text): ;-----------Prg_7_3.asm------------------ ;Программа преобразования двузначного шеснадцатеричного числа ;в двоичное представление с использованием команды xlat, ;Вход: исходное шеснадцатеричное число; вводится с клавиатуры ;Выход: результат преобразования в регистр al .model small .data ;сегмент данных message db "Input second hex nomber. $" tabl db 48 dup (0), 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 7 dup (0) db 0ah, 0bh, 0ch, 0dh, 0eh, 0fh, 26 dup (0) db 0ah, 0bh, 0ch, 0dh, 0eh, 0fh, 152 dup (0) .stack 256 ;сегмент стека .code ;сегмент кода main proc ;начало процедуры main mov ax, @data ;физический адрес сегмента данных в регистр ax mov dx, ax ;ax записываем в ds lea bx, tabl ;загрузка адреса строки байт в регистр bx mov ah, 9 mov dx, offset message int 21h ;ввести предложение к вводу xor ax, ax ;очистить регистр ax mov ah, 1h ;значение 1h в регистр ax int 21h ;вводим первую цифру в al xlat ;перекодировка первого введенного символа в al mov dl, al shl dl, 4 ;сдвиг dl влево для освобождения места для младшей цифры int 21h ;ввод второго символа в al xlat ;перекодировка второго символа в al add al, dl ;складываем для получения результата mov ax, 4c00h ;пересылка 4с00h в регистр ax int 21h ;завершение программы main endp ;конец процедуре main end main ;конец программы с точки входа main
horpis Если Вы это не используете, это не значит, что это неверно. END (MASM) Marks the end of a module and, optionally, sets the program entry point to address.
4ainik Вы перепечатывали из книги или это копипаст с содержимого CD? В обоих случаях попробуйте перепечатать строку с ошибкой (27-ю), как отмечено - ошибка в операндах.
Код (Text): shl dl, 4 ;сдвиг dl влево для освобождения места для младшей цифры Я в асме не подсекаю, но может надо dx двигать, а не dl? Мало того что сдвиг четырёхбитного dl на четыре бита выглядит не очень умным, так ведь ещё и не факт, что shl умеет работать с четырёхбитным регистром.
если ошибка в этом shl dl, 4 то в верху надо написать .386 или чтото подобное. точно не помню(p386/.586/ cpu 386) по гниге поищи
просто если по умолканию. то masm компилирует как 8086. а в нем нет такой инструкци. там только (shl reg,1 или shl reg,cl).