代码之家  ›  专栏  ›  技术社区  ›  mattbasta

组件中的编号:(

  •  -1
  • mattbasta  · 技术社区  · 14 年前

    我正在做一些我认为很容易的事情,尽管我被证明是大错特错的。我可能做了件很蠢的事。在我解释之前,我的代码是:

    .data
    mynum:
        .int 75
    
    format:
        .string "Value: %d\n"
    
    .text
    .globl main
    main:
    
        movl    $0, %eax
    
        # Add the number
        addl    $mynum, %eax
    
        # Print it out
        pushl   %eax
        pushl   $format
        call    printf
        addl    $8, %esp
    
    
        movl    $1,%eax
        xorl    %ebx,%ebx
        int $0x80
    
        ret
    

    非常简单:

    1. 在累加器上添加一个数字(已在 .data 部分)
    2. 把号码打印出来

    现在我遇到的问题是:当代码运行时,而不是打印 Value: 75 就像我希望的那样,它给了我 Value: 134518172 .

    我的假设是,一堆应该被传递的比特正在被传递。他们从哪里来,我不确定。事实上,我甚至不知道它们是什么。

    我试过的一件事是 movb 清除蓄能器的前半部分和后半部分,但没有任何显著差异(它改变了数字,但在任何方向上都只有~1000个):

    movb  $0, %ah
    

    movb  $0, %al
    

    提前谢谢

    1 回复  |  直到 14 年前
        1
  •  2
  •   Bahbar    14 年前
     addl    $mynum, %eax
    

    MyNum是一个地址。所以在寄存器中得到一个指针值。你需要取消引用它。

    顺便说一下,如果您一行一行地调试它,这应该是显而易见的。你真的应该试试。