Я пытаюсь сделать что-то, что, как я полагаю, было бы довольно легко, хотя я оказался ужасно неправым. Я, вероятно, делаю что-то действительно глупое. Прежде чем объяснить, вот мой код:
.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
)
- Распечатайте номер
Теперь проблема, с которой я столкнулся, заключается в следующем: когда код запускается, вместо печати Value: 75
, как я надеюсь, он дает мне Value: 134518172
.
Я предполагаю, что передается куча битов, которые должны быть переданы. Откуда они берутся, я не уверен. На самом деле, я даже не знаю, кто они.
Одна вещь, которую я попробовал, это использовать movb
, чтобы очистить первую и последнюю половинки аккумулятора, но это не имело никакого существенного различия (оно изменило число, но только на ~ 1000 в любом направлении ):
movb $0, %ah
и
movb $0, %al
Заранее спасибо