Size suffix and destination or source size do not match - Assembler

Узнай цену своей работы

Формулировка задачи:

Добрый день, возникла проблема. Говорю сразу в ассемблере ничего не понимаю, в гугле нашел только одну ссылку на свою проблему. Код пишу в Free Pascal через asm. Вот код ассемблера:
Листинг программы
  1. asm
  2. mov al,zn1;
  3. mov ah,zn2;
  4. mul ax;
  5. mov @result,ax;
Ругается на строчку mov al,zn1; и mov ah,zn2;. В них я добавляю данные типа integer. Ошибка:size suffix and destination or source size do not match. Мне кажется понимаю, в чем проблема, но из-за недостатка знаний в ассемблере не могу ее решить. Прошу помощи.

Решение задачи: «Size suffix and destination or source size do not match»

textual
Листинг программы
  1. program ass;
  2. var c1,c2:integer;
  3.  
  4. {$ASMMODE intel}
  5.  
  6. function add(c1:integer;c2:integer):integer;
  7. begin
  8.     asm
  9.         mov ax,c1;
  10.         mov dx,c2;
  11.         add ax,dx;
  12.         mov @result,ax;
  13.     end;
  14. end;
  15.  
  16. procedure umnzn(c1:integer;c2:integer);
  17. begin
  18.     asm
  19.        mov al,c1;
  20.        mov bl,c2;
  21.        mul bl;
  22.        mov @result,ax;
  23.     end;
  24. end;
  25.  
  26. begin
  27.     readln(c1);
  28.     readln(c2);
  29.     writeln(umnzn(c1,c2));
  30.     readln;
  31. end.

Объяснение кода листинга программы

  1. Создание двух переменных для хранения чисел: c1 и c2.
  2. Определение функции add с двумя параметрами c1 и c2, возвращающей целое число.
  3. Внутри функции add происходит использование инлайн-ассемблера, где значения переменных c1 и c2 загружаются в регистры, затем они складываются, и результат сохраняется в регистр ax, а затем возвращается в переменную @result.
  4. Определение процедуры umnzn с двумя параметрами c1 и c2, ничего не возвращающей.
  5. Внутри процедуры umnzn также используется инлайн-ассемблер, где значения переменных c1 и c2 загружаются в регистры al и bl, происходит умножение значений, и результат сохраняется в регистре ax, а затем возвращается в переменную @result.
  6. В основной части программы пользователь вводит значения для c1 и c2.
  7. Затем вызывается процедура umnzn с параметрами c1 и c2, возвращаемое значение выводится на экран.
  8. После этого программа ждет, пока пользователь нажмет клавишу, прежде чем завершить выполнение.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.067 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы