*

Lajme

May 08, 2012, 02:30:00 AM

May 08, 2012, 12:45:50 AM

Video e javës



   Shpejtesia e Google Chrome.


Diskutimet e fundit


*Ndegjoni Live: ayihRadio - OFF AIR


Pages: [1] |   Go Down
  Send this topic  |  Print  
Topic: Talking with MIPS hardware.  (Read 3699 times)
« on: May 14, 2009, 05:09:46 PM »
albanianwizard Offline
respected member
Jr. Member

***
Posts: 99



Gjejm shpesh te shkruhet ne kod, kur shikojm programet tona assembly kode te tipit:
add $s0, $s1, $s2
E na thone qe $s0 = $s1 + $s2 dhe kuptojm qe vlera e rregjistrave $s1 dhe $s2 do te mblidhet dhe do te depozitohet tek rregjistri $s0 por ku qendron “kaosi”?
Problemi qendron qe nderkoh qe lexojm kodin assembly nuk shohim as vleren e rregjistrit $s1 dhe as ate te $s2-shit dhe themi,
Nga dreqin doli 10001001 tek $s0?

Ne realitet proçesi eshte shume i thjesht, dhe detyren per te asociuar variabilat e programeve me rregjistrat e ka kompilatori [kujdes po flasim per kompilator assembler dhe jo kompilatorin qe perkthen gjuhen nga niveli i lart ne ate te voglin].

Marrim 2 ushtrime per te shpjeguar kete fenomen dhe thjeshtesine e tij.

Ushtrimi 1

Pseudokodi;
a = (b + c) - (d + e);
Si eshte kodi assembly i ketij pseudokodi?

Ne kete rast ne na takon te marrim persiper rolin e assemblerit dhe do i lidhim ne vlerat me rregjistrat dhe perkatesisht;
meqenese kemi te bejm me variabila siç e mesuam tek ;
http://albanianwizard.org/informatika_shqiptare/arkitekture_kompiuterike/gjuha_e_programimit_assembly/regjistri-file-register-file-mips/

Rregjistri qe perdoret ne te tilla raste eshte seria e rregjistrave $s keshtu qe:
a = $s0; b = $s1; c = $s2; d = $s3; e = $s4;
Tani vazhdojm te kryejm veprimet me elementare dhe e ndajm kodin ne 2 pjese (b+c) dhe (d+e) dhe i depozitojm vlerat ne rregjistra temporan $t0 pasi nuk na duhen per shume kohe keshtu qe kodi assembly i bie te jete:
Code:
add $t0, $s1, $s2       # t0 = $s1 + $s2 = b + c
add $t1, $s3, $s4       # t1 = $s3 + $s4 = d + e
sub $s0, $t0, $t1,      # s0 = $t0 - $t1 = (b + c) - (d + e)

Nga vet komentimi besoj se kuptuam se ç’fare ndodhi.. le te sjellim nje shembull tjeter..

Ushtrimi 2

Perpara se te shikojm se si zgjidhet le te fiksojm dy ligje qe na duhen;

 
  • 1. Ne ç’do instruksion Mips, egzekuton gjithmon vetem 1 funksion i cili pershkruhet medoemos nga 3 variabila ku secila nga ato variabila i perket nje rregjistri. psh sub $s0, $t1, $t2
  •    2. Te vetmet instruksione qe perdorin memorjen ne aritekturen MIPS jane lw (load word) dhe sw (store word) te cilat me ane te nje instruksioni te posatshem qe quhet Data Transfer Instruction jane ne gjendje te marrin dhe te japin informacione nga memorja RAM

Vazhdojm me ushtrimin,
Le te marrim qe assembleri (pasi e pame njehere kete proçes) ka asociuar variabilat t dhe y me rregjistrat $s1 dhe $s2 dhe le te marrim qe kemi nje array (ne kete rast grumbull te dhenash) qe “fshihet” mbas ‘adreses baze’ ( lokacioni ne memorje qe shenon fillimin e te dhenave) te quajtur G mbas te ciles gjenden 100 fjale dhe kete adrese baze asembleri ka caktuar qe te gjendet tek rregjistri $s3.
Kalojm tek pseudokodi:
t = y + G[8];
I kemi shpjeguar te gjitha perveç [8]-tes e cila eshte nje konstante. qe do te thote se do te selektohen 8 elemente.
Ç’fare po ndodh?
Ne po na jepet ne kete rast nje lokacion memorjeje, dhe na thuhet qe adresa per te selektuar tog-dateshin (tog-fjaleshin) e isntruksioneve qe gjendet ne memorje eshte e perbere nga adresa fillestare (baze) + elementet per tu selektuar qe jane 8.
Adresa = adresen baze + 8 elemente = g + [8] e te gjitha keto do te magazinohen ne regjistrin $s3
Mbas kesaj na duhet qe ta mbledhim me y ($s2) dhe shumen ta depozitojm ne t ($s1).
Nga ky pseudokod nxjerrim qe fillimisht duhet te terheqim te dhena nga memorja dhe kete e ben vetem lw (load word);

Code:
lw $t0, 8($s3) #Momentalisht rregjistri $t0 merr g -n qe ndodhet tek $s3 + 8 (konstanten)

mbas kesaj besoj qe eshte e thjeshte, duhet vetem te marrim ate qe gjendet ne $t0 (G[8]) ta mbledhim me y ($s2) dhe ta magazinojm tek ($s1).

Code:
add $s1, $s2, $t0     # t = y + G[8]

Konstantja ne kete rast (Cool ne nje instruksion per levizje te dhenash quhet offset kurse regjistri qe i shtohet (G) quhet rregjistri baze.
Logged

http://albanianwizard.org
(Blogu i studenteve shqiptare)
 
Tags: albanianwizard.org  MIPS  talking with the machine 
Pages: [1] |   Go Up
  Send this topic  |  Print  
 
Jump to:  

SEKSIONE   Blogu  |  Galeria  |  Tage

Na kontaktoni | Tregoja mikut | Ndihme | Kerko forumet

English Information | FAQ | Ksalco




graphics by MakeItSimple Studios. ©2008, 2009, 2010, 2011 ayih Organization. Some rights reserved.