Size suffix and destination or source size do not match - Assembler
Формулировка задачи:
Добрый день, возникла проблема. Говорю сразу в ассемблере ничего не понимаю, в гугле нашел только одну ссылку на свою проблему. Код пишу в Free Pascal через asm. Вот код ассемблера:
Ругается на строчку mov al,zn1; и mov ah,zn2;. В них я добавляю данные типа integer. Ошибка:size suffix and destination or source size do not match. Мне кажется понимаю, в чем проблема, но из-за недостатка знаний в ассемблере не могу ее решить. Прошу помощи.
asm mov al,zn1; mov ah,zn2; mul ax; mov @result,ax;
Решение задачи: «Size suffix and destination or source size do not match»
textual
Листинг программы
program ass;
var c1,c2:integer;
{$ASMMODE intel}
function add(c1:integer;c2:integer):integer;
begin
asm
mov ax,c1;
mov dx,c2;
add ax,dx;
mov @result,ax;
end;
end;
procedure umnzn(c1:integer;c2:integer);
begin
asm
mov al,c1;
mov bl,c2;
mul bl;
mov @result,ax;
end;
end;
begin
readln(c1);
readln(c2);
writeln(umnzn(c1,c2));
readln;
end.
Объяснение кода листинга программы
- Создание двух переменных для хранения чисел:
c1иc2. - Определение функции
addс двумя параметрамиc1иc2, возвращающей целое число. - Внутри функции
addпроисходит использование инлайн-ассемблера, где значения переменныхc1иc2загружаются в регистры, затем они складываются, и результат сохраняется в регистрax, а затем возвращается в переменную @result. - Определение процедуры
umnznс двумя параметрамиc1иc2, ничего не возвращающей. - Внутри процедуры
umnznтакже используется инлайн-ассемблер, где значения переменныхc1иc2загружаются в регистрыalиbl, происходит умножение значений, и результат сохраняется в регистреax, а затем возвращается в переменную @result. - В основной части программы пользователь вводит значения для
c1иc2. - Затем вызывается процедура
umnznс параметрамиc1иc2, возвращаемое значение выводится на экран. - После этого программа ждет, пока пользователь нажмет клавишу, прежде чем завершить выполнение.