Mange sier assemblyspråk er vanskelig, men hver type assemblyinstruksjon er faktisk veldig kortfattet og forståelig.
FASM
Nedenfor følger instruksjoner for FASM – en mye brukt assembler. Det finnes selvsagt alternative assemblere, da vil instruksjonene være litt annerledes.
mov
For å flytte (dvs. kopiere) data brukes instruksjonen mov:
mov destinasjon,kilde
Noen eksempler:
mov eax,8CBh mov eax,edx mov si,cx
Øverst er det verdien 8CBh som flyttes. Dette er en heksadesimalverdi da det er hengt på en h til slutt. For flytting av data mellom to forskjellige registre må begge registrene være av samme størrelse.
add
Om man skal legge sammen to verdier brukes add:
add destinasjon,kilde
Noen eksempler:
add eax,11b add eax,edx add si,cx
I øverste eksempel legges verdien 11b til verdien som allerede finnes i eax. Fordi det henger en b til slutt er dette et binærtall. Hvis man legger sammen registre må begge registrene være av samme størrelse, sånn som greia også er ved flytting.
sub
Motsetningen til add blir sub, for å trekke fra:
sub destinasjon,kilde
Noen eksempler:
sub eax,4h sub cl,dl
Øverst trekkes 4h fra verdien som allerede finnes i eax. Størrelseskravet gjelder også her ved bruk av to forskjellige registre.
inc
Som et mulig alternativ til add har man inc:
inc destinasjon
Noen eksempler:
inc eax inc cl inc dl
Her inkrementeres verdien som allerede finnes i registeret, dvs. at den økes med 1.
dec
Motsetningen til inc blir dec:
dec destinasjon
Noen eksempler:
dec eax dec cl dec dl
Verdien som allerede finnes i registeret blir dekrementert, dvs. redusert med 1.
mul
Skal man multiplisere sammen to verdier bruker man mul og oppgir kun èn kilde:
mul kilde
Resten er allerede bestemt:
- Kilde nr. 2 skal være al (8-bit), ax (16-bit) eller eax (32-bit).
- Valgt kilde nr. 2 må være like stor som kilde nr. 1!
- Destinasjonens størrelse blir dobbelt så stor som kildene. Så 8-bits kilder gir destinasjon som er 16-bit, o.s.v.
- Mulige destinasjoner er
- ah kombinert med al som sammen gir 16-bit.
- dx kombinert med ax som sammen gir 32-bit.
- edx kombinert med eax som sammen gir 64-bit.
Før mul kjøres må selvsagt begge kilder gis verdi – se komplett eksempel:
mov si,2h ; verdi satt for første kilde mov ax,11b ; verdi satt for andre kilde mul si ; resultatet skal tilsvare 6 i desimaltallsystemet
OBS: mul foretar usignert multiplikasjon, for signert må imul brukes i stedet.
div
Som med multiplikasjon oppgir man kun èn kilde for divisjon (div):
div kilde ; dette er nevner, altså den verdien det skal deles på
Resten er bestemt og ganske likt som for mul:
- Den andre kilden (dvs. teller) blir en av
- ah kombinert med al som sammen gir 16-bit.
- dx kombinert med ax som sammen gir 32-bit.
- edx kombinert med eax som sammen gir 64-bit.
- Delregistrene over benyttes også for å lagre resulterende kvotient og rest
- Rest lagres øverst, i ah (8-bit), dx (16-bit) eller edx (32-bit).
- Kvotient lagres nederst, i al (8-bit), ax (16-bit) eller eax (32-bit).
Før div kjøres må selvsagt begge kilder ha verdi – se eksempel:
mov si,2h ; verdi satt for nevner mov eax,110b ; verdi satt for teller div si ; resultatet skal tilsvare 3 i desimaltallsystemet
OBS: Som med mul jobber også div usignert, man har da idiv hvis man ønsker signert.
TBC