Независимо от того, какой язык вы используете, преобразование в десятичную печать в десятичную - это один и тот же процесс.Ну один из двух процессов.Вы можете начать с любого конца.Скажем, у вас было 16-битное число 12345 (0x3039).
Первый способ будет
divide by 10000 result is 1 remainder 2345 save or print the 1
divide by 1000 result is 2 remainder 345 save or print the 2
divide by 100 result is 3 remainder 45 save or print the 3
divide by 10 result is 4 remainder 5 save or print the 4 and 5
Второй способ
divide by 10 result is 1234 remainder 5 save the remainder use the result
divide by 10 result is 123 remainder 4 save the remainder use the result
divide by 10 result is 12 remainder 3 save the remainder use the result
divide by 10 result is 1 remainder 2 save both the remainder and result
print the results in the right order
Теперь, если ваш вопрос заключается в том, как разделить 64-битное число на эти степени 10с набором инструкций, которые у меня есть, ну иногда вы можете, иногда вы не можете, иногда вы должны использовать другие математические правила.Деление на 10 - это то же самое, что деление на 2 * 5, так что вы можете разделить на 2 (смещение), а затем разделить на 5.
0x3039 (12345), разделенное на 10000, равно сдвигу вправо 4, а затем разделить на 5до степени 4 (625).0x303 = 771, 771/625 = 1. Если ваше деление не такое большое, ваше умножение может быть не таким, как 1 * 625 = 0x271, 0x271 << 4 = 0x2710, 0x3039 - 0x2710 = 0x929 = 2345. Как только вы дойдете дочисло, которое вы можете разделить с помощью аппаратного обеспечения, а затем использовать аппаратное обеспечение. </p>
Возможно, вам придется разделить одно из чисел посередине, скажем, у вас было 32-разрядное число (максимум 4 294 967 296), и у вас есть оборудование, которое можно разделитьиз 32-битного числа в 16-битный результат и 16-битный остаток.Вы можете выбить пару цифр, используя описанный выше метод, скажем, оставив 94 967 295, затем разделить на 10000, получив 9496 остатка 7295, и затем обработать эти четыре цифры независимо, используя аппаратное обеспечение.
Если у вас нет аппаратного деления, но умножьте аппаратное обеспечение(да, я знаю, вы указали 8086), вы можете сделать это:
http://www.divms.uiowa.edu/~jones/bcd/divide.html
Если вы помните из начальной школы, как сделать умножение на карандаш и бумагу:
1234
x1010
=====
0000
1234
0000
+1234
========
1246340
Двоичный код делает это довольно простым, как вы могли бы представить из чисел, которые я выбрал.
abcd
x efgh
======
Если вы хотите умножить четыре бита и умножить на четыре бита, то:
result = 0;
if(h) result+=abcd << 0;
if(g) result+=abcd << 1;
if(f) result+=abcd << 2;
if(e) result+=abcd << 3;
С большинством наборов инструкций вы можете каскадировать этот мультиплекс настолько широко, насколько у вас есть память, вы хотите умножить 1 миллион бит на 1 миллион бит.нет проблем, 500 000 байтов плюс немного больше или несколько регистров (и много тактов).