Litt om instruksjonar i Assembly

Litt om instruksjonar i Assembly

Thu 31 December 2009

Alle 8086 instruksjonar er delt inn seks kategoriar


* 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

Alle 8086 instruksjonar er delt inn seks kategoriar

* 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
Tagged as : prolog assembler