Вставьте переменную TWORD из стека FPU в TASM

Я пишу программу в Turbo Assembler, которая получает число из консоли, вычисляет другое число на основе этого и печатает результат на консоли.

Я сделал преобразование из строки в число с плавающей запятой и обратно через подпрограммы (я не думаю, что это действительно имеет значение, на всякий случай). Однако у меня есть проблема. Я должен работать с LONG DOUBLE (TWORD, DT) номерами, и я просто не могу это сделать! Я могу сделать это с числами DOUBLE (QWORD, DQ) и FLOAT (DWORD, DD), но никак не с TWORD. Хорошо, только код (я передаю аргумент через стек, на всякий случай):

locals  __

...

string_to_float proc near

arg     __ARGS:word:4 = __ARGSIZE

    __ARG struc
        __BP        dw ?
        __IP        dw ?
        __STRING    dw ? ; string address
        __DT        dw ? ; LONG DOUBLE number address
    __ARG ends

...

    mov BX, __DT[BP]
    fstp tword ptr [BX]

...

При сборке TASM говорит:

Неопределенный символ: TWORD

Аргумент нуждается в переопределении типа

Это указывает на самую последнюю строку кода, который я дал здесь.

Нет проблем, если я сделаю это, например, с ДВОЙНЫМ номером, например так:

locals  __

...

string_to_float proc near

arg     __ARGS:word:4 = __ARGSIZE

    __ARG struc
        __BP        dw ?
        __IP        dw ?
        __STRING    dw ?
        __DQ        dw ? ; DOUBLE number address
    __ARG ends

...

    mov BX, __DQ[BP]
    fstp qword ptr [BX]

...

Что здесь можно сделать? Я искал разные имена для TWORD, но я нашел только TWORD и DT, которые я уже знал.

1 ответ

Решение
    FSTP TBYTE PTR [BX]

В конце концов, проверка разборки ТД помогла больше всего, даже проверив краткое справочное руководство и fstp примеров инструкций было недостаточно, пример там неправильный, и я упустил из виду tbyte ptr определено на странице 12 в "Краткое руководство по Turbo Assembler 5.0":

TBYTE PTR выражение | Идеал, МАСМ

Делает адресное выражение размером 10 байт.

Другие вопросы по тегам