Assembler label, jumps og variables

Assembler label, jumps og variables

Thu 31 December 2009

En kort forklaring på label, jumps og variables.

Labels:


Vert brukt til å merke delar av koden noko som gir oss muligheten til å
finne igjen starten på en gitt kodeseksjon.

I assembler er en label et navn etterfulgt av et kolon. Vi kan ikkje ha labelar med samme
navn, og navna kan heller ikkje bestå av reserverte ord. Men ellers står vi ganske fritt til
å velge navn.

Jumps:


Vert som oftast brukt i forbindelse med ei sammenligning, og kan sjåast på som en if konstruksjon.
Et hopp startar nesten alltid med en CMP instruksjon som sammenlignar verdiar. Dersom to verdiar
er like vert et av CPU flagga (Zero flagg) satt.

JMP:
En instruksjon som tar en operand, nemlig adressa som den skal hoppe til, eller evt
den labelen som den skal til

JZ:
En avledning av JMP, men vert utført kun dersom zero flagget er satt

JNZ:
Er det motsatte av JZ, vert utført kun dersom zero flagget ikkje er satt

CMP:
Sammenligner to verdiar. Dersom verdiane er like vert zero flagget satt

Eksempel på en if konstruksjon:

{codecitation class="brush: plain; gutter: true;"}
start: ; Label
;Les inn char
mov ah, 08
int 21h
;Sjekkar om innlest er lik ESC (som har ascii verdi 27)
cmp al, 27
;Hoppar dersom brukar ikkje tastar ESC
jnz er_ikkje_escape
;Dersom brukar tasta ESC
er_escape: ; Label
;Skriv ut 'E' 'S' 'C'
mov ah, 02
mov dl, "E"
int 21h
mov dl, "S"
int 21h
mov dl, "C"
int 21h
;Dersom brukar ikkje tasta ESC
er_ikkje_escape: ; Label
mov ah4c
int 21h

Variabler og strengar:


Variablar deklarerast med nøkkelorda db og dw

DB (Define byte):
Setter av 8 bitar til variabelen

DW (Define word):
Setter av 16 bitar til variabelen

Når ein har satt av plass til ein variabel kan den brukast på samme måten som eit
vanlig register.
Stringar definerast ved på samme måten som variablar

Eksempel på 4 variablar:

en_variabel db 10
to_variabel db "a"
tre_variabel db "En streng må slutte med $"
msg db "Grei måte å gjere det på. ",10, 13, "$"

Den nederste måten er en grei måte å definere en streng på. Tala 10 (CR) og 13 (LF) fortell
assembleren at vi vil ha ei ny line etter setninga er skrevet ut.
Det er også greit å ha i minnet at alle strengar må slutte med "$", dersom dette tegnet manglar
vil vi berre få ut tulletegn i lange baner.

Tagged as : prolog assembler