Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.07.2022, 14:19   #1
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 603
По умолчанию Остаток от деления (asm)

Тестовые процедуры
Код:
Function aaa(a, b:byte):byte;
asm
  mov al, a
  mov cl, b
  div al, cl
  mov result, al
end;
Выдаёт ошибку при исполнении

Код:
Function aaa(a, b:LongWord):LongWord;
asm
  mov eax, a
  mov ecx, b
  div eax, ecx
  mov result, edx
end;
В ответ вместо ответа возвращает переменную А

Вопрос:
как в asm получить остаток от деления? Во всех статьях что я читал, писалось что при div остаток от деления выпадает в регистр edx
Kronos913 вне форума Ответить с цитированием
Старый 03.07.2022, 15:09   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Код:
div cl
или
Код:
div ecx
иначе Pascal генерирует не ту инструкцию. Она не дает остаток.
macomics вне форума Ответить с цитированием
Старый 03.07.2022, 16:26   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Для байтов:
Код:
Function aaa(a, b: byte): byte;
asm
  div dl
  mov al, ah
end;
Аргументы функции в al и dl, а остаток от деления будет в ah.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 03.07.2022, 16:48   #4
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Аргументы функции в al и dl, а остаток от деления будет в ah.
Смотря у какого компилятора. FreePascal их по-другому передает. И ah стоит очистить.
Код:
asm
  xor %ah, %ah
  mov a, %al
  div b
  mov %ah, Result
end;
Код:
asm
  xor %edx, %edx
  mov a, %eax
  div b
  mov %edx, Result
end;
macomics вне форума Ответить с цитированием
Старый 03.07.2022, 17:15   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Цитата:
Сообщение от macomics Посмотреть сообщение
Смотря у какого компилятора.
С этим согласен.
Цитата:
Сообщение от macomics Посмотреть сообщение
И ah стоит очистить.
Не стал очищать, так как дельфи добавил "and eax,$000000ff" после вызова функции.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 03.07.2022, 19:01   #6
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Для 32-бит лучше так
Код:
asm
  mov a, %eax      // mov %ecx, %eax
  mov b, %ecx      // mov %edx, %ecx
  xor %edx, %edx   // xor %edx, %edx
  div %ecx         // div %ecx
  mov %edx, Result // mov %edx, %eax
end;
Нашел вариант, при котором предыдущий мой код не сработает.
macomics вне форума Ответить с цитированием
Старый 06.07.2022, 11:49   #7
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 603
По умолчанию

Вот такой кусок кода у меня сейчас... Потому что не получилось нормально приладить деление
Код:
  @Kostyl:
    cmp ah, dh
      jb @Kostyl2
    sub ah, dh
    jmp @Kostyl
  @Kostyl2:
Ладно тут будет максимум 127 итераций. А там где у меня применяется на практике - 3-4 итерации. Потому что это из процедуры для строк

Но все же, надо сделать нормально ...
Kronos913 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
остаток от деления madman_34 Общие вопросы C/C++ 1 17.12.2011 00:37
Остаток от деления Memfis_nya Помощь студентам 23 26.09.2010 14:58
Получить остаток от деления Cpluser Общие вопросы C/C++ 18 26.02.2009 18:05
остаток от деления % Division Общие вопросы C/C++ 5 25.12.2008 14:08