Как скомпилировать, связать и запустить приложение nasm в 64-битной Ubuntu.
Установить нос:
sudo apt-get install nasm
Сохранить файл с именем файла hello.asm
:
section .data
hello: db 'Hello world!',10 ; 'Hello world!' plus a linefeed character
helloLen: equ $-hello ; Length of the 'Hello world!' string
; (I'll explain soon)
section .text
global _start
_start:
mov eax,4 ; The system call for write (sys_write)
mov ebx,1 ; File descriptor 1 - standard output
mov ecx,hello ; Put the offset of hello in ecx
mov edx,helloLen ; helloLen is a constant, so we don't need to say
; mov edx,[helloLen] to get it's actual value
int 80h ; Call the kernel
mov eax,1 ; The system call for exit (sys_exit)
mov ebx,0 ; Exit with return code of 0 (no error)
int 80h
Скомпилируйте его:
nasm -f elf64 hello.asm
Ссылка:
ld -s -o hello hello.o
Запустите его
el@apollo:~$ ./hello
Hello world!
Работает! Что теперь? Запросите, чтобы ваш любимый компилятор генерировал код сборки, который он обычно передавал для преобразования в машинный код. Поиск в Google: "преобразовать программу php / java / python / c ++ в сборку"
Перспектива: Сегодня, когда все люди пытаются разрушить и избавиться от вычислений общего назначения для широкой публики, крайне важно, чтобы мы обучали новых студентов концепциям построения общего назначения. машина от основных принципов, вплоть до чистого металла, затем, наконец, ассемблеры и языки программирования.
Как обучение ассемблеру помогает в программировании?
99% компьютерных программ работают в 10–100 раз медленнее, чем они могли бы быть оптимизированы, потому что программисты не знают, какие задержки им навязывают их любимый компилятор или интерпретатор высокого уровня.
Глубокое понимание полного стека здесь означает, что вы можете заставить свои программы обладать этим желанным свойством, состоящим только в наносекундах, чтобы выполнять работу под рукой. Время == деньги. Таким образом, это знание того, как избегать всего, что занимает больше, чем несколько наносекунд, экономит время и, следовательно, деньги.
https://softwareengineering.stackexchange.com/questions/156722/how-does-learning-assembly-aid-in-programming