Использование сборки на Mac

Я использую MacBook Pro с процессором Intel Core 2 Duo на 2,53 ГГц, но мне сказали, что пользователи Mac должны следовать синтаксису AT&T ( что добавляет мне путаницы, поскольку я использую Intel) и x86 (не уверен, что именно это означает).

Итак, мне нужно приступить к сборке, но мне очень трудно даже начать. Поиск в Интернете показывает код сборки, который сильно различается по синтаксису, и я не могу найти никаких ресурсов, объясняющих основные инструкции по сборке. Я все время читаю о регистрах и стеке, но не понимаю, как на это смотреть. Может ли кто-нибудь объяснить / указать мне правильное направление? Возьмем, к примеру, следующий код, который я нашел работающим:

.data
_mystring:  .ascii "Hello World\n\0"    #C expects strings to terminate with a 0.
.text
    .globl _foo
_foo:
push    %ebp
    mov %esp,%ebp
    pushl   $_mystring  
    call    _myprint
    add $4,%esp
    pop %ebp
    ret

Очень простой, но о чем он говорит? Мне сложно понять, как этот код делает то, что он делает. Я знаю Java, PHP и C, среди других языков, но эти шаги и синтаксис мне не понятны. Вот основной файл для него:

#include <stdio.h>
void foo();
void myprint(char *s)
{printf("%s", s);}
 main()
{foo();}

Кроме того, есть еще один, который просто умножает числа:

.data
    .globl _cntr
_cntr:  .long 0
    .globl _prod
_prod:  .long 0
    .globl _x
_x: .long 0
    .globl _y
_y: .long 0
    .globl _mask
_mask:  .long 1
    .globl _multiply
multiply:
    push %ebp
    mov %ebp,%esp
    mov $0,%eax
    mov _x,%ebx
    mov _y,%edx
LOOP:
    cmp $0,%ebx
    je DONE
    mov %ebx,%ecx
    and $1,%ecx
    cmp $1,%ecx
    jne LOOPC
    add %edx,%eax
LOOPC:
    shr $1,%ebx
    shl $1,%edx
    jmp LOOP
DONE:
    pop %ebp
    ret

и файл main.c, связанный с ним:

#include <stdio.h>

extern int multiply();
extern int x, y;

int main()
{
    x = 34;
    y = 47;
    printf("%d * %d = %d\n", x, y, multiply());
}

И, наконец, три небольших вопроса:

  1. В чем разница между именами файлов .s и .h (у меня есть оба файла: main.c и main.h , который для )?

  2. И почему для сборки нужен main.c / как это называется?

  3. Кто-нибудь может порекомендовать хорошую сборочную среду IDE, такую ​​как Eclipse для Java или PHP

Спасибо всем, кто ответил (на самом деле это моя первая публикация на этом сайте), я пытался понять это в течение нескольких дней, и каждый ресурс, который я прочитал, просто не объясняет мне логику сборки. Там написано, что .data или .text понимает, но только тот, кто знает, как «думать, ассемблер», поймет, что они означают? Кроме того, если кто-то живет в Нью-Йорке и чувствует себя очень комфортно с Assembly и C, я хотел бы получить несколько частных уроков. Я чувствую, что у этого языка есть большой потенциал, и хотел бы выучить его.

7
задан jlf 21 October 2011 в 19:27
поделиться