gpt4 book ai didi

使用 as88 汇编程序从汇编代码调用 C 函数

转载 作者:行者123 更新时间:2023-12-02 05:10:25 25 4
gpt4 key购买 nike

我正在为 16 位处理器(特别是 8086/8088)开发浮点计算器。我正在使用 as88 Tracker它没有实现 float ,不允许我将 sscanf 与“%f”一起使用。

我想过用 C 代码来做,并从我的汇编代码中调用这个函数,但找不到如何去做。

到目前为止,这是我的代码:

 #include "../syscalnr.h".sect .text_code_:             push    bp        mov bp, sp        push    SEGOP-PRIOP ! Pushes PRIOP String Size into the stack        push    PRIOP               push    STDOUT              push    _WRITE          ! System Call to print string on the display        sys        add sp, 8        mov di, rasc    ! Prepares DI to receive char        push    _GETCHAR1:      sys        cmpb    al, '\n'    ! Compares with EOL and keeps storing the string chars        je  2f        stosb           ! Stores char into variable rasc        jmp 1b2:      xorb    al, al      ! Clears registers        add sp, 2.sect .data_data_:PRIOP:      .asciz  "Insert first operand:\n "SEGOP:      .ascii  "Insert second operand: "FORMAT:     .asciz  "%u"F_CHAR:     .asciz  "%c"F_STR:      .asciz  "%s\n".sect .bss_bss_:          rasc:       .space  10

I want to be able to write a C function as:

float* getVal(char* ch) {

float fVal;
sscanf(ch, "%f", &fVal);

if(fVal == 0) return 0;

return fVal;
}

并从我的汇编代码中调用它,将用户输入的字符串数字转换为 float 。

有人可以帮我吗?

谢谢!

最佳答案

有一个 C 语言函数调用约定,规定了在输入函数时需要如何设置寄存器。您必须找出该约定是什么——也许通过查看 C 编译的 obj 文件——然后让您的 asm 代码遵守它,就像您在执行 sys 时所做的那样。不过,我不认为这将是您唯一的问题,因为 sscanf() 无疑会调用 C 库中的大量其他函数,您随后需要找到这些函数;并了解;并整合;并调试;等等。忘掉那些噪音吧。

Unsolicited-advice alert:可能更容易——如果我这样做的话会更容易——只在你的 asm 代码中解析输入。如果这个人正在输入“3.14159”,那很容易,不是吗?即使您看到的是以科学记数法表示的输入,这也不算太糟糕,imo。

关于使用 as88 汇编程序从汇编代码调用 C 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6164094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com