Вставьте переменную 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 байт.