Documente Academic
Documente Profesional
Documente Cultură
I.
Regitrii
1. Regitrii generali
Intern, regitrii generali sunt adresai prin coduri de bii. La nivelul
limbajului de asamblare, regitrii sunt referii prin cod, precedat de semnul $: $1, $17,
$20, etc. n plus, acetia pot fi accesai printr-un mnemonic unic, care s evidenieze
scopul pentru care sunt folosii (n general prin convenie, n unele cazuri i din
constrngeri hardware): $t1, $s2, etc.
n QtSpim, se gsesc grupai n fereastra principal, sub denumirea de General
Registers:
Nume
$0
$1
Mnemonic
$zero
$at
$2; $3
$v0; $v1
$4$7
$a0$a3
$8$15
$t0$t7
$16$23
$s0$s7
$24; $25
$t8; $t9
$26; $27
$k0; $k1
$28
$gp
$29
$30
$sp
$fp
$31
$ra
Utilizare convenional
Zero register conine ntotdeauna valoarea 0.
Assembler Temporary este rezervat pentru asamblor.
Value registers - folosii pentru reinerea rezultatelor ntregi
ale evalurilor unor expresii sau funcii.
Arguments folosii pentru transmiterea argumentelor unor
subrutine (parametrii actuali). Valorile acestora nu se
pstreaz dupa apelul de procedur.
Temporary registers folosii pentru evaluarea expresiilor.
Valorile acestora nu se pstreaz la apeluri de proceduri.
Saved registers - valorile acestora sunt pstrate la apeluri de
proceduri.
Temporary registers folosii pentru evaluarea expresiilor.
Valorile acestora nu se pstreaz la apeluri de proceduri.
Kernel registers - rezervai pentru sistemul de operare.
Global Pointer indic spre mijlocul unui bloc de memorie
care pstreaz constante i variabile globale.
Stack Pointer indic ultima locaie utilizat n stiv.
Frame Pointer - pointer spre cadrul curent n stiv.
Return Address conine adresa de ntoarcere, fiind folosit
pentru evaluarea expresiilor.
Tabelul 1. Regitrii generali
2. Regitrii speciali
Procesorul MIPS prezint 3 regitri speciali, prezeni n partea de sus a
ferestrei Int Regs a simulatorului QtSpim:
Nume Descriere
PC
Program Counter
HI
Higher registru special de nmulire/mprire n care se depoziteaz cei
mai semnificativi 32 de bii ai produsului, respectiv restul mpririi.
LO
Lower - registru special de nmulire/mprire n care se depoziteaz cei mai
puini semnificativi 32 de bii ai produsului, respectiv ctul mpririi.
Tabelul 2. Regitrii speciali
Semnificaia EPC, Cause, BadVAddr, Status va fi discutata ulterior, la
tratarea excepiilor.
II.
3.
specifice:
ALU
$8
$2
$1
$0
Figura 2. Regitrii i unitatea aritmetico-logic ALU
2. Formatul instruciunilor
Exerciiu:
1. ncrcai n QtSpim programul urmtor:
.data
# declaratii date
.text
# cod
main: # eticheta marcand punctul de start
# cod
add $t1,$t2,$t3
li $v0,10
syscall
2. Care este codul main corespunztor instruciunii add $t1,$t2,$t3? Gsii
reprezentarea sa n binar.
3. Adugai n cod linia urmtoare: sub $t1,$t2,$t3.
4. Care este codul main corespunztor acestei instruciuni? Gsii
reprezentarea sa n binar.
5. Cum se difereniaz cele 2 operaii?
6. Adugai n cod linia urmtoare: add $s1,$t2,$t3.
7. Care este codul main corespunztor acestei instruciuni? Gsii
reprezentarea sa n binar
8. Putei deduce poziiile biilor care indic registrul destinaie?
9. Adugai in cod linia urmtoare: add $t1,$s2,$s3.
10. Care este codul main corespunztor acestei instruciuni? Gsii
reprezentarea sa n binar.
11. Putei deduce poziiile biilor care indic regitrii celor 2 operanzi?
n limbajul de asamblare pentru MIPS32, instruciunile ocup ntotdeauna
32 de bii (= 4 octei = 1 word). Acestea respect unul dintre urmtoarele 3 formate:
ntrebri:
1) Ce format respect instruciunile add i sub folosite n exemplul precedent?
2) Completai urmtorul tabel pentru instruciunile folosite n exerciiul precedent:
Instruciune
add $t1,$t2,$t3
sub $t1,$t2,$t3
add $s1,$t2,$t3
add $t1,$s2,$s3
op
000000
rs
rt
rd
01010
01011
01011
01001
shamt
00000
func
100000
00000
10010
3. Instruciuni cu i fr depire
Cum dimensiunea unui registru general este de 32 de bii, exist 232 de
combinaii binare posibile pe care un astfel de registru le poate conine. Operanzii care se
pstreaz n regitri se pot considera:
Numere naturale, fr semn : de la 0 la 232-1;
Numere ntregi, cu semn: de la 231 la 231-1.
Instruciunile se mpart n instruciuni care:
nu genereaz niciodat excepie de overflow (fr depire): dac
rezultatul iese din intervalul considerat, se face trunchiere;
pot genera excepie de owerflow (cu depire): daca rezultatul iese
din intervalul considerat se genereaz eroare de overflow;
Astfel:
add $t1,$t2,$t3
- consider operanzii din regitrii $t2 i $t3 numere cu semn;
- ntoarce overflow n cazul n care se obine o valoare care nu
este n intervalul [231 , 231-1] (este o instruciune cu depire);
addu $t1,$t2,$t3
- consider operanzii din regitrii $t2 i $t3 numere fr semn
(sufixul u provine de la unsigned);
- nu genereaz niciodat excepie (overflow), ci trunchiaz
rezultatul (este instruciune fr depire).
- rezultatul este corect numai cnd bitul de transport obinut
dup efectuarea calculului este 0; n caz contrar s-a realizat
trunchiere si rezultatul nu este cel corect aritmetic.
Exerciiu:
1. ncrcai n QtSpim programul de mai jos:
.data
# declaratii date
.text
# cod
main: # eticheta marcand punctul de start
# cod
li $t2,0x7fffffff
li $t3,0x00000001
addu $t1,$t2,$t3
add $t0,$t2,$t3
li $v0,10
syscall
2. Rulai programul pas cu pas. Observai c:
2.1. Se poate folosi li (load immediate) pentru a pune direct ntr-un registru o
valoare.
2.2. n registrul $t2 se introduce valoarea maxim pozitiv n cazul n care se
consider numere cu semn;
2.3. Instruciunea addu realizeaz corect adunarea ntruct nu se depete
valoarea maxim a numerelor fr semn i deci nu se realizeaz
trunchiere.
2.4. Instruciunea add genereaz excepie ntruct suma (231-1) + 1 depsete
valoarea maxim a numerelor cu semn.
3. Modificai programul de mai sus astfel nct n $t2 s fie valoarea 231 i n
$t3 valoarea 1:
li $t2,0x80000000
li $t3,0xffffffff
4. Rulai programul pas cu pas. Observai c:
Tip
Cu semn, cu
depire
Fr semn, fr
depire
Cu semn, cu
depire
Far semn, fr
depire
Cu semn, cu
depire
Fr semn, fr
depire
Cu semn, fr
depire
Operaia
efectuat
rd rs + rt
rd rs + rt
rt rs + imm
rt rs + imm
rd rs - rt
rd rs - rt
HI,LO rs * rt
Format
Exemplu
multu rs, rt
Fr semn, fr
R
HI,LO rs * rt
depire
Cu semn, cu
LO rs / rt
R
depire
HI rs % rt
Fr semn, fr
LO rs / rt
R
depire
HI rs % rt
Tabelul 3. Instruciuni aritmetice
div rs, rt
divu rs, rt
Abrevieri
Move To HI
Move From HI
Move To LO
Move From LO
Operaia
efectuat
HI rs
rd HI
LO rs
rd LO
Format
R
R
R
R
Exemplu
mthi $t1
mfhi $t1
mtlo $t1
mflo $t1
Pseudoinstruciune
abs rd, rs
neg rd, rs
negu rd, rs
add rd, rs, imm
addu rd, rs, imm
add rd, imm
addu rd, imm
sub rd, rs, imm
subu rd, rs, imm
sub rd, imm
subu rd, imm
mulo rd, rs, rt
mulou rd, rs, rt
div rd, rs, rt
divu rd, rs, rt
rem rd, rs, rt
remu rd, rs, rt
Tip
Cu semn
Cu depire
Fr depire
Cu semn, cu
depire
Fr semn,
fr depire
Cu semn, cu
depire
Fr semn,
fr depire
Cu semn, cu
depire
Fr semn,
fr depire
Cu semn, cu
depire
Fr semn,
fr depire
Cu semn, cu
depire
Fr semn,
fr depire
Cu semn, cu
depire
Fr semn,
fr depire
Cu semn, cu
depire
Fr semn,
fr depire
Operaia
efectuat
rd |rs|
rd - rs
rd - rs
rd rs + imm
rd rs + imm
rd rd + imm
add $t1, 1
rd rd + imm
addu $t1, 1
rd rs - imm
rd rs - imm
rd rd - imm
sub $t1, 1
rd rd + imm
subu $t1, 1
rd rs * rt
rd rs * rt
rd rs / rt
rd rs / rt
rd rs % rt
rd rs % rt
Exemplu
#$t4 = $t1+$t2
#$t4 = $t4-$t3
10
Problem rezolvat:
S se obin n $t3 expresia 8*x [y/16] , unde x este valoarea din $t1 i y
este valoarea din $t2.
.data
.text
main:
li $t0,8
mulo $t3,$t1,$t0 #se obtine $t3 = 8*$t1
li $t0,16
div $t2, $t2, $t0 #se obtine $t2 = $t2/16
sub $t3, $t3, $t2 #se obtine $t3 = 8*$t1 - [$t2/16]
li $v0,10
syscall
Probleme propuse:
1) S se obin in $t3 valoarea: [x/y] * {y/x}, unde x este valoare stocat n $t1 i y
este valoarea stocat n $t2, unde s-a notat cu [ ] ctul i cu {} restul mpririi.
2) S se obin n $t3 valoarea |x-y| , unde x este valoarea din registrul $t1 i y este
valoarea din registrul $t2.
5. Instruciuni logice
ntrebri:
1) Care sunt operaiile logice pe bii?
2) Care sunt tabelele de adevr corespunztoare?
Operaia
Format
efectuat
rd rs AND rt
R
rt rs AND imm I
rd rs OR rt
R
rt rs OR imm
I
rd rs XOR rt
R
rt rs XOR imm I
rd rs NOR rt
R
Tabel 6. Instruciuni logice
11
Exemplu
and $t1, $t2, $t3
andi $t1, $t2, 10
or $t1, $t2, $t3
ori $t1, $t2, 10
xor $t1, $t2, $t3
xori $t1, $t2, 10
nor $t1, $t2, $t3
Pseudoinstruciune
not rd, rs
nor rd, rs, imm
and rd, rs, imm
Operaia efectuat
rd NOT rs
rd rs NOR imm
rd rs AND imm
Exemplu
not $t1, $t2
nor $t1, $t2, 10
and $t1, $t2, 10
6. Instruciuni de shiftare
Instruciune
sll rd, rt, imm
Operaia efectuat
Shift Left Logical
Format
Exemplu
R
sll $t1, $t2, 2
rd rt << imm
12
rd rt >> imm
7. Pseudoinstruciuni de rotaie
Pseudoinstruciune
rol rd, rt, rs
Operaia efectuat
Exemplu
Rotation On Left
rol $t2, $t1, $t0
- se pune n rd configuraia de bii din rt
deplasat spre stnga cu nr. de bii din rs, a..
biii care ies din word spre stnga sunt
introdui n aceeai ordine n locul gol creat n
dreapta.
13
Rotation On Right
ror $t2, $t1, $t0
- se pune n rd configuraia de bii din rt
deplasat spre dreapta cu nr. de bii din rs, a..
biii care ies din word spre dreapta sunt
introdui n aceeai ordine n locul gol creat n
stnga.
Tabelul 9. Pseudoinstruciuni de rotaie
Probleme propuse:
1) n registrul t0 se gsete valoarea 0x1234. Obinei n registrul t2 valoarea
0x91a0 utiliznd o instruciune de shiftare sau rotaie.
2) n registrul t0 se gsete valoarea 0x12345678. Obinei n registrul t1 valoarea
0xc091a2b3 utiliznd o instruciune de shiftare sau rotaie.
14