Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 将int写入程序集中的无符号字符*_String_Assembly_Printf_Cpu Registers_Gnu Assembler - Fatal编程技术网

String 将int写入程序集中的无符号字符*

String 将int写入程序集中的无符号字符*,string,assembly,printf,cpu-registers,gnu-assembler,String,Assembly,Printf,Cpu Registers,Gnu Assembler,我正在尝试编写一个与sprintf类似的函数(尽管有点简单)。我已经到了应该将整数打印到结果字符串的地步——参数%d。我的策略是将数字除以10,然后将48(ascii偏移量)加到其余部分,然后将其推到堆栈上并增加esi,直到商为0。然后我从堆栈中弹出每个数字,并将它们添加到结果字符串中。这是我当前的代码: addint: movl $0,%edx movl $10,%ebx div %edi addl

我正在尝试编写一个与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是结果字符串的地址

现在我得到了愚蠢的输出(从参数的两倍到字母,如L和ascii表中的其他随机性)。我想我的思路是对的,但我目前的代码显然有问题。非常感谢您的帮助


提前感谢。

您将10加载到
ebx
中,但在分区中使用
edi
。 可能还有其他问题。学习使用调试器逐步检查代码,并亲自查看哪里出错