Вставьте переменную TWORD из стека FPU в TASM - PullRequest
0 голосов
/ 16 мая 2018

Я пишу программу в 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 Ответ

0 голосов
/ 16 мая 2018
    FSTP TBYTE PTR [BX]

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

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

Принудительное выражение адреса размером 10 байт

...