articles/assembly.md: new article
This commit is contained in:
parent
c9a068f430
commit
0436000f1e
1 changed files with 36 additions and 0 deletions
36
articles/assembly.md
Normal file
36
articles/assembly.md
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
# Assembly
|
||||||
|
Assembly, also known as assembler, is family of low-level [programming languages](programming_language.md) that are closely tied to a certain specific
|
||||||
|
[CPU](cpu.md) architecture machine code, thus by definition assembly is not portable.
|
||||||
|
Assembly is also OS-specific, since it depends on [syscalls](syscall.md) to do anything useful and things like the program
|
||||||
|
entrypoint differ between operating systems.
|
||||||
|
|
||||||
|
## Examples (x86-64 assembly, Linux)
|
||||||
|
```nasm
|
||||||
|
default rel ; tell the assembler to use RIP-relative addressing
|
||||||
|
; instead of absolute memory addresses
|
||||||
|
section .text ; start of the section containing the program's code (.text)
|
||||||
|
global _start ; make entrypoint symbol global
|
||||||
|
|
||||||
|
_start: ; On Linux, the executable entrypoint symbol name is `_start`
|
||||||
|
mov rax, 0x1 ; sys_write
|
||||||
|
mov rdi, 0x1 ; stdout
|
||||||
|
mov rdx, hello_str_len ; length of buffer
|
||||||
|
lea rsi, [hello_str] ; address of buffer
|
||||||
|
syscall
|
||||||
|
|
||||||
|
mov rax, 0x3c ; sys_exit (60)
|
||||||
|
xor rdi, rdi ; return code, zero
|
||||||
|
syscall
|
||||||
|
|
||||||
|
section .rodata ; start of the section containing readonly data (.rodata)
|
||||||
|
hello_str: db "Hello world!", 0xa ; `db` is an assembler directive for embdedding data (a string here)
|
||||||
|
hello_str_len: equ $-hello_str ; assemble-time length calculation
|
||||||
|
```
|
||||||
|
|
||||||
|
Assembling and linking:
|
||||||
|
```sh
|
||||||
|
nasm -felf64 -o hello.o hello.asm # assemble, generates an object file
|
||||||
|
cc -static-pie -nostdlib -o hello hello.asm # now link to get an executable
|
||||||
|
```
|
||||||
|
|
||||||
|
TODO examples for other architectures
|
Loading…
Add table
Reference in a new issue