![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 08.03.2010
Сообщений: 48
|
![]()
Здравствуйте! У меня появилась проблема относительно деления на слово
(регистры 16-bit). Вот, что я прочитал: если делитель размером в слово, то делимое должно быть расположено в паре регистров dx:ax, причем младшая часть делимого находится в ax. После операции частное помещается в ax, а остаток — в dx; При выполнении операции деления возможно возникновение исключительной ситуации: 0 — ошибка деления. Эта ситуация возникает в одном из двух случаев: делитель равен 0 или частное слишком велико для его размещения в регистре eax/ax/al. То-есть, если я делю F4240h на 0Ah - получается 186A0h и остаток 0, то выходит ошибка деления. можно ли перенаправить либо входные данные либо результат в другие регистры, и вобще возможно тут что-то зделать? |
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 16.01.2011
Сообщений: 325
|
![]()
begovik, дели сначала старшую часть, потом младшую.
Код:
|
![]() |
![]() |
![]() |
#3 |
Участник клуба
Регистрация: 11.01.2010
Сообщений: 1,139
|
![]()
begovik
Пишем программу для беззнакового деления переменной, размером в 3 байта (0F4240h), на переменную, размером в байт (0Ah). Представим делимое как (a*10000h+b*100h+c), а делитель как d первое деление a на d даст частное r1 и остаток q1 второе деление (q1*100h+b) на d – частное r2 и остаток q2; третье деление (q2*100h+c) на d – частное r3 и остаток q3; результатом будет частное (r1*10000h+r2*100h+r3) и остаток q3 А теперь, следуя этой методе, делим 0F4240h на 0Ah и смотрим остатки 1) 0F4240h / 0Ah = 186A0h остаток 0 186h > 0Ah 2) 186A0h / 0Ah = 2710h остаток 0 27h > 0Ah 3) 2710h / 0Ah = 3E8h остаток 0 3 < 0Ah отсюда можно воспользоваться обычным делением 4) 3E8h / 0Ah = 64h остаток 0 5) 64h / 0Ah = 0Ah остаток 0 6) Ah / 0Ah = 1 остаток 0 7) 1 / 0Ah = 0 остаток 1 собираем остатки и получаем число 1000000, проверяем на калькуляторе 1000000=0F4240h |
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 08.03.2010
Сообщений: 48
|
![]()
Спасибо, vadimych! Спасибо, Mikl___!
Программа выводит на экран все кратные двух чисел, начиная от произведения одного на другое. Правда работает ещё кривовато... |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Деление | Nikita++ | Помощь студентам | 8 | 19.03.2011 18:56 |
Деление | 0479 | Общие вопросы по Java, Java SE, Kotlin | 1 | 08.11.2010 00:37 |
Деление в C++ | Bumbuk | Помощь студентам | 5 | 24.06.2010 02:06 |
Деление | |{ot | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 4 | 24.03.2009 01:50 |
деление | natasha | Общие вопросы Delphi | 6 | 22.01.2007 12:39 |