Как скопировать вещественное значение из сопроцессора в переменную в ассемблере?

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

model small
.386
.stack 100h
.data
errormes db 'Invalid number format$'
mes1 db 'Input left border',10,13,'$'
mes2 db 'Input right border',10,13,'$'
max db 10
len db 0
arr db 10 dup (0)
x dw 0
ten dw 10
n db 0
x1 dw 0
x2 dw 0
y dw 0
Ввод вещественного числа проходит успешно, а вот дальше
fistp x1 появляется ошибка.

  • Это TASM? (model small без точки)
    Когда происходит ошибка: во время исполнения или компиляции?
    Загружаете в стек сопроцессора именно вещественное число или всё-таки целое?
    Сопроцессор инициализировали (finit)?

    Если выталкиваемое число не умещается в 16 разрядов, то сопроцессор запишет в переменную -32768 (8000h).
    Попробуйте явно указать адресацию:
    fistp [x1] Если не поможет, то явно укажите размер переменной назначения:
    fistp word ptr x1
    или
    fistp word ptr [x1]

    P.S. У меня всё работает, как и должно быть, TASM 4.1.

  • на ASM только PUSH POP дальше значение регистра, насколько я помню