Jak poprawnie zakodować instrukcję skoku J w MIPS32 w asemblerze?

MIPS32 asembler - instrukcja skoku J (26-parametr)





Poprzedni Następny
Wiadomość
Spis treści
From: "Pszemol" <Pszemol_at_nospam_PolBox.com>
Subject: MIPS32 asembler - instrukcja skoku J (26-parametr)
Date: Wed, 19 Nov 2003 13:49:24 -0600


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ś?


========
Path: news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "B" <bz_at_nospam_onet.pl>
Subject: Re: MIPS32 asembler - instrukcja skoku J (26-parametr)
Date: Thu, 20 Nov 2003 10:17:15 +0100


Skoki bezwarunkowe w RISC to de facto skoki
wzgledne wg. zawartosci PC (tak jest w ARM, ARC, MIPS
pewnie też). Operandem jest offset a nie adres docelowy,
dlatego assembler powinien miec jakas forme zapisu
ktora pozwoli na automatyczne wyliczenie offsetu na podstawie
adresu docelowego (w podanym przez ciebie przykladzie pole
offsetu powinno miec wartosc 0x100000>>2=0x40000
sprobuj wpisac 0x08040000 i zobacz jak to przeczyta dissasembler,
wg, mnie powinno to zostac zinterpretowane jako
PC=PC+0x40000<<2).
Usilujesz wdusic mu adres docelowy i to jest wg. mnie przyczyna
sieczki jaka zwraca ci disassembler (to wyglada tak jakby
instrukcja byla kodowana nie na 6 a na 4 bitach, operand ma
wtedy 28 bitow a po przesunieciu 0xbf40000 o dwa miejsca
dostajesz wlasnie 0x8fd00000).

Obejscie tego problemu to:
-skok przez 32 bitowa zawartosc rejestru
-bezposredni wpis do PC zawartosci innego rejestru
-poprawne wyliczenie offsetu do instrukcji

Sprobuje jeszcze sciagnac liste instrukcji MIPS i jak
znajde cos ciekawego to dam znac.

B.

Użytkownik "Pszemol" <Pszemol_at_nospam_PolBox.com> napisał w wiadomości
news:bpfsd7.1s4.0_at_nospam_poczta.onet.pl...
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ś?




========
Path: news-archive.icm.edu.pl!news.rmf.pl!news.ipartners.pl!news.internetia.pl!skynet.be!newspump.monmouth.com!newspeer.monmouth.com!news.xnet.com!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Pszemol" <Pszemol_at_nospam_PolBox.com>
Subject: Re: MIPS32 asembler - instrukcja skoku J (26-parametr)
Date: Thu, 20 Nov 2003 08:47:01 -0600


"B" <bz_at_nospam_onet.pl> wrote in message news:bpi0vo$216$1_at_nospam_atlantis.news.tpi.pl...
Skoki bezwarunkowe w RISC to de facto skoki
wzgledne wg. zawartosci PC (tak jest w ARM, ARC, MIPS
pewnie też). Operandem jest offset a nie adres docelowy,
dlatego assembler powinien miec jakas forme zapisu
ktora pozwoli na automatyczne wyliczenie offsetu na podstawie
adresu docelowego (w podanym przez ciebie przykladzie pole
offsetu powinno miec wartosc 0x100000>>2=0x40000
sprobuj wpisac 0x08040000 i zobacz jak to przeczyta dissasembler,
wg, mnie powinno to zostac zinterpretowane jako
PC=PC+0x40000<<2).
Usilujesz wdusic mu adres docelowy i to jest wg. mnie przyczyna
sieczki jaka zwraca ci disassembler (to wyglada tak jakby
instrukcja byla kodowana nie na 6 a na 4 bitach, operand ma
wtedy 28 bitow a po przesunieciu 0xbf40000 o dwa miejsca
dostajesz wlasnie 0x8fd00000).

Dzięki za zainteresowanie... ale niestety nie jest to instrukcja
z offsetem lecz w argumencie jest po prostu 28 dolnych bitów
adresu docelowego. Przez obcięcie niepotrzebnych dwu najmłodszych
bitów uzyskuje się wielkości 26 bitów. Op-code jest 6-bitowy:
000010 a potem w następnych 26 bitach jest właśnie adres skoku.
Cytat z "MIPS32T Architecture For Programmers Volume II:
The MIPS32T Instruction Set":


"Format: J target MIPS32 (MIPS I)

Purpose:
To branch within the current 256 MB-aligned region

Description:
This is a PC-region branch (not PC-relative); the effective target
address is in the "current" 256 MB-aligned region.
The low 28 bits of the target address is the instr_index field
shifted left 2 bits. The remaining upper bits are the corresponding
bits of the address of the instruction in the delay slot (not
the branch itself). Jump to the effective target address.

Programming Notes:
Forming the branch target address by catenating PC and index bits
rather than adding a signed offset to the PC is an advantage
if all program code addresses fit into a 256 MB region aligned
on a 256 MB boundary. It allows a branch from anywhere in the region
to anywhere in the region, an action not allowed by a signed
relative offset."

I co Ty na to?

Obejscie tego problemu to:
-skok przez 32 bitowa zawartosc rejestru
-bezposredni wpis do PC zawartosci innego rejestru
-poprawne wyliczenie offsetu do instrukcji

Tak, wiem że są inne możliwości skoków, ale ten J z 26-bitowym
argumentem "wszedł mi na ambit" i chciałbym go rozgryźć... :-))

Sprobuje jeszcze sciagnac liste instrukcji MIPS i jak
znajde cos ciekawego to dam znac.

Ściągnij, ściągnij - pewnie się zdziwisz :-) Link masz np tu:
http://ultramike.caltech.edu/projects/MIPS/MIPS32%20Vol%202.pdf


========
Path: news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Pszemol" <Pszemol_at_nospam_PolBox.com>
Subject: Re: MIPS32 asembler - instrukcja skoku J (26-parametr)
Date: Mon, 24 Nov 2003 08:26:39 -0600


I co Wy na to, moi drodzy?

"Pszemol" <Pszemol_at_nospam_PolBox.com> wrote in message news:bphv2c.3o0.0_at_nospam_poczta.onet.pl...
"B" <bz_at_nospam_onet.pl> wrote in message news:bpi0vo$216$1_at_nospam_atlantis.news.tpi.pl...
Skoki bezwarunkowe w RISC to de facto skoki
wzgledne wg. zawartosci PC (tak jest w ARM, ARC, MIPS
pewnie też). Operandem jest offset a nie adres docelowy,
dlatego assembler powinien miec jakas forme zapisu
ktora pozwoli na automatyczne wyliczenie offsetu na podstawie
adresu docelowego (w podanym przez ciebie przykladzie pole
offsetu powinno miec wartosc 0x100000>>2=0x40000
sprobuj wpisac 0x08040000 i zobacz jak to przeczyta dissasembler,
wg, mnie powinno to zostac zinterpretowane jako
PC=PC+0x40000<<2).
Usilujesz wdusic mu adres docelowy i to jest wg. mnie przyczyna
sieczki jaka zwraca ci disassembler (to wyglada tak jakby
instrukcja byla kodowana nie na 6 a na 4 bitach, operand ma
wtedy 28 bitow a po przesunieciu 0xbf40000 o dwa miejsca
dostajesz wlasnie 0x8fd00000).

Dzięki za zainteresowanie... ale niestety nie jest to instrukcja
z offsetem lecz w argumencie jest po prostu 28 dolnych bitów
adresu docelowego. Przez obcięcie niepotrzebnych dwu najmłodszych
bitów uzyskuje się wielkości 26 bitów. Op-code jest 6-bitowy:
000010 a potem w następnych 26 bitach jest właśnie adres skoku.
Cytat z "MIPS32T Architecture For Programmers Volume II:
The MIPS32T Instruction Set":


"Format: J target MIPS32 (MIPS I)

Purpose:
To branch within the current 256 MB-aligned region

Description:
This is a PC-region branch (not PC-relative); the effective target
address is in the "current" 256 MB-aligned region.
The low 28 bits of the target address is the instr_index field
shifted left 2 bits. The remaining upper bits are the corresponding
bits of the address of the instruction in the delay slot (not
the branch itself). Jump to the effective target address.

Programming Notes:
Forming the branch target address by catenating PC and index bits
rather than adding a signed offset to the PC is an advantage
if all program code addresses fit into a 256 MB region aligned
on a 256 MB boundary. It allows a branch from anywhere in the region
to anywhere in the region, an action not allowed by a signed
relative offset."

I co Ty na to?

Obejscie tego problemu to:
-skok przez 32 bitowa zawartosc rejestru
-bezposredni wpis do PC zawartosci innego rejestru
-poprawne wyliczenie offsetu do instrukcji

Tak, wiem że są inne możliwości skoków, ale ten J z 26-bitowym
argumentem "wszedł mi na ambit" i chciałbym go rozgryźć... :-))

Sprobuje jeszcze sciagnac liste instrukcji MIPS i jak
znajde cos ciekawego to dam znac.

Ściągnij, ściągnij - pewnie się zdziwisz :-) Link masz np tu:
http://ultramike.caltech.edu/projects/MIPS/MIPS32%20Vol%202.pdf



========
Path: news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.gazeta.pl!news.icm.edu.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Zbych" <bzbUSUN_TO_at_nospam_poczta.onet.pl>
Subject: Re: MIPS32 asembler - instrukcja skoku J (26-parametr)
Date: Mon, 24 Nov 2003 22:07:13 +0100


Pewnego pięknego dnia Pszemol przemówił(a) ludzkim głosem:

I co Wy na to, moi drodzy?

pogorszyło ci się, czy ktos się pod ciebie
podszywa ?


========
Path: news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Pszemol" <Pszemol_at_nospam_PolBox.com>
Subject: Re: MIPS32 asembler - instrukcja skoku J (26-parametr)
Date: Mon, 24 Nov 2003 15:25:46 -0600


"Zbych" <bzbUSUN_TO_at_nospam_poczta.onet.pl> wrote in message news:bptrub$fqq$1_at_nospam_SunSITE.icm.edu.pl...
Pewnego pięknego dnia Pszemol przemówił(a) ludzkim głosem:

I co Wy na to, moi drodzy?

pogorszyło ci się, czy ktos się pod ciebie
podszywa ?

Czy my się może znamy? Sorry, ale nie kojarzę kolegi...


========
Path: news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.gazeta.pl!news.icm.edu.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Zbych" <bzbUSUN_TO_at_nospam_poczta.onet.pl>
Subject: Re: MIPS32 asembler - instrukcja skoku J (26-parametr)
Date: Tue, 25 Nov 2003 09:41:22 +0100


Czy my się może znamy? Sorry, ale nie kojarzę kolegi...

Niekoniecznie, moje pytanie dotyczyło raczej
niewyciętego cytatu i odpowiadania nad nim.
Pomyśl o modemowcach.


========
Path: news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Pszemol" <Pszemol_at_nospam_PolBox.com>
Subject: Re: MIPS32 asembler - instrukcja skoku J (26-parametr)
Date: Tue, 25 Nov 2003 09:04:04 -0600


"Zbych" <bzbUSUN_TO_at_nospam_poczta.onet.pl> wrote in message news:bpv4k3$bb0$1_at_nospam_SunSITE.icm.edu.pl...
Czy my się może znamy? Sorry, ale nie kojarzę kolegi...

Niekoniecznie, moje pytanie dotyczyło raczej
niewyciętego cytatu i odpowiadania nad nim.
Pomyśl o modemowcach.

Pomyślałem i właśnie to był efekt przemyśleń...
Po czterech dniach przerwy samo "co o tym myślicie"
nie miało sensu, więc przypomniałem swój problem
aby nie musieli modemowcy zbyt wiele szukać :-)


========
Path: news-archive.icm.edu.pl!news.rmf.pl!news.ipartners.pl!news.nask.pl!news-stoc.telia.net!217.209.241.210.MISMATCH!news-stod.telia.net!telia.net!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "B" <bz_at_nospam_onet.pl>
Subject: Re: MIPS32 asembler - instrukcja skoku J (26-parametr)
Date: Tue, 25 Nov 2003 01:45:57 +0100



Użytkownik "Pszemol" <Pszemol_at_nospam_PolBox.com> napisał w wiadomości
news:bpsfc1.3b0.0_at_nospam_poczta.onet.pl...
I co Wy na to, moi drodzy?



Ściągnij, ściągnij - pewnie się zdziwisz :-) Link masz np tu:
http://ultramike.caltech.edu/projects/MIPS/MIPS32%20Vol%202.pdf


Siądź sobie z karteczką kratkowanego papieru, zapisz sobie adres docelowy,
wytnij 28 starszych bitów, przesun w lewo o dwa miejsca i dorzuc do
kodu operacji i kod rozkazu gotowy. Tak przynajmniej wynika z powyzszego
PDFa. A w liscie instrukcji żadnych dziwów nie widzę.

BTW. Jedziemy prosto po kości? Bez OS?





========
Path: news-archive.icm.edu.pl!news.rmf.pl!news.ipartners.pl!newsfeed.gazeta.pl!news.nask.pl!news-stoc.telia.net!217.209.241.210.MISMATCH!news-stod.telia.net!telia.net!news.tele.dk!news.tele.dk!small.news.tele.dk!newsfeed.icl.net!newsfeed.fjserv.net!news.m