Сборка 8086; Числа с плавающей запятой, сложение, вычитание

Мне нужны некоторые ресурсы, чтобы узнать больше о числах с плавающей запятой, мне нужно кодировать операции сложения и вычитания для таких чисел в emu8086 среда ....

Любая помощь высоко ценится


person Pooria Khodaveissi    schedule 27.11.2011    source источник
comment
Ну, исходный 8086 не имел плавающей запятой. Эту функцию обеспечивал (дополнительный) сопроцессор 8087. Но коды операций инструкций 8087 были сфальсифицированы, чтобы перехватывать отсутствие 8087, чтобы можно было эмулировать операции с плавающей запятой с подпрограммами 8086.   -  person Hot Licks    schedule 28.11.2011
comment
И неясно - вы кодируете на ассемблере 8086 на эмуляторе или пишете эмулятор 8086?   -  person Hot Licks    schedule 28.11.2011
comment
Процессор Intel 8086 не содержит модуля с плавающей запятой. Возможно, вы имели в виду сопроцессор 8087 или общий набор инструкций x86?   -  person Polynomial    schedule 28.11.2011
comment
Википедия всегда является хорошим источником информации, хотя она и не содержит фактического набора инструкций или макет с плавающей запятой. (Хотя оказывается, что инструкции перечислены здесь.   -  person Hot Licks    schedule 28.11.2011
comment
Я понимаю, что вы все имеете в виду, ребята, но мой вопрос не в том, что мне нужен такой приказ, как «добавить» или «переместить», чтобы сделать это, мне нужен алгоритм для написания кода, программа, чтобы делать то, что я ищу, Я не просил код, потому что я студент колледжа, я хочу провести исследование, а затем написать код самостоятельно, так что... Кстати, это программа, с которой я работаю: emu8086.com   -  person Pooria Khodaveissi    schedule 28.11.2011
comment
Рискуя побить дохлую лошадь, я бы добавил еще один вопрос: насколько точно вы собираетесь эмулировать 8087? Важно ли, чтобы вы давали результаты, идентичные бит за битом, или просто чтобы вы давали ответы примерно с одинаковой точностью?   -  person Jerry Coffin    schedule 28.11.2011


Ответы (3)


Насколько я могу судить, emu8086 не эмулирует машину с FPU 8087.

Любые операции с плавающей запятой должны быть чисто программными, без использования fld / fadd / fstp или каких-либо обычных устаревших1 инструкции x87.

Если вы хотите использовать инструкции FP в реальном режиме, лучше всего использовать эмулятор, такой как DOSBox или BOCHS, который эмулирует более новый x86 + x87, а не emu8086. Это также имеет то преимущество, что позволяет вам использовать более удобные инструкции, такие как imul ax, 1234, вместо того, чтобы использовать 1-операнд mul.

Если вы застряли с emu8086 (или настоящим микроконтроллером 8086), большинство проблем можно решить с помощью fixed- точка, а не с плавающей запятой: рассматривайте фиксированное количество битов как дробную часть. Это проще сделать в программном обеспечении с целочисленными инструкциями. Но он по-прежнему позволяет вам представлять такие числа, как 1.25.


Сноска 1: В современных x86 x87 FPU устарел; теперь мы используем SSE и SSE2 для скалярной и SIMD FP-математики, если на самом деле не требуется 80-битная точность. emu8086, конечно, тоже не имеет этого. Современные процессоры x86, конечно, по-прежнему поддерживают инструкции x87; обратная совместимость с существующими двоичными файлами является основной причиной существования x86.

person Peter Cordes    schedule 12.06.2019

Вы можете реализовать сложение и вычитание для чисел с плавающей запятой, если сохраните каждое число в массиве размера 2.

Первый блок массива может быть базовым числом, а второй — десятичным числом (конечно, реализованным как обычное целое число).

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

Вы сказали, что вам не нужен код, поэтому я не буду публиковать пример, но, надеюсь, это даст вам представление о том, как вы можете сделать это на процессоре, у которого нет модуля с плавающей запятой.

person Trevor Arjeski    schedule 27.11.2011
comment
Да, это один из способов сделать это. - person Prof. Falken; 28.11.2011

Процессор 8086 не имеет модуля с плавающей запятой. Был сопроцессор с плавающей запятой под названием 8087, который предназначался для использования с 8086.

Вы можете увидеть набор инструкций для оригинального 8087 здесь: http://en.wikipedia.org/wiki/X86_instruction_listings#x87_floating-point_instructions

person Polynomial    schedule 27.11.2011
comment
Я знаю, что вы имеете в виду полиномиальный, но мой вопрос не в том, что мне нужен такой порядок, как «добавить» или «переместить», чтобы сделать это, мне нужен алгоритм для написания кода, программа для выполнения того, что я ищу, я не просил код, потому что я студент колледжа, я хочу провести исследование, а затем написать код на себе, так что.... - person Pooria Khodaveissi; 28.11.2011
comment
Ваш вопрос очень расплывчатый. Вы ищете IDE? Компилятор? Справочник? - person Polynomial; 28.11.2011
comment
Извините, я запутал вас, чтобы было ясно: мне нужен код, который выполняет такие операции, как сложение и вычитание чисел с плавающей запятой, а также я хочу, чтобы код был скомпилирован на эмуляторе, таком как emu8086:emu8086.com........ - person Pooria Khodaveissi; 28.11.2011