2014-12-10 2 views
-3

Я хочу создать 64-битный калькулятор (операции: +, -, *, /), используя только 32-битные регистры. Я должен прочитать строку из консоли, преобразовать ее в математическое выражение (например: 123 + 4321, поэтому я должен преобразовать его в два числа 123 и 4321, и я должен добавить их). Пожалуйста, дайте мне представление о том, как представить в памяти 64-битное число и как реализовать добавление, используя только 32-битные регистры!Как создать 64-битный калькулятор в сборке, используя только 32-битные регистры?

+0

Я создал массив с двумя элементами, например num DD 2 DUP (0), и я попытался сохранить первые 32 бита в num (0) и последние 32 бита в num (1). Я успешно сохранил последние 32 бита в num (1), но я не знаю, что делать, если у меня больше, как использовать перенос? –

+2

Используйте 'add', чтобы добавить низкие слова, а затем' adc', чтобы добавить верхние слова и перенос. Аналогично «sub» и 'sbb'. Для умножения и деления архитектура уже обеспечивает 64-битные операции. Обратитесь к справочной системе. – Jester

+2

Основополагающим ответом является «читать в наборе инструкций Intel» и читать «арифметику многоточия». –

ответ

0

Если это X86 или другой малоконтинентальный процессор, тогда вы должны сохранить 32-битные разряды младшего разряда в первом слове, а 32-разрядный бит высокого порядка - во втором слове (это то, как хранятся DD). Сложение и вычитание просто необходимо использовать бит переноса/заимствования.

Умножение выполняется аналогично длинной руке. Вы можете уменьшить число умножений до 3, используя Karatsuba, но я не уверен, что это сэкономит много времени, поскольку умножение происходит довольно быстро.

Отдел выполнен аналогично длинной руке. Если у вас есть разрыв, который использует два 32-битных регистра для дивиденда, например X86, который использует EDX, EAX, который помогает (хотя размер частного ограничивается 32 битами). Общий метод состоит в том, чтобы повторить несколько раз для получения оцененного частного, который сходится на фактическом коэффициенте. Для этого есть несколько способов. Вы можете выполнить поиск в Интернете для 64-битного разрыва, чтобы найти примеры того, как это сделать.

+0

Большое спасибо! –