» »

dekodiranje ukazov

dekodiranje ukazov

rustypac ::

Mi lahko malo razložite zakaj se gre in kako deluje?

dekodirajte ukaz (ugotovite, kaj prišteje kateremu registru (številka registra) in kam gre rezultat)
001000 00101 00010 0000000000001101


V pomnilniku na lokaciji X piše (v dvojiškem sistemu) sledeč ukaz za MIPS 64:
000000 00011 10110 01001 00000 101110

1. za kateri ukaz gre (dekodirajte ukaz),
2. katere operande ima?

Mi lahko kdo razloži, kako in kaj se gleda v tej tabeli?
Googlam že 3 ure in še sedaj nevem zakaj se gre.




Lp!
  • spremenil: rustypac ()

kihc ::

Ta slikca ki si jo dal semle je čisto brezveze. Zgoogli si instruction set za mips in poišči kako je sestavljen ukaz.
x

rustypac ::

kako pa lahko iz tistih binarnih števil ugotovim za kateri ukaz gre?

kihc ::

Pogledaš operacijsko kodo, ki je za mips prvih 6 bitov. Recimo pri tvojem prvem primeru gre za ukaz addi. Najdeš ga na strani 46 v tukaj.
x

rustypac ::

To vem, zanima me kako pridem do tega da je 001000 ADDI, moram iti gledat ukaz za ukazom?

kihc ::

Ja, nekako ga moraš najdit. Lahko pa konvertaš v hex in potem gledaš tukaj, je malo bol pregledno.
x

Zgodovina sprememb…

  • spremenil: kihc ()

rustypac ::

Aha, hvala. Bi mi lahko še prosim razložil to?
ADD rt, ra, tb oz.:
ADD r1, r2, r3

kar se zakodira kot:
0 1 1 0 0 1 0 1 0 0 1 1

kihc ::

ADD r1, r2, r3

format ukaza je R, ki zgleda takole:

| op. koda | rs | rt | rd | shamt | funct |

op. koda (pogledaš v tabelo za add) => 000000
rs (prvi operand, r2) => 00010
rt (drugi operand, r3) => 00011
rd (ponorni reg, r1) => 00001
shamt (pri tem ukazu nima vloge, lahko daš recimo ničle) => 00000
funct (pogledaš v tabelo za add) => 100000

Če to zložiš skupaj: 000000 00010 00011 00001 00000 100000
x

boogie_xlr ::

Slikca je pa od tukaj. Gre se za namišljen RISC procesor(in torej krajše 12-bitne namišljene(zato google ni obrodil sadov) ukaze za lažje razumevanje) in če bi dobro prebral navodila, bi takoj vedel, kaj in kako.

rustypac ::

Hvala, mi je že bolj jasno.

eXoo ::

aha, potem bi ukaz ADD r5 r3 r2 zakodiral kot : 011101011010 ?

Meni še zdaj ni jasno naslednje :

dekodirajte ukaz (ugotovite, kaj prišteje kateremu registru (številka registra) in kam gre rezultat):
se pravi.

ADDI rs rt immediate
001000 00101 00010 0000000000001101

rt = rs + immediate ... se pravi da je to 00101 + 000000000001101 ? in potem naj bi dobil rt ki je 00010 ? al kaj je to neka fora ?

kihc ::

Zakodiral si prav.

Pri drugem delu pa pomeni da se ti v register 00010 (r2) shrani vrednost registra 00101 (r5) + konstanta 1101 (desetiško 13).

torej ukaz je ubistvu addi r2, r5, #13.
x


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[C++] Prehod na Windows Forms

Oddelek: Programiranje
5971 (935) jizzer
»

Nekaj splošnih vprašanj s področja HW

Oddelek: Strojna oprema
131814 (1575) P1P1
»

Iskanje podvojenih zaporedij

Oddelek: Programiranje
91869 (1649) Gundolf
»

Kako deluje strojna koda?

Oddelek: Programiranje
182212 (1672) Zheegec
»

x86-64 vs IA-64

Oddelek: Strojna oprema
181745 (1558) hatch

Več podobnih tem