Я использую 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());
}
И, наконец, три небольших вопроса:
В чем разница между .s
и .h
именами файлов (у меня есть и main.c
и main.h
, какое для чего)?
А зачем сборке нужен main.c
, чтобы идти с ней / как она называется?
Кто-нибудь может порекомендовать хорошую сборочную IDE, например Eclipse для Java или PHP
Благодаря тому, кто бы ни ответил (это фактически мой первый пост на этом сайте), я пытался выяснить это в течение нескольких дней, и каждый ресурс, который я прочитал, просто не объясняет мне логику сборки. Там написано, что делает .data
или .text
, но только тот, кто знает, как "думать о сборке", поймет, что они имеют в виду?
Кроме того, если кто-то находится в Нью-Йорке и чувствует себя очень комфортно с Ассамблеей и Си, я бы хотел получить несколько частных уроков Я чувствую, что у этого языка большой потенциал, и хотел бы выучить его.