大会中的数字:(

时间:2010-04-06 15:17:55

标签: assembly

我正在尝试做一些我认为相当容易的事情,尽管我被证明是非常错误的。我可能会做一些非常愚蠢的事情。在我解释之前,这是我的代码:

.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. 打印号码
  3. 现在我遇到的问题是:当代码运行时,而不是像我希望的那样打印Value: 75,它会给我Value: 134518172

    我的假设是传递了一堆应该被传递的位。他们来自哪里,我不确定。事实上,我甚至都不知道它们是什么。

    我尝试过的一件事是使用movb来清除累加器的前半部分和后半部分,但它没有产生任何显着差异(它改变了数字,但只有~1000左右)任一方向):

    movb  $0, %ah
    

    movb  $0, %al
    

    提前致谢

1 个答案:

答案 0 :(得分:2)

 addl    $mynum, %eax

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

顺便说一句,如果你逐行调试它,这应该是显而易见的。你应该尝试一下。