Assembler 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.