繁体   English   中英

在Assembly中将int写入未签名的char *

[英]Writing int to unsigned char* in Assembly

我正在尝试编写一个与sprintf类似(虽然更简单)的函数。 我已经到了要在结果字符串上打印整数的位置-参数%d。 我的策略是将数字除以10,然后将余数加48(ascii偏移量),然后将其压入堆栈并增加esi,直到商为0。然后将每个数字从堆栈中弹出,然后将其添加到堆栈中。结果字符串。 这是我当前的代码:

addint:

    movl        $0,%edx
    movl        $10,%ebx
    div         %edi

    addl        $48,%edx

    pushl       %edx
    incl        %esi

    cmpl        $0,%eax
    jz          addintprint
    jmp         addint


addintprint:

    movl        tmpedx,%edx
    incl        %ecx
    jmp         addintfinish


addintfinish:

    cmpl        $0,%esi
    jz          mainloop

    decl        %esi

    popl        %ebx

    movl        addr,%eax
    leal        (%edx,%eax,1),%eax
    movb        %bl,(%eax)

    incl        %edx

    jmp         addintfinish

其中%edx用于对结果字符串中的字母索引进行计数(%ecx已保留,用于对第二个参数字符串中的索引进行计数,因此,除非有必要,否则请不要使用它),而addr是地址结果字符串。

现在我得到愚蠢的输出(从参数的两倍到ascii表中的字母,例如L和其他随机性)。 我认为自己走在正确的道路上,但是目前的代码显然有问题。 任何帮助是极大的赞赏。

提前致谢。

您将10加载到ebx但在除法中使用edi 可能还有其他问题。 学习使用调试器来逐步检查代码,自己查看错误之处。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM