Loopit
Loopit
Ohjelmat tekevät harvoin asiansa yhdellä askeleella. Yleensä sama operaatio toistetaan: käydään läpi taulukon alkiot, lasketaan summa, etsitään maksimi, kerrotaan yhteen. Assemblyssa toistorakenteet rakennetaan vertailusta ja hypystä, ihan kuten if-rakenteet, mutta nyt hyppäämme tarpeen tullen taaksepäin.

Yksinkertainen silmukka CMP:n ja JNE:n avulla
Lasketaan luvut 1..5: kasvatetaan laskuria, lisätään summaan, toistetaan kunnes laskuri on saavuttanut viiden. Tämä vastaa korkeamman tason kielen for (i = 1; i <= 5; i++)-rakennetta.
Tutki ohjelmaa askel kerrallaan emulaattorissa. Näet, miten EBX ja EAX päivittyvät jokaisella kierroksella ja miten suoritus palaa loop_alku-labeliin niin kauan kuin ehto pitää.
Yleisiä hyppyehtoja silmukoissa
JNE / JNZ: "ei vielä perillä, jatka kierroksia", eli yleinen kunnes-yhtäsuuri-ehto.JL: jatka, kun laskuri on vielä alle rajan (etumerkillinen).JG: jatka, kun laskuri on vielä yli rajan (esim. päinvastaiseen suuntaan käytetyissä silmukoissa).
Valitse ehto sen mukaan, mihin suuntaan laskurisi liikkuu ja millä ehdolla silmukasta poistutaan.
LOOP-käsky
x86:ssa on yhdistetty käsky nimeltä LOOP, joka tekee kerralla kolme asiaa:
- Vähentää
ECX-rekisteristä yhden. - Vertailee, onko
ECXnolla. - Hyppää annettuun labeliin, jos
ECXei ole nolla.
Eli yhdellä rivillä saadaan DEC + CMP + JNE. ECX on aina laskuri. Tämä on rekisterin vakiintunut erityisrooli.
LOOP on tyylikäs mutta sisältää piilon: jos kosket ECX:ään silmukan sisällä muusta syystä, sotkeudut helposti. Reverse engineeringissä LOOP-käskyä ei nykyään juuri näe: modernit kääntäjät suosivat erillisiä DEC + JNZ -pareja, koska niiden suorituskyky on parempi.
Kahteen ehtoon perustuva silmukka
Joskus silmukka pitää keskeyttää ennenaikaisesti, esim. "jatka kunnes alkion arvo on tietty tai päädymme listan loppuun". Tämä vastaa korkean tason kielten break:iä. Toteutus: vertaa kahdesti ja hyppää silmukan ulkopuolelle, kun toinen ehto täyttyy.
Hakkeroinnin oppiminen alkaa tästä
Sadat interaktiiviset kurssit, virtuaalilabrat ja CTF-haasteet selaimessasi. Aloita ilmainen kokeilu ilman korttitietoja.