我正在用Turbo Assembler编写程序,该程序从控制台获取一个数字,根据该数字计算另一个数字,然后将结果打印到控制台上。
我已经完成了从字符串到浮点数的转换,然后再通过子程序转换(我认为这并不重要,以防万一)。但是,我有问题。我必须使用长双(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
参数需要类型覆盖

它指向我在这里给出的代码的最后一行。
如果我这样做是没有问题的,例如使用DOUBLE数字,例如:
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。

最佳答案

    FSTP TBYTE PTR [BX]

最后,检查TD拆卸确实最有帮助,即使检查快速参考指南和fstp指令示例还是不够的,该示例是错误的,并且我忽略了《 Turbo Assembler 5.0快速参考指南》第12页上定义的tbyte ptr。 “:

TBYTE PTR表达|理想,MASM
强制地址表达式为10字节大小

关于assembly - 从TASM中的FPU堆栈中弹出TWORD变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50369079/

10-11 15:31