Mat1sha, именно такие "извращенцы" и пишут красивые демы и игры
Mat1sha, именно такие "извращенцы" и пишут красивые демы и игры
Блин, никак не получается 8-ю битами поделить большие числа (ну скажем #AD на #F0) чтоб с остатком как положено (должно быть #00B8)
Что за фигня
код покежь
Своим совершенно непонятным постом Вы ввели читателей в полный ступор.
Во-первых, даже очень большие числа можно поделить всего 4-мя битами, что и делали калькуляторы, которые в начале 70-тых были именно 4-х разрядными, т.к они считали в двоично-десятичной арифметике, а для представления одного числа 4-х разрядов вполне достаточно (кстати именно из-за этого в Intel процессорах сохранился такой пережиток как десятичная коррекция DAA).
Во-вторых, вообще непонятно о чём тут речь. Если только кто-то не изобрёл новую форму представления чисел в 8-ми разрядном компьютере и речь об этом. До сих пор было известно только представление целых чисел и представление дробных чисел в форме плавающей запятой (с мантиссой и порядком).
Но у Вас указаны целые числа, а результат Вы, похоже, ожидаете от деления дробных чисел. Есть процессоры, что умеют делить числа с плавающей запятой, но Z80 это не может. Кстати, этот недостаток Z80 легко исправить подключив к ZX-Spectrum 8-ми разрядный сопроцессор AMD AM911-1.
Из Вашего текста следует, что остаток от деления 0ADH на 0F0H это 0B8H. Наберите в любом макроассемблере строку
RESULT EQU 0ADH mod 0F0H
и Вы убедитесь, что остаток равен 0ADH, что абсолютно ясно и без ассемблера.
Число 0B8H получится только, если использовать программу деления чисел представленных в виде чисел с плавающей запятой и это не остаток, а результат дробного деления, причём почему-то умноженный на 256 и конвертированный снова в HEX. А программа целочисленного деления должна давать 0, т.к это положительные числа и делимое меньше делителя.
Шынни, кто написал такой неправильный шестнадцатеричный калькулятор?
Шестнадцатеричные числа по определению целые. Потому выражение в скобках равно нулю и результат тоже д.быть 0. Если включён шестнадцатеричный режим калькулятора, то и считать надо по правилам шестнадцатеричной арифметики.
Шестнадцатеричная арифметика бывает беззнаковой, без ограничения размерности (так считает калькулятор Windows) и 16-ти разрядной знаковой, когда бит D15 это знак (именно так считает HEX-выражения макроассемблер Microsoft). А 8-ми битовая HEX-арифметика не бывает знаковой. Потому DA00/F000=2, а DA/F0=0.
Только не надо утверждать, что это якобы десятичный калькулятор, но допускающий ввод чисел в HEX-виде.
Последний раз редактировалось barsik; 27.02.2018 в 10:54.
barsik, ты ошибку пишешь
делить надо так
#ad00/#f0
тогда будет #b8
иначе фигня
С уважением,
Jerri / Red Triangle.
Я отвечаю именно на то, что написано.
С такими (совсем другими) входными данными и проблемы нет, т.к нужный результат даст любая процедура деления, в том числе и тривиальная с вычитанием в цикле.
А действительно, чтоб не мучиться с программными арифметическими и даже тригонометрическими вычислениями, полезно поиметь арифметический сопроцессор http://www.cpushack.com/2010/09/23/a...-then-and-now/
Последний раз редактировалось barsik; 27.02.2018 в 11:46.
barsik, Ожидаю 8bit/8bit=8bit.8bit
#AD/#F0=#00B8
Конечно решается и 16bit/8bit (как жерри написал) но хочется 8 циклов заворачивать на целую и 8 на дробную части, а не 16
То же самое как раз и получится, если делимое умножить на 256 (или сдвинуть влево на 8 разрядов) и затем выполнить деление 16-ти разрядного числа на 8-ми разрядное. Но непонятно для чего нужна дробь не десятичная, а в 256-тых долях.
Мне как-то нужны были десятые и сотые, причём в десятичном виде и, если МНИП, я делал так. Делил нацело, получал целую часть, а затем делил остаток и получал дробную часть.
Я так и понял, что Вам сказать нечего.
Последний раз редактировалось barsik; 27.02.2018 в 12:56.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)