Instruktionerna

Här en lista på de vanligaste och mest användbara assembler instruktionerna. Till vänster står hur instruktionen används med beteckningar och till höger ett exempel med verkliga register. Mem är en variabel i minnet som kan kallas vad som helst, tex Kalle, Pris, Therese, color, resultat osv.

Använda beteckningar:


Dataförflyttningsinstruktioner

MOV

Kopierar värdet från källan till destinationen

PUSH

lagrar ett värde på stacken (alltid 16 bitar) enligt principen sist in först ut

POP

Hämtar ett värde från stacken (alltid 16 bitar) enligt principen sist in först ut

XCHG

Byter ut data mellan operanderna

IN

Hämtar en byte eller ett word från en port till ackumulatorn (Ax eller Al)

OUT

Skickar en byte eller ett word från ackumulatorn till en port

Aritmetiska instruktioner

ADD

Adderar operanderna, summan i första operanden

SUB

Subtraherar operanderna, differensen i första operanden

INC

Räkna upp (increase)

DEC

Räkna ned (decrease)

NEG

Negering (görs genom att ta 0 - operanden)

CMP

Jämför två operander, följs ofta av ett villkorligt hopp

MUL

Utför multiplikation, Ax alltid en operand, resultatet i Ax (16 låga bitarna) och Dx (16 höga) vid 8-bitars multiplikation, resultatet i Ax

DIV

Utför division om 8-bitars divisor är Ax divident svar i Al, rest i Ah om 16-bitars divisor är Dx:Ax divident svar i Ax, rest i Dx

Logiska instruktioner

NOT

Komplement (inverterar alla bitar i operanden)

AND

Bitvist logiskt and, resultatet i första operanden

OR

Bitvist logiskt or, resultatet i första operanden

XOR

Bitvist logiskt xor, resultatet i första operanden

TEST

Samma som AND, men ändrar inte destinationsoperanden. Används för att testa om vissa bitar är satta (följs ofta av ett villkorligt hopp)

SHL/SHR

Logiskt skift vänster (SHift Left) och höger (SHift Right)

ROL/ROR/RCR/RCL

roterar operanden (RCR och RCL roterar med föregående carry, inte så ofta använda)

Strängmanipulerande instruktioner

MOVSB/MOVSW

Kopierar en byte resp ett word från den minnescell som pekas ut av ds:si till den minnescell som pekas ut av es:di samt räknar upp si och di en byte med movsb och två byte (ett word) med movsw. Kombineras med fördel med REP instruktionen

LODSB/LODSW

Kopierar en byte (lodsb) eller word (lodsw) från minnet till ackumlatorn. Registerparet ds:si pekar på adressen i minnet där byten eller wordet finns. dessutom räknas si upp en byte (lodsb) eller två byte (lodsw) så om man gör lodsb/lodsw en gång till så laddas nästa byte eller word i minnet till Ax.

STOSB/STOSW

Kopierar en byte (stosb) eller word (stosw) från ackumulatorn till minnet. Registerparet es:di pekar på adressen i minnet där byten eller wordet kommer att lagras. Dessutom räknas di upp ett steg (stosb) eller två steg (stosw) så nästa gång man gör stosb/stosw lagras Ax till nästa position i minnet. Kan kombineras med REP instruktionen som gör stos Cx antal ggr.

Flödeskontrollerande instruktioner

CALL

Anropa en subrutin

RET

Återhopp från subrutin (avslutar en subrutin)

JMP

Ovillkorligt hopp (hoppar alltid) Villkorliga hopp utnyttjar Cf och Zf bitarna i FLAG - registret. Flag registret har vissa bitar som innehåller information om föregående instruktion. Flag bitarna kallas:
FLAG bitar:

Villkorliga hopp

. . . . . . . . . . . . . . . . . . . .Flaggvillkor Villkorliga hopp görs lämpligen efter en jämförelse (CMP) eller en aritmetisk instruktion (ADD, INC osv) eller en Logisk instruktion (AND, XOR). Man klarar sig oftast med de två översta villkorliga hoppen JZ och JNZ. Observera att många av instruktionerna hoppar vid samma tillfälle (betyder samma sak), se flaggvillkoren.

LOOP

Kontrollerad upprepning. Loopar till en label. LOOP minskar CX med 1 och om resultatet ej är 0, utförs hopp till labeln.

Villkorliga loopar

(jämför villkorliga hopp)

LOOPE / LOOPZ

Loopar till label om Cx inte är noll (som loop) och om zf = 1

LOOPNE / LOOPNZ

Loopar till label om Cx inte är noll och om zf = 0

INT

Utför ett interrupt (avbrott)

IRET

Återhopp från interrupt, används när man skriver egna avbrottsrutiner. Dessa fungerar ungefär som subrutiner men kan utföras när som helst (tex när man rör tangentbordet, tangentbordsinterrupt).

Processorkontrollerande instruktioner

			Betydelse				     Flaggvillkor
Det var alla instruktioner som jag tycker är viktiga. Det finns massor till men man klarar sig utmärkt med de här. Om du vill veta mer om de andra instruktionerna så gå till närmaste bibliotek eller internetanslutning och fördjupa dig. Man behöver inte kunna alla instruktioner som finns i listan utantill, det är meningen att listan skall fungera som en referens, men det är bra om man åtminstone läst igenom alla så man vet vad som finns.

950519 Albert Veli

e-mail: dat94avi@bilbo.mdh.se