Четвертая лекция
Самая простая программа
	.model tiny
	.code
	org	100h
start:
	ret
end start
Не делает ничего)
2 шага:
- тексты превращаются в модули
 - модули собираются в исходник
 
Hello, World!
 Создадим файл “1.s”
#Это для 32-битных систем
.globl _start #Можно .global(без разницы)
.text
# комментарий через #
# абсолютные значения(чиселки) через $
# Регистры через %
_start:
	mov	$4, %eax #функция write имеет опкод 4
	mov $1, %ebx
	mov %messg, %ecx
	mov %lmessg, %edx
	int %0x80
	
	
	mov $1, %eax		#код
	xor	%ebx, %ebx		#завер-
	int $0x80			#шения
.data
messg:	.ascii "Hello, World!\n"
		#.byte 10 - Можно юзать вместо переноса строки (сам переведёт строку дважды)
lmessg = . - messg #вычисляет разницу между указателем на .data и указателем на messg (т.е. длину строки)
ARWX - (A - allocated, R - readable, W - writable, X executable)
К функциям ОСи можно обращаться int 0x80(для всех) и syscall для 64-битных систем
syscall намного быстрее, но “портятся” регистры
Узнать параметры можно с помощью man, например man exit
Параметр syscall берётся из регистра eax и результат кладётся туда же
as -o 1.o 1.s //команда трансляции из 1.s в 1.o
ld -o 1 1.o   //команда компоновки 1.o
./1			  //команда запуска 
Перепишем программу для 64-битной системы (с использованием syscall)
#Это для 64-битных систем
.globl _start 
.text
_start:
	mov	$1, %eax
	mov $1, %edi
	mov %messg, %esi
	mov %lmessg, %edx
	syscall
	
	
	mov $60, %eax		
#	xor	%ebx, %ebx
	mov $37, %edi
	int $0x80			
.data
messg:	.ascii "Hello, World!"
		.byte 10
lmessg = . - messg
Программа для сборки компилятором C
 Для простоты назовём 2.s
	Просто заменяем _start на main, добпаляем в первую строку push %rbp, в последнюю и всё работает:)
#Это для 64-битных систем
.globl main 
.text
main:
	push %rbp
	mov	$1, %eax
	mov $1, %edi
	mov %messg, %esi
	mov %lmessg, %edx
	syscall
	
	
	pop %rbp
    ret
.data
messg:	.ascii "Hello, World!"
		.byte 10
lmessg = . - messg
Компиляция и запуск сишным компилером:
gcc -o 2 2.s
./2