Czy kto¶ tu moze bawi siê procesorkami MIPS i asemblerem? Próbujê sobie zastosowaæ instrukcjê J (skok d³ugi) w MIPS32 i mam pewne k³opoty z zakodowaniem jej w jêzyku maszynowym :-)
Wed³ug ksi±¿ki opcode binarnie jest 000010 i do tego jest doklejone pozosta³e 26 bitów w postaci adresu docelowego... Z tego co wyczyta³em, skok mo¿e obj±æ zasiêg 256MB maksymalnie. Te 26 bitów adresu docelowego do wpisania jako parametr uzyskuje siê przez obciêcie górnych 4 zostawiaj±c dolne 28 i potem przesuwaj±c w prawo o dwa bity (dziel±c przez liczbê 4).
Chcê skoczyæ spod wektora reset (spod adresu BFC00000) pod adres BFD00000. Do tego celu chcia³em wykorzytaæ instrukcjê J bo w³a¶ciwie pasuje - zakres skoku jest mniejszy od 256 no i chcia³em pobawiæ siê czym¶ nowym zamiast zastosowaæ zwyczajny skok wzglêdem przesuniêcia... No i nie wychodzi. To znaczy disasembler podaje mi ¿e mój opcode oznacza co¶ innego ni¿ ja chcê aby oznacza³. Wstawiam mu warto¶æ BF40000 pod adres BFC00000 a ten mi mówi, ¿e to siê t³umaczy na
BFC00000: 0BF40000 J 8FD00000
Czyli jest ósemka zamiast B w adresie docelowym skoku. Dlaczego? Czy tak to jest dziwnie w asemblerze kodowane? Czy mo¿e to b³±d jaki¶?