---
title: x86 ASM
date: 2018-10-15
---

# x86 ASM

## Outline

* 32 bit System

## Syntax

### Intel Syntax (verwendet in Vorlesung)

* Intel Syntax (Ziel Operant ist immer links)
* Adressen in `[1234]`

### AT&T Syntax

* Ziel Operant ist rechts
* Register mit `%`
* Number Literals mit `$`

## Memory Layout

* `.bss` global uninitialized variables
* `.data` global initialized variables
* heap: dynamic variables
* `.text`: code (usually read-only)
* stack: lokale Variablen + procedure activation records
* heap grows up
* stack grows down

### Stack Frame

* **ESP**: Ende des Stacks
* **EBP**: Begin des aktuellen Stack Frames

Enthält:

* Lokale Variablen
* Parameter
* Caller Adresse

| :---:                            |
| <prev frame>                     |
| ---                              |
| Parameters                       |
| :---:                            |
| Return address                   |
| :---:                            |
| prev frame address (alter *EBP*) |
| :---:                            |
| *EBP* ->                         |
| :---:                            |
| Local variables                  |
| :---:                            |
| *ESP* ->                         |
| :---:                            |
| <free memory>                    |
| :---:                            |

### MOV

* `mov eax, ebx`: `eax = ebx`
* `mov edx, [1234]`: `edx = *1234`


### `PUSH`

* `push ecx`: Wert von `ecx` auf den Stack, `esp - 4`
* `pop esi`: `esp + 4`

### `RET`

* `pop eip`

### Subroutinen

`f(1,2,3)` ->

```
push 3
push 2
push 1
call f
```
