Kääntän staattisesti joitain ohjelmia, jotka on koottu Atheros AR7161: lle käyttäen radare2: ta. Tämä prosessori toteuttaa MIPS: n, ja muistan, että MIPS: llä on haaraviive. Tämä on todellakin havaittavissa purkamisessa, koska näen ohjeet, jotka tulisi suorittaa loogisesti ennen haarien sijoittamista heti niiden jälkeen.
Analysoiden kuitenkin jotakin koodia, törmäsin beqz-käskyyn, jonka olettaen että käskyllä sen jälkeen, kun se on suoritettava ensin, ei ole järkeä ohjelman yhteydessä. Minun on myönnettävä, että analyysini voisi olla väärä, mikä ei ole epätodennäköistä; minulla on kuitenkin epäilyksiä siitä, että haluaisin myös tyhjentää:
-
Onko kaikissa haara / hyppy-ohjeissa aina haaran viiveaikaa niin, että heti sen jälkeen käskyn pitäisi suorittaa loogisesti ensin ? Jos ei, missä tapauksissa eikö?
-
Onko jollakin tavalla saada radare2 näyttämään looginen suoritusjärjestys binääritiedostoon koodatun sijaan?
Muokkaa : käsittelen konkreettisesti seuraavaa järjestystä:
beqz v0, <some address> lb v0, 0x40(sp)
Minulla on mielessäni hyvin hajanainen kuva näiden ohjeiden menemisestä putkilinjaan. Voin kuvata toisen käskyn hakemisen ensimmäisen dekoodauksen aikana; näin ollen , haaraviiveen aikavälin suorittamisen pitäisi alkaa. Haarakäsky riippuu kuitenkin samasta rekisteristä, jota haaraviiveen aikavälillä oleva käsky muuttaa, joten mitä tapahtuu? Arvioiko haarakäsky vanhan rekisterin vaa avulla lue tai uusi, jonka lb on päivittänyt?
Kiitos
Kommentit
- Saatat hyötyä MIPS-sarjan lukemisesta Raymond Chen täällä: linkki Ensimmäinen vastaus on ei (ja katso lisätietoja linkistä). En voi ' vastata toiseen.
Vastaa
Haaraviiveen aikavälissä oleva käsky arvioidaan haara (tai hyppy) -käskyn jälkeen. Komennon suorittaminen haaraviiveessä ei vaikuta haaran kunnon arviointiin.
Olen havainnut, että haaraviiveen aikaväliä käytetään muutamaan asiaan:
- Haarakäskyyn johtavan peruslohkon viimeinen käsky
- Haaratesti ei riipu haaraviiveen aikavälin käskyn laskennan tuloksista
- Yleisesti nähdään ehdottomilla hyppyillä / haaroilla kuten
b
,jal
- ensimmäinen kaatumisen esto-ohje .
- Haaran ottamisen yhteydessä ei pitäisi olla sivuvaikutuksia.
- Analyysi osoittaa, että haaroitettuja rekistereitä ei tarvita, jos haara otetaan.
- Lohkon ensimmäinen käsky haaran ottamisen yhteydessä
- Jos haarakohteeseen on useita polkuja, tämä ohje nähdään todennäköisesti useita kertoja eri haarojen kanssa
- Ehdollisen arvon lataus, usein palautusarvoille
Tämä artikkeli selitetään haaraviiveiden aikavälejä.
Kuten Igor totesi, haarakäskyn ”todennäköinen” versio pitää käskyn vaikutukset haaraviiveen aikavälissä vain, jos käsky todella toteutetaan.
vastaus
- Ehdollisten haarojen muunnelmia kutsutaan ”haara [ehdolla] todennäköisiksi”, esim.
-
bgezl
– haara suuremmalla tai todennäköisesti yhtä suuri kuin nolla -
beql
– haara päällä Yhtä todennäköinen
-
Näillä ohjeilla on viiveaika, mutta viiveaikojen käsky suoritetaan vain jos haara otetaan. Jos haaraa ei oteta, viiveaikavälin käsky on ei suoritettu ( nullized ) .
HUOM: nämä ohjeet on poistettu MIPS-arkkitehtuurin julkaisusta 6. Se lisäsi myös kompakteja muunnelmia haaroista, joissa ei ole viiveaikoja.
Katkelman osalta epäilen vahvasti, että haara käyttää vanhaa rekisteriarvoa, mutta voit todennäköisesti vahvistaa sen vain suorittamalla se todellisella prosessorilla.