Номера в сборе :( - PullRequest
       33

Номера в сборе :(

0 голосов
/ 06 апреля 2010

Я пытаюсь сделать что-то, что, как я полагаю, было бы довольно легко, хотя я оказался ужасно неправым. Я, вероятно, делаю что-то действительно глупое. Прежде чем объяснить, вот мой код:

.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 Ответ

2 голосов
/ 06 апреля 2010
 addl    $mynum, %eax

mynum - это адрес. Итак, вы получаете значение указателя в вашем регистре. Вы должны разыменовать это.

Кстати, это должно быть очевидно, если вы отлаживаете его построчно. Вы должны действительно попробовать один.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...