Litt om instruksjonar i Assembly
* Data transfer instruksjonar
* Arithmetc instruksjonar
* Logic instruksjonar
* Flow-control instruksjonar
* Processor-control instruksjonar
* String instruksjonar
Data transfer instruction:
Data transfer instruksjonane er igjen delt inn i 4 undergrupper
General instruksjonar
{codecitation class="brush: plain; gutter: true;"}
mov destination, source ; Flyttar (Kopierar) byte eller ord
pop destination ; Pop data frå stabel
push immediate ; Legg data på stabel
xchg destination, source ; Byttar bytes og ord
xlat/xlatb table ; Overset frå tabell
Input/Output instruksjonar
{codecitation class="brush: plain; gutter: true;"}
in accumulator, port ; Input (get) byte eller ord
out port, accumulator ; Output (put) byte eller ord
Adress instruksjonar
{codecitation class="brush: plain; gutter: true;"}
lds destination, source ; Load pointer ved bruk av ds
lea destination, source ; Load effektiv adresse
les destination, source ; Load pointer ved bruk av es
Flag instruksjonar
{codecitation class="brush: plain; gutter: true;"}
lahf ; Load ah frå et/fleire flagg
popf ; Pop flagg register frå stabel
pushf ; Legg flagg register på stabel
sahf ; Lagre ah i et/fleire flagg
Noken eksempel på bruk av mov instruksjonen
{codecitation class="brush: plain; gutter: true;"}
; Flyttar verdien til bx registeret inn i ax registeret, bx vert uforandra
mov ax, bx ; ax <-- bx
; Flyttar verdien som er lagra i variabelA (ei adresse i minnet) inn i cx registeret
; [] indikerar at det er verdien som er lagra i adressa variabelA vi er ute etter og ikkje sjølve adressa
mov cx, [variabelA] ; cx <-- [variabelA]
Det er viktig å alltid speifisere om en intsruksjon skal jobbe på ei adresse eller på verdien som er lagra i adressa
{codecitation class="brush: plain; gutter: true;"}
; Flyttar verdien som er lagra i dl registeret til variabelB (ei adresse i minnet)
; [] indikerar at verdien av dl skal flyttast til lokasjonen som variabelB peikar på, vi skal ikkje endre adressa variabelB, berre verdien
mov [variabelB], dl; [variabelB] <-- dl
; En kan ikkje flytte data direkte mellom to minne lokasjonar, så følgande vil aldri virke
mov [variabelC], [variabelD] ; ???
; Dersom vi vil flytte verdien av variabelD over verdien av variabelC må vi mellomlagre i et register
mov ax, [variabelD] ; ax <-- [variabelD]
mov [variabelC], ax ; [variabelC] <-- ax
* Data transfer instruksjonar
* Arithmetc instruksjonar
* Logic instruksjonar
* Flow-control instruksjonar
* Processor-control instruksjonar
* String instruksjonar
Data transfer instruction:
Data transfer instruksjonane er igjen delt inn i 4 undergrupper
General instruksjonar
mov destination, source ; Flyttar (Kopierar) byte eller ord
pop destination ; Pop data frå stabel
push immediate ; Legg data på stabel
xchg destination, source ; Byttar bytes og ord
xlat/xlatb table ; Overset frå tabell
Input/Output instruksjonar
in accumulator, port ; Input (get) byte eller ord
out port, accumulator ; Output (put) byte eller ord
Adress instruksjonar
lds destination, source ; Load pointer ved bruk av ds
lea destination, source ; Load effektiv adresse
les destination, source ; Load pointer ved bruk av es
Flag instruksjonar
lahf ; Load ah frå et/fleire flagg
popf ; Pop flagg register frå stabel
pushf ; Legg flagg register på stabel
sahf ; Lagre ah i et/fleire flagg
Noken eksempel på bruk av mov instruksjonen
; Flyttar verdien til bx registeret inn i ax registeret, bx vert uforandra
mov ax, bx ; ax <-- bx
; Flyttar verdien som er lagra i variabelA (ei adresse i minnet) inn i cx registeret
; [] indikerar at det er verdien som er lagra i adressa variabelA vi er ute etter og ikkje sjølve adressa
mov cx, [variabelA] ; cx <-- [variabelA]
Det er viktig å alltid speifisere om en intsruksjon skal jobbe på ei adresse eller på verdien som er lagra i adressa
; Flyttar verdien som er lagra i dl registeret til variabelB (ei adresse i minnet)
; [] indikerar at verdien av dl skal flyttast til lokasjonen som variabelB peikar på, vi skal ikkje endre adressa variabelB, berre verdien
mov [variabelB], dl; [variabelB] <-- dl
; En kan ikkje flytte data direkte mellom to minne lokasjonar, så følgande vil aldri virke
mov [variabelC], [variabelD] ; ???
; Dersom vi vil flytte verdien av variabelD over verdien av variabelC må vi mellomlagre i et register
mov ax, [variabelD] ; ax <-- [variabelD]
mov [variabelC], ax ; [variabelC] <-- ax