mirror of
https://github.com/TrudeEH/web.git
synced 2025-12-06 08:23:37 +00:00
48 lines
922 B
Markdown
48 lines
922 B
Markdown
---
|
|
tags:
|
|
- computer-science
|
|
- notes
|
|
author: TrudeEH
|
|
draft: true
|
|
showToc: true
|
|
title: Assembly
|
|
---
|
|
|
|
#todo
|
|
|
|
## Assembler/Compiler
|
|
|
|
- `gcc` GNU C Compiler (The package includes `as` (assembler) and `ld` (linker))
|
|
|
|
```Shell
|
|
as <file.asm> -o <output.o> # Assemble
|
|
gcc -o <output_file> <output.o> -nostdlib -static # Link using gcc
|
|
ld <output.o> # Link using ld
|
|
```
|
|
|
|
## Hello World
|
|
|
|
```Assembly
|
|
.global _start
|
|
.intel_syntax noprefix
|
|
_start:
|
|
// sys_write (Print to stdout)
|
|
mov rax, 1
|
|
mov rdi, 1
|
|
lea rsi, [hello_world]
|
|
// Buffer length
|
|
mov rdx, 14
|
|
syscall
|
|
// sys_exit (safely end the program with a re turn code)
|
|
mov rax, 60
|
|
// Exit with code 0
|
|
mov rdi, 0
|
|
syscall
|
|
|
|
hello_world:
|
|
// ASCII, zero delimited
|
|
.asciz "Hello, World!\n"
|
|
```
|
|
|
|
To know which system calls we can execute and which values needed for the registers, refer to [this table](https://blog.rchapman.org/posts/Linux_System_Call_Table_for_x86_64/).
|