Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для Linux/Unix > Странные ошибки компилятора


Автор: Xonxt 26.12.2007, 20:14
Доброе время суток.

вот возникла необходимость написать программу на Ассемблере под Linux.
Столкнулся с проблемами. Преподаватель объяснил про различия синтаксиса, например, что нужно ставить знак прцента перед регистром.. это всё понятно.

но вот компилятор на этот процент ругается.
Вот, к примеру, небольшой код:

Код

  .text   
  .globl main  
  main:  
    pushl $message
    call puts
    popl %ebx    
    ret
    
  .data  
  message:
    .string  "Hello, world\0"    


При создании объектного модуля:

Код
.../proga> as -o proga.o proga.s


Компилятор ругается, к примеру, на строчку
Код
popl %ebx

Дескать, suffix or operasnds invalid for 'pop'

Если исправить эту строчку так:

Код
pop ebx


То в объектный модуль компилится нормально, но при дальнейшей компиляции:

Код
.../proga> gcc -o proga.lnx proga.o


Оно опять ругается: undefined reference to 'ebx'


В чем же дело? Может че-то не так делаю? или не так компилирую?

У меня Linux Suse 10.2

Заранее благодарю





Автор: MAKCim 26.12.2007, 21:25
Xonxt
ОС 64-х битная или 32-х битная?
вообще для 32-х разрядной системы код абсолютно правильный
если ОС 64-х битная, то надо так
Код

.text   
  .globl main  
  main:  
    movq $message, %rdi
    call puts
    ret
    
  .data  
  message:
    .asciz  "Hello, world"   

если хочешь собрать 32-х битную версию ELF файла
добавь директиву .code32
Код

.code32
.text   
  .globl main  
  main:  
    pushl $message
    call puts
    popl %ebx
    ret
    
  .data  
  message:
    .asciz  "Hello, world"   

и ключ -m32 в gcc
Код

# gcc -m32 <файл> -o <бинарник>
 

Автор: Xonxt 26.12.2007, 21:27
гг))
64-битная.. smile)

спасибо. smile

Можно ссылку на списочек еоманд для 64-битной?)

Автор: MAKCim 26.12.2007, 21:35
Цитата(Xonxt @  26.12.2007,  21:27 Найти цитируемый пост)
Можно ссылку на списочек еоманд для 64-битной?) 

http://webster.cs.ucr.edu/Page_TechDocs/Intel64.pdf
и http://webster.cs.ucr.edu/Page_TechDocs/Intel64_2.pdf

Автор: Xonxt 26.12.2007, 22:01
Благодарю )

Только теперь оно мне при запуске поги выдает "ошибку сегментирования" smile)
Наверное, что--то из-за стека..

Автор: MAKCim 26.12.2007, 22:05
Xonxt
исправлено
см. выше

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)