Компиляция / запуск ассемблера в Linux?
Я довольно новичок в Linux (Ubuntu 10.04) и полный новичок в ассемблере. Я следил за некоторыми учебниками, и я не мог найти ничего конкретного для Linux. Итак, мой вопрос: Что такое хороший пакет для компиляции / запуска ассемблера и каковы команды командной строки для компиляции / запуска для этого пакета?
7 ответов
ассемблер GNU (gas) и NASM-оба являются хорошим выбором. Тем не менее, у них есть некоторые различия, большой из которых-порядок, в котором вы помещаете операции и их операнды.
gas использует синтаксис AT&T:
mnemonic source, destination
nasm использует стиль intel:
mnemonic destination, source
любой из них, вероятно, сделает то, что вам нужно.
попробуйте этот учебник:http://asm.sourceforge.net/intro/Assembly-Intro.html
ассемблер GNU, вероятно, уже установлен в вашей системе. Попробуй!--2--> чтобы увидеть полную информацию об использовании. Вы можете использовать as
для компиляции отдельных файлов и LD для связи, если вы действительно, действительно хотите.
тем не менее, GCC делает отличный интерфейс. Он может собираться .s файлов для вас. Например:
$ cat >hello.s <<EOF
.data
.globl hello
hello:
.string "Hello, world!"
.text
.global main
main:
pushq %rbp
movq %rsp, %rbp
movq $hello, %rdi
call puts
movq , %rax
leave
ret
EOF
$ gcc hello.s -o hello
$ ./hello
Hello, world!
приведенный выше код-AMD64. Было бы по-другому, если вы все еще на 32-битной машине.
вы также можете скомпилировать код C/C++ непосредственно в сборку, если вам интересно, как что-то работает:
$ cat >hello.c <<EOF
#include <stdio.h>
int main(void) {
printf("Hello, world!\n");
return 0;
}
EOF
$ gcc -S hello.c -o hello.s
Если вы используете NASM, командная строка просто
nasm file.asm -o outfile
где файл'.asm - это ваш файл сборки (код), а outfile-исполняемый файл, который вы хотите.
вот еще информация:
http://www.nasm.us/doc/nasmdoc2.html#section-2.1
вы можете установить NASM в Ubuntu со следующей командой:
apt-get install nasm
вот базовый Hello World в сборке Linux, чтобы подогреть ваш аппетит:
http://web.archive.org/web/20120822144129/http://www.cin.ufpe.br/~if817/arquivos/asmtut/index.html
Я надеюсь, что это то, о чем вы спрашивали...
существует также FASM для Linux.
format ELF executable
segment readable executable
start:
mov eax, 4
mov ebx, 1
mov ecx, hello_msg
mov edx, hello_size
int 80h
mov eax, 1
mov ebx, 0
int 80h
segment readable writeable
hello_msg db "Hello World!",10,0
hello_size = $-hello_msg
Это comiles с
fasm hello.asm hello
мое предложение состояло бы в том, чтобы получить Программирование книги с нуля:
http://nongnu.askapache.com/pgubook/ProgrammingGroundUp-1-0-booksize.pdf
Это очень хорошая отправная точка для входа в ассемблерное программирование под linux, и это объясняет многие основы, которые вам нужно понять, чтобы начать работу.