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
Assembly 组件中的数字:(_Assembly - Fatal编程技术网

Assembly 组件中的数字:(

Assembly 组件中的数字:(,assembly,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 %e

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

.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
非常简单:

  • 向累加器中添加一个数字(已在
    .data
    部分声明)
  • 把数字打印出来
  • 现在我遇到的问题是:当代码运行时,它不是像我希望的那样打印
    值:75
    ,而是给我
    值:134518172

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

    我尝试过的一件事是使用
    movb
    清除累加器的上半部分和下半部分,但没有产生任何显著差异(它改变了数字,但在两个方向上都只改变了约1000):

    提前谢谢

     addl    $mynum, %eax
    
    mynum是一个地址。因此,您将在寄存器中获得一个指针值。您需要取消对它的引用


    顺便说一句,如果你正在逐行调试它,这一点应该很明显。你真的应该试一试。

    在我的脑海中:
    addl[$mynum,]%eax
    -这不是取消引用的方法吗?@dboarman FissureStudio。不是。他使用AT&t风格。但由于这是作业,我认为说如何做并不合适。幸运的是,这不是一个汇编类……这是Comp-Arc。教授没有真正解释“六个CPU寄存器”以外的内容。您可以告诉我如何取消引用所有您想要的内容:D.只想添加我的最终解决方案:
    addl(mynum),%eax
    谢谢您的帮助,伙计们
    movb  $0, %al
    
     addl    $mynum, %eax