разделить 64-битные на два 32-битных регистра - PullRequest
2 голосов
/ 14 октября 2010

Я пытаюсь написать эмулятор x86 на JavaScript для образовательных целей. Я уже написал компилятор и сейчас пытаюсь написать эмулятор x86 на JavaScript.

Однако у меня проблема с инструкцией DIV. Согласно http://siyobik.info/index.php?module=x86&id=72 DIV принимает 64-битное число в качестве ввода, интерпретируя EDX как старший 32-битный и EAX как младший 32-битный. Затем он делит это число на параметр DIV и помещает результат (если он не больше 0xFFFFFFFF) в EAX, а остаток в EDX.

Поскольку JavaScript не поддерживает 64-битное целое число, мне нужно применить некоторые приемы. Но до сих пор я не нашел ничего полезного.

Кто-нибудь здесь имеет представление, как правильно реализовать это с помощью 32-битной арифметики?

1 Ответ

1 голос
/ 14 октября 2010

Моя предыдущая версия была неверной, поэтому я перезапишу ее.

Максимальное значение int в JS составляет 53 бита, мы можем использовать его.) и разделить.Res = x[63:16] / y * 16 или << 0x01.Rem = x[63:16] % y * 16.Затем выполните: Res |= (Rem | x[15:0]) / y

* - x[a:b] означает биты x от a-го до b-го.как X = 0110, x[3:1] = 011

...