Programski jezik niskog nivoa

**Programski jezik niskog nivoa** je vrsta programskog jezika koji omogućava direktnu komunikaciju s hardverom računara, uz minimalnu apstrakciju od arhitekture sistema. Ovi jezici su ključni za razvoj operativnih sistema, ugrađenih sistema i upravljačkih programa (drajvera).

## Uvod 
Jezici niskog nivoa omogućavaju direktan pristup resursima računara, uključujući memoriju, registre i I/O uređaje. Zbog toga se koriste u situacijama gdje su brzina i efikasnost ključni faktori, poput razvoja operativnih sistema i ugradbenih rješenja.

## Osnovne karakteristike 
* **Bliska povezanost s hardverom** – Programi direktno manipulišu memorijom i registarskim operacijama, bez dodatnih slojeva apstrakcije.
* **Minimalna apstrakcija** – Programerima je omogućeno nisko-nivo upravljanje resursima, što zahtijeva detaljno razumijevanje arhitekture sistema.
* **Efikasnost i brzina** – Kod se prevodi direktno u mašinski kod, čime se izbjegavaju dodatni slojevi interpretacije.
* **Ograničena prenosivost** – Programi su često prilagođeni specifičnim arhitekturama procesora.

## Vrste programskih jezika niskog nivoa 
### Mašinski jezik 
Mašinski jezik predstavlja niz binarnih instrukcija koje procesor može direktno izvršiti. Svaka instrukcija se zapisuje u binarnom formatu, što ga čini teško čitljivim za programere.

```text
10110000 01100001
```

Ova instrukcija može značiti "učitaj vrijednost 97 u registar".

### Asemblerski jezik 
Asemblerski jezik koristi mnemonike umjesto binarnog koda, omogućavajući programerima čitljiviji način pisanja programa. Svaka asembler instrukcija odgovara jednoj mašinskoj instrukciji.

```assembly
MOV AX, 5
ADD AX, 3
```

Ovaj kod znači: učitaj vrijednost 5 u registar AX, a zatim dodaj 3.

### C jezik (delimično) 
Iako C (programski jezik) nije klasičan jezik niskog nivoa, omogućava direktan rad s memorijom pomoću pokazivača i inline asemblera.

```c
#include 

int main() {
    int x = 5;
    int *ptr = &x;
    printf("Vrijednost x: %d\n", *ptr);
    return 0;
}
```

## Napredne tehnike programiranja niskog nivoa 
### Rad s registrima 
Korištenje registara omogućava optimizaciju performansi.

```assembly
MOV AX, 4
MOV BX, AX
ADD BX, 2
```

### Direktan pristup hardveru 
U jezicima niskog nivoa moguće je direktno upravljati I/O uređajima.

```assembly
MOV AH, 0       ; Servis za čitanje karaktera
INT 16h         ; Interrupt za tastaturu
```

### Interrupti i sistemske operacije 
Interrupti omogućavaju procesoru da reaguje na spoljne i unutrašnje događaje.

```assembly
MOV AH, 0x0E
MOV AL, 'A'
INT 10h
```

### Razlike između x86 i ARM arhitekture 
Dva najčešća seta instrukcija u niskonivoznom programiranju su **x86** (CISC) i **ARM** (RISC).

**x86 Assembly:**

```assembly
MOV AX, 5
ADD AX, 3
```

**ARM Assembly:**

```assembly
MOV R0, #5
ADD R0, R0, #3
```

### Pisanje bootloadera 
Bootloader je prvi program koji se izvršava prilikom pokretanja računara. Piše se u asembleru zbog potrebe za potpunom kontrolom nad hardverom.

```assembly
BITS 16
ORG 0x7C00

MOV SI, msg
CALL print
JMP $

print:
    MOV AH, 0x0E
next_char:
    LODSB
    CMP AL, 0
    JE done
    INT 0x10
    JMP next_char
done:
    RET

msg: DB 'Hello, World!', 0

TIMES 510 - ($ - $$) DB 0
DW 0xAA55  ; Boot signature
```

## Prednosti i nedostaci 
## Primjena 
Jezici niskog nivoa koriste se u:
* Razvoju operativnih sistema (npr. Unix, Linux, Windows).
* Razvoju drajvera za hardver.
* Programiranju ugrađenih sistema i IoT uređaja.
* Razvoju kompajlera i interpretera.
* Sigurnosnim sistemima koji zahtijevaju niskonivoznu optimizaciju.

## Zaključak 
Programski jezici niskog nivoa omogućavaju visoku kontrolu nad hardverom, ali su složeniji za programiranje. Njihova primjena je ključna u oblastima gdje su brzina i optimizacija presudni faktori, kao što su operativni sistemi, drajveri i ugrađeni sistemi.

## Literatura 
* Tanenbaum, A. S. (2016). *Structured Computer Organization*. Pearson.
* Patterson, D. A., & Hennessy, J. L. (2017). *Computer Organization and Design*. Morgan Kaufmann.
* Stallings, W. (2019). *Computer Organization and Architecture*. Pearson.

## Vanjski linkovi 
* Low-Level Language - Computer Hope

Kategorija:Programski jezici
Kategorija:Niskonivoški programski jezici