Дополнительные 4 типа данных для сопроцессора:
1) fbld источник – загрузить десятичное число в стек. Преобразовывает BCD-число из источника (m80) и помещает в стек. Структура двоично-десятичных чисел такова: в первых девяти байтах (c нулевого по восьмой) хранится модуль BCD-числа. Каждые 4 бита BCD-числа содержат десятичную цифру (подобно двоично-десятичным командам ALU). Например, число 127 запишется так:
9-й байт 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000001 00100111
Число 327 запишется так:
9-й байт 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000011 00100111
Старший бит девятого байта хранит знак числа. Остальные биты девятого байта ни на что не влияют. Поэтому если старший бит в диапазоне от 0 до 127, то число положительное, а если старший бит в диапазоне от 128 до 255, то число отрицательное. Поэтому, например, если число записано так:
10001111 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 10001000, то это -88
2) fbstp приёмник – считать десятичное число из стека. Попытка записи слишком большого числа приводит к вылетанию программы (если IM=0)
3) fiadd источник – источником является m16|m32, содержащая целое число, приёмник – st(0)
4) (fisub, fisubr, fimul, fidiv, fidivr) источник – аналогично fiadd
5) ficom источник – сравнить целые числа
5) ficomp источник – сравнить целые числа и вытолкнуть из стека
Эти команды сравнивают содержимое регистра st(0) и источника (m16|m32), причём считается, что источник содержит целое число. Остальное аналогично fcom|fcomp
1) fcmovcc приёмник, источник – набор команд, каждая из которых копирует содержимое источника (регистр st(n) в приёмник (только st(0)), если выполняется необходимое условие. Реально каждое условие соответствует тем или иным значениям регистра flags:
если равно | ||
если не равно | ||
если меньше | ||
если меньше или равно | ||
если не меньше | ||
если не меньше или равно |
st(0)>источник | ||
st(0)<источник | ||
st(0)=источник |