Architektura systemów komputerowych Konwencjonalny poziom maszynowy Cezary Bolek Katedra Informatyki Plan wykładu Składowe architektury komputera Architektura poziomu maszynowego Organizacja jednostki centralnej Konwencjonalny poziom maszynowy Architektura poziomu maszynowego procesora MIPS32 Struktura logiczna Rejestry Instrukcje R-Type Instrukcje I-Type Instrukcje J-Type Tryby adresowania Architektura systemów komputerowych Cezary Bolek 2
Architektura komputera Na architekturę komputera składają się głównie: Model programowy Realizacja sprzętowa Poziom 5 Poziom 4 Poziom języka problemowego Poziom języka asemblera Model programowy operuje na konwencjonalnym poziomie maszynowym Realizacja sprzętowa na poziomach mikroarchitektury i układów logicznych Poziom 3 Poziom 2 Poziom 1 Poziom Poziom systemu operacyjnego Konwencjonalny poziom maszynowy Interpretacja (mikroprogram) lub wykonanie bezpośrednie Poziom mikroarchitektury Sprzęt Poziom układów logicznych Architektura systemów komputerowych Cezary Bolek 3 Architektura poziomu maszynowego Instruction Set Architecture - Poziom architektury listy rozkazów Konwencjonalny poziom maszynowy Model programowy jednostki centralnej (procesora) Z reguły od niego rozpoczyna się projektowanie nowego procesora Na model składa się: Zestaw rejestrów Lista instrukcji Typy danych Dostępne tryby adresowania Zasady obsługi wyjątków i przerwań Procesory oparte na tym samym modelu programowym są ze sobą kompatybilne. Architektura systemów komputerowych Cezary Bolek 4
Organizacja jednostki centralnej Realizacja sprzętowa modelu programowego poziom mikroarchitektury Implementacja komponentów: Rejestry ALU FPU Pamięć podręczna... Połączenia między nimi Przepływ danych ścieŝka danych Architektura systemów komputerowych Cezary Bolek 5 Instruction Set Architecture (ISA) Poziom maszynowy jest odzwierciedleniem punktu widzenia programisty uŝywającego języka maszynowego, bądź twórcy kompilatora generującego kod maszynowy, który musi znać: model pamięci, dostępne rejestry, typy danych, rozkazy stanowią one definicję poziomu maszynowego. Do poziomu ISA nie naleŝą kwestie takie jak: (nie)stosowanie mikroprogramowania, superskalarność, potokowość nie są widoczne bezpośrednio dla twórcy kompilatora są co najwyŝej odczuwalne (wydajność) Architektura systemów komputerowych Cezary Bolek 6
Architektura MIPS32 Architektura systemów komputerowych Cezary Bolek 7 Struktura logiczna procesora MIPS 4 bajty na słowo... Pamięć Do 2 32 bajtów = 2 3 słów... 32 rejestry ogólnego przeznacz. Jednostka arytmetyczno - logiczna EIU ALU MnoŜarka/układ dzielący dla liczb całkowitych $ $1 $2 $31 Gł. jedn. wykonaw. (Main proc) Integer mul/div Hi Lo FPU FP Arith TMU $F $F1 $F2 $F31 BadVaddr Status Cause EPC Jedn. zmiennop. (Coproc 1) Jednostka zarz. pam. i przerw. (Coproc ) 32 rejestry zmiennoprzecinkowe Jednostka arytmetyki zmiennoprzecinkowej Architektura systemów komputerowych Cezary Bolek 8
Rejestry procesora MIPS 32 rejestry ogólnego przeznaczenia General Purpose Registers (GPR) Rejestr zawiera zawsze wartość zero Operacje zapisu do R są ignorowane Rejestry specjalne LO i HI Zawierają wyniki operacji mnoŝenia i dzielenia Rejestr licznika programu PC 32 rejestry zmiennoprzecinkowe Floating Point Registers (FPR) GPRs $ $31 LO HI PC FPRs $F $F31 Mogą być 32- lub 64-bitowe Para rejestrów uŝywana do operacji typu double-precision Architektura systemów komputerowych Cezary Bolek 9 Rejestry GPR 32 Rejestry W asemblerze MIPS korzysta się ze znaku $ przed numerem rejestru $ - rejestr, $1 - rejestr 1,, $31 - rejestr 31 Wszystkie rejestry są 32-bitowe (architektura MIPS32) Rejestr $ zawiera zawsze zero Wartość zapisana do $ jest ignorowana Konwencja programowa Na poziomie asemblera wprowadzono nazwy literowe rejestrów W celu standaryzacji i przenośności programów w asemblerze $8 - $15 określone są jako $t - $t7 Stosowane do wartości tymczasowych $16 - $23 określone są jako $s - $s7 $ = $zero $16 = $s $1 = $at $17 = $s1 $2 = $v $18 = $s2 $3 = $v1 $19 = $s3 $4 = $a $2 = $s4 $5 = $a1 $21 = $s5 $6 = $a2 $22 = $s6 $7 = $a3 $23 = $s7 $8 = $t $24 = $t8 $9 = $t1 $25 = $t9 $1 = $t2 $26 = $k $11 = $t3 $27 = $k1 $12 = $t4 $28 = $gp $13 = $t5 $29 = $sp $14 = $t6 $3 = $fp $15 = $t7 $31 = $ra Architektura systemów komputerowych Cezary Bolek 1
Konwencje stosowania i nazewnictwa rejestrów Asembler odwołuje się do rejestrów za pomocą numeru lub nazwy $sp $fp $ra Łatwiej jest zapamiętać nazwę Asembler przekształca nazwę na numer Nazwa $zero $at $v $v1 $a $a3 $t $t7 $s $s7 $t8 $t9 $k $k1 $gp Rejestr $ $1 $2 $3 $4 $7 $8 $15 $16 $23 $24 $25 $26 $27 $28 $29 $3 $31 Zastosowanie Zawsze (wymuszone sprzętowo) Stosowany przez asembler do rozwijania metainstruk. Rejestry wartości funkcji Argumenty funkcji Rejestry tymczasowe (nie zachowywane) Rejestry dla zmiennych lokalnych (zachowywane) Rejestry tymczasowe (nie zachowywane) Do uŝytku systemu operacyjnego Global pointer (wskaźnik danych statycznych) Stack pointer Frame pointer Return address (wskaźnik stosu) (wskaźnik ramki stosu) (ślad powrotu dla instr. jal) Architektura systemów komputerowych Cezary Bolek 11 Formaty instrukcji Wszystkie instrukcje zajmują dokładnie 32 bity. Trzy rodzaje: Instrukcje rejestrowe - Register (R-Type) Operacje rejestr-rejestr Op: kod operacji specyfikujący format instrukcji Op 6 Rs 5 Rt 5 Rd 5 sa 5 funct 6 Instrukcje z adres. natychmiastowym - Immediate (I-Type) Natychmiastowa stała 16-bitowa jest częścią instrukcji Op 6 Rs 5 Rt 5 immediate 16 Instrukcje skoku - Jump (J-Type) Wykorzystywane przez instrukcje skoków Op 6 immediate 26 Architektura systemów komputerowych Cezary Bolek 12
Kategorie instrukcji Arytmetyka całkowita Instrukcje arytmetyczne, logiczne, przesunięć binarnych Transfer danych Instrukcje zapisu i odczuty pamięci Instrukcje przesłań i konwersji Skoki warunkowe i bezwarunkowe Arytmetyka zmiennoprzecinkowa Instrukcje operujące na rejestrach zmiennoprzecinkowych Pozostałe Instrukcje obsługi sytuacji wyjątkowych Instrukcje zarządzania pamięcią Architektura systemów komputerowych Cezary Bolek 13 Instrukcje R-Type Op 6 Rs 5 Rt 5 Rd 5 sa 5 funct 6 Op: kod operacji (opcode) Określa operację jaka ma być wykonana przez instrukcję Ponadto określa format instrukcji funct: kod funkcji rozszerza opcode Do 2 6 = 64 funkcji moŝe być zdefiniowana dla kaŝdego kodu operac. Opcode ( b ) określa instrukcje R-type Trzy operandy rejestrowe (wspólne dla wszystkich instrukcji) Rs, Rt: pierwszy i drugi operand źródłowy (rejestry) Rd: operand przeznaczenia (rejestr) sa: wielkość przesunięcia dla operacji przesunięć binarnych Architektura systemów komputerowych Cezary Bolek 14
Instrukcje dodawania i odejmowania całkowitego Instrukcja add $s1, $s2, $s3 addu $s1, $s2, $s3 sub $s1, $s2, $s3 subu $s1, $s2, $s3 Działanie $s1 = $s2 + $s3 $s1 = $s2 + $s3 $s1 = $s2 $s3 $s1 = $s2 $s3 op = op = op = op = Format instrukcji R-Type rs = $s2 rs = $s2 rs = $s2 rs = $s2 rt = $s3 rt = $s3 rt = $s3 rt = $s3 rd = $s1 rd = $s1 rd = $s1 rd = $s1 sa = sa = sa = sa = f = x2 f = x21 f = x22 f = x23 add i sub: przepełnienie wywołuje wyjątek arytmetyczny W przypadku przepełnienia, wynik nie jest zapisywany w rejestrze addu i subu: takie samo działanie jak add i sub Ale nie jest zgłaszany wyjątek arytmetyczny Przepełnienie jest ignorowane Przykład: addu $t,$s1,$s2 op $17=$s1 $18=$s2 $8=$t 11 11 1 sa func 11 Architektura systemów komputerowych Cezary Bolek 15 Instrukcje dodawania i odejmowania - przykład NaleŜy wykonać operację (w języku wysokiego poziomu): f = (g+h) (i+j) Kompilator przypisuje zmienne do rejestrów Zakładamy, Ŝe f, g, h, i oraz j znajdują się w rejestrach $s, $s1, $s2, $s3 i $s4 Rejestry saved : $s = $16, $s1 = $17,, $s7 = $23 Realizacja: addu $t, $s1, $s2 # $t = g + h addu $t1, $s3, $s4 # $t1 = i + j subu $s, $t, $t1 # f = (g+h) (i+j) Tymczasowe wyniki pośrednie przechowywane w $t = $8 oraz $t1 = $9 Architektura systemów komputerowych Cezary Bolek 16
Instrukcje operacji binarnych Instrukcja and $s1, $s2, $s3 or $s1, $s2, $s3 xor $s1, $s2, $s3 nor $s1, $s2, $s3 Przykład: Działanie $s1 = $s2 & $s3 $s1 = $s2 $s3 $s1 = $s2 ^ $s3 $s1 = ~($s2 $s3) op = op = op = op = Format instrukcji R-Type rs = $s2 rs = $s2 rs = $s2 rs = $s2 rt = $s3 rt = $s3 rt = $s3 rt = $s3 rd = $s1 rd = $s1 rd = $s1 rd = $s1 sa = sa = sa = sa = f = x24 f = x25 f = x26 f = x27 zakładając: $s1 = xabcd1234 oraz $s2 = xffff and $s,$s1,$s2 or $s,$s1,$s2 xor $s,$s1,$s2 nor $s,$s1,$s2 # $s = xabcd # $s = xffff1234 # $s = x54321234 # $s = xedcb Architektura systemów komputerowych Cezary Bolek 17 Operacje przesunięć binarnych Przesunięcie oznacza przemieszczenie wszystkich bitów rejestru w lewo lub prawo o określoną liczbę pozycji Przesunięcie o stałą liczbę pozycji: sll, srl, sra sll (shift left logically), srl (shift right logically) binarne przesunięcie logiczne sra (shift right arithmetically) - binarne przesunięcie arytmetyczne zachowywany jest znak liczby Wykorzystywane jest 5-bitowe pole sa (shift amount) kodu instrukcji sll srl sra 32-bitowy rejestr......... Architektura systemów komputerowych Cezary Bolek 18
Instrukcje przesunięć binarnych Instrukcja sll $s1,$s2,1 srl $s1,$s2,1 sra $s1, $s2, 1 sllv $s1,$s2,$s3 srlv $s1,$s2,$s3 srav $s1,$s2,$s3 Działanie $s1 = $s2 << 1 $s1 = $s2>>>1 $s1 = $s2 >> 1 $s1 = $s2 << $s3 $s1 = $s2>>>$s3 $s1 = $s2 >> $s3 Format instrukcji R-Type op = rs = rt = $s2 rd = $s1 sa = 1 op = rs = rt = $s2 rd = $s1 sa = 1 op = rs = rt = $s2 rd = $s1 sa = 1 op = rs = $s3 rt = $s2 rd = $s1 sa = op = rs = $s3 rt = $s2 rd = $s1 sa = op = rs = $s3 rt = $s2 rd = $s1 sa = f = f = 2 f = 3 f = 4 f = 6 f = 7 Przesunięcie o zmienną liczbę pozycji: sllv, srlv, srav Analogicznie jak sll, srl, sra, lecz rozmiar przes. w rejestrze Przykład: zakładając $s2 = xabcd1234, $s3 = 16 sll $s1,$s2,8 $s1 = xcd1234 sra $s1,$s2,4 $s1 = $s2>>4 $s1 = xfabcd123 srlv $s1,$s2,$s3 $s1 = $s2<<8 $s1 = $s2>>>$s3 $s1 = xabcd op= rs=$s3=111 rt=$s2=11 rd=$s1=11 sa= f=11 Architektura systemów komputerowych Cezary Bolek 19 MnoŜenie za pomocą operacji przesunięć Instrukcje przesunięcia w lewo (sll) moŝe być traktowana jak mnoŝenie Gdzie mnoŝnik jest potęgą 2 KaŜdą liczbę moŝna przedstawić jako sumę potęg 2 Przykład: pomnoŝyć $s1 przez 36 Rozkład 36 na (4 + 32) i zastosowanie rozdzielności dodawania $s2 = $s1*36 = $s1*(4 + 32) = $s1*4 + $s1*32 sll $t, $s1, 2 ; $t = $s1 * 4 sll $t1, $s1, 5 ; $t1 = $s1 * 32 addu $s2, $t, $t1 ; $s2 = $s1 * 36 Architektura systemów komputerowych Cezary Bolek 2
Operacje mnoŝenia i dzielenia całkowitego Operacje: MnoŜenie ze znakiem: mult $s1,$s2 MnoŜenie bez znaku : multu $s1,$s2 Dzielenie ze znakiem: div $s1,$s2 Dzielenie bez znaku: divu $s1,$s2 MnoŜenie daje wynik 64-bitowy: Rejestr LO = młodsze 32 bity wyniku, HI = starsze 32 bity wyniku Dzielenie LO = 32-bitowy iloraz, HI = 32-bitowa reszta Odczyt wyniku przez przesłania MnoŜenie Dzielenie mflo rd (przesłanie z LO do rd), mfhi rd (przesłanie z HI do rd) mtlo rs (przesłanie do LO z rs), mthi rs (przesłanie do HI z rs) HI $ $1. $31 LO Architektura systemów komputerowych Cezary Bolek 21 Instrukcje mnoŝenia i dzielenia całkowitego Instrukcja mult rs, rt multu rs, rt div rs, rt divu rs, rt mfhi rd mflo rd mthi rs mtlo rs Działanie hi, lo = rs rt hi, lo = rs rt hi, lo = rs / rt hi, lo = rs / rt rd = hi rd = lo hi = rs lo = rs Format instrukcji R-Type op 6 = rs 5 rt 5 x18 op 6 = rs 5 rt 5 x19 op 6 = rs 5 rt 5 x1a op 6 = rs 5 rt 5 x1b op 6 = rd 5 x1 op 6 = rd 5 x12 op 6 = rs 5 x11 op 6 = rs 5 x13 Arytmetyka ze znakiem: mult, div (rs i rt w NKB) LO = młodsze 32 bity wyniku, HI = starsze 32 bity wyniku mnoŝenia LO = 32-bitowy iloraz, HI = 32-bitowa reszta z dzielenia Arytmetyka bez znaku: multu, divu (rs i rt w kodzie U2) Nie występuje przepełnienie arytmetyczne Architektura systemów komputerowych Cezary Bolek 22
Instrukcje I-Type Instrukcje umoŝliwiające uŝycie stałych Operandy rejestrowe i natychmiastowe (immediate) Op 6 Rs 5 Rt 5 immediate 16 Operand natychmiastowy umieszczony bezpośrednio w instrukcji Rs rejestr źródłowy Rt rejestr przeznaczenia (dla R-Type Rd) Przykłady instrukcji ALU I-Type: suma arytm.: addi $s1, $s2, 5 # $s1 = $s2 + 5 suma binarna: ori $s1, $s2, 5 # $s1 = $s2 5 Architektura systemów komputerowych Cezary Bolek 23 Instrukcje ALU I-Type Instrukcja addi $s1, $s2, 1 addiu $s1, $s2, 1 andi $s1, $s2, 1 ori $s1, $s2, 1 xori $s1, $s2, 1 lui $s1, 1 Działanie $s1 = $s2 + 1 $s1 = $s2 + 1 $s1 = $s2 & 1 $s1 = $s2 1 $s1 = $s2 ^ 1 $s1 = 1 << 16 op = x8 op = x9 op = xc op = xd op = xe op = xf Format instrukcji I-Type rs = $s2 rt = $s1 imm 16 = 1 rs = $s2 rt = $s1 imm 16 = 1 rs = $s2 rt = $s1 imm 16 = 1 rs = $s2 rt = $s1 imm 16 = 1 rs = $s2 rt = $s1 imm 16 = 1 rt = $s1 imm 16 = 1 addi: przepełnienie powoduje wyjątek arytmetyczny W przypadku przepełnienia, wynik nie jest zapisywany w rejestrze addiu: jak addi ale prze przepełnienie jest ignorowane Stała natychmiastowa dla addi i addiu traktowana jest jako liczba ze znakiem Nie ma potrzeby wprowadzanie instrukcji subi or subiu Stałe dla andi, ori, xori traktowane jako bez znaku Architektura systemów komputerowych Cezary Bolek 24
Instrukcje ALU I-Type przykłady ZałoŜenie: A, B, C znajdują się w $s, $s1, $s2 A = B+5; C = B 1; addiu $s,$s1,5 addiu $s2,$s1,-1 op=11 rs=$s1=11 rt=$s2=11 imm = -1 = 1111111111111111 A = B&xf; C = B xf; C = 5; A = B; andi ori ori ori $s,$s1,xf $s2,$s1,xf $s2,$zero,5 $s,$s1, Nie ma potrzeby wprowadzania subi, gdyŝ argument natychmiastowy dla addi jest liczbą ze znakiem Rejestr ($zero) ma zawsze wartość zero dlatego moŝna go uŝyć do załadowania wartości 16-bitowej do rejestru Architektura systemów komputerowych Cezary Bolek 25 Instrukcje I-Type stałe 32-bitowe Instrukcje I-Type operują stałymi 16-bitowymi Op 6 Rs 5 Rt 5 immediate 16 Nie ma moŝliwości bezpośredniego uŝycia stałej 32-bitowej dla I-Type Rozmiar instrukcji ustalony na 32 bity Rozwiązanie: zastosowanie dwóch instrukcji do załadowania stałej Aby wykonać operację: $s1=xac5165d9 (32-bitowa stała) lui: load upper immediate lui $s1,xac51 $s1=$17 załadowanie starszych 16 bitów xac51 wyzerowanie młodszych 16 bitów x ori $s1,$s1,x65d9 $s1=$17 xac51 x65d9 Architektura systemów komputerowych Cezary Bolek 26
Instrukcje J-Type Op 6 immediate 26 Format J-type uŝywany jest do reprezentacji instrukcji skoku bezwarunkowego: j label # jump to label... label: 26-bitowa wartość natychmiastowa jest częścią instrukcji Określa adres docelowy skoku Licznik programu (PC) ustawianą jest następująco: Nast. PC = PC 4 immediate 26 Cztery najstarsze bity PC nie pozostawiane bez zmian 2 najmniej znaczące bity równe Architektura systemów komputerowych Cezary Bolek 27 Instrukcje rozgałęzień warunkowych Instrukcje porównania i skoku: beq Rs,Rt,label skok do label jeŝeli (Rs == Rt) bne Rs,Rt,label skok do label jeŝeli (Rs!= Rt) Instrukcje porównania do zera i skoku: Instrukcje często stosowane. bltz Rs,label skok do label jeŝeli (Rs < ) bgtz Rs,label skok do label jeŝeli (Rs > ) blez Rs,label skok do label jeŝeli (Rs <= ) bgez Rs,label skok do label jeŝeli (Rs >= ) Nie ma potrzeby wprowadzania instrukcji beqz oraz bnez Architektura systemów komputerowych Cezary Bolek 28
Instrukcje Set On Less Than (STL) Ustawianie rejestru gdy jeden argument jest mniejszy od drugiego. Wykorzystywane przy realizacji skoków warunkowych slt rd,rs,rt if (rs < rt) rd = 1 else rd = sltu rd,rs,rt jak wyŝej, bez znaku slti rt,rs,im 16 if (rs < im 16 ) rt = 1 else rt = sltiu rt,rs,im 16 jak wyŝej, bez znaku Porównania liczb ze znakiem i bez znaku Mogą dawać róŝne wyniki Zakładając $s = 1 i $s1 = -1 = xffffffff slt $t,$s,$s1 daje w wyniku $t = stlu $t,$s,$s1 daje w wyniku $t = 1 Architektura systemów komputerowych Cezary Bolek 29 Instrukcje skoków i rozgałęzień Instrukcja Działanie Format instrukcji j label skocz do label op 6 = 2 Imm 26 jr rs skocz do adr. w rs op 6 = 8 rs 5 x8 beq rs, rt, label skocz gdy (rs == rt) op 6 = 4 Rs 5 rt 5 imm 16 bne rs, rt, label skocz gdy (rs!= rt) op 6 = 5 rs 5 rt 5 imm 16 blez rs, label skocz gdy (rs<=) op 6 = 6 rs 5 imm 16 bgtz rs, label skocz gdy (rs > ) op 6 = 7 rs 5 imm 16 bltz rs, label skocz gdy (rs < ) op 6 = 1 rs 5 imm 16 bgez rs, label skocz gdy (rs>=) op 6 = 1 rs 5 1 imm 16 Instrukcja Działanie Format instrukcji slt rd, rs, rt rd=(rs<rt?1:) op 6 = rs 5 rt 5 rd 5 x2a sltu rd, rs, rt rd=(rs<rt?1:) op 6 = rs 5 rt 5 rd 5 x2b slti rt, rs, imm 16 rt=(rs<imm?1:) op 6 =1 rs 5 rt 5 imm 16 sltiu rt, rs, imm 16 rt=(rs<imm?1:) op 6 =11 rs 5 rt 5 imm 16 Architektura systemów komputerowych Cezary Bolek 3
Rozgałęzienia ograniczenia MIPS sprzętowo nie realizuje instrukcji relacji: blt, bltu skocz gdy mniejsze (znak/bez znaku) ble, bleu skocz gdy mniejsze równe (znak/bez znaku) bgt, bgtu skocz gdy większe (znak/bez znaku) bge, bgeu skocz gdy większe równe (znak/bez znaku) MoŜna je zrealizować za pomocą dwóch instrukcji: Czynność: Realizacja: Czynność: Realizacja: blt $s,$s1,label slt $at,$s,$s1 bne $at,$zero,label ble $s2,$s3,label slt $at,$s3,$s2 beq $at,$zero,label Architektura systemów komputerowych Cezary Bolek 31 Pseudoinstrukcje Realizowane przez asembler jakby były instrukcjami. W rzeczywistości zastępowane innymi lub rozwijane na ciąg instrukcji kodu maszynowego (makro) Cel: ułatwienie programowania w asemblerze Pseudoinstrukcje move $s1, $s2 not $s1, $s2 li $s1, xabcd li $s1, xabcd1234 sgt $s1, $s2, $s3 blt $s1, $s2, label Konwersja na rzeczywiste instrukcje addu Ss1, $s2, $zero nor $s1, $s2, $s2 ori $s1, $zero, xabcd lui ori $s1, xabcd $s1, $s1, x1234 slt $s1, $s3, $s2 slt $at, $s1, $s2 bne $at, $zero, label Asembler rezerwuje rejestr $at = $1 na własne potrzeby Nazwa $at pochodzi od assembler temporary Architektura systemów komputerowych Cezary Bolek 32
Instrukcje odczytu/zapisu z pamięci Instrukcje przesyłające dane między rejestrami i pamięcią Instrukcje odczytu - Load: Odczyt danych z pamięci i zapis w rejestrze Instrukcje zapisu - Store: Rejestry load store Pamięć Zapis w pamięci danych zawartych w rejestrze W procesorze MIPS do pamięci moŝna się odwoływać tylko za pomocą prostych instrukcji odczyt, zapis (z/do rejestru). Cecha charakterystyczna procesorów RISC. Architektura systemów komputerowych Cezary Bolek 33 Zapis/odczyt słowa (word) Załadowanie Słowa (Word = 4 bajty dla MIPS) lw Rt, imm 16 (Rs) # Rt = MEMORY[Rs+imm 16 ] Zapis słowa sw Rt, imm 16 (Rs) # MEMORY[Rs+imm 16 ] = Rt Stosowane adresowanie: bazowe z przesunięciem Adres pamięci = Rs (baza) + Immediate 16 (przesunięcie) Operand natychmiastowy Immediate 16 jest liczbą ze znakiem (przesunięcie w przód lub tył) Op 6 Rs 5 Rt 5 immediate 16 + Memory Word Base address Architektura systemów komputerowych Cezary Bolek 34
Zapis/odczyt słowa przykład Operacja A[1] = A[2] + 5 (A jest tablicą słów) Zakładamy, Ŝe adres tablicy A znajduje się w rejstrze $s lw $s1, 8($s) # $s1 = A[2] addiu $s2, $s1, 5 # $s2 = A[2] + 5 sw $s2, 4($s) # A[1] = $s2 Indeksy a[2] and a[1] muszą być pomnoŝone przez 4. Rejestry Pamięć...... $s = $16 $s1 = $17 adres tabl. A wartość A[2] lw A[3] A[2] A+12 A+8 $s2 = $18 A[2] + 5... sw A[1] A[] A+4 A... Architektura systemów komputerowych Cezary Bolek 35 Zapis/odczyt Bajtów i półsłów (Halfword) Procesor MIPS operuje następującymi wielkościami danych Byte = 8 bitów, Halfword = 16 bitów, Word = 32 bitów Instrukcje zapisu i odczytu bajtów i półsłów lb = load byte, lbu = load byte unsigned, sb = store byte lh = load half, lhu = load half unsigned, sh = store halfword Ładowanie rozszerza dane pamięci i umieszcza w rejestrze Zapis obcina dane 32-bitowego rejestru by zmieścić w pam. 32-bitowy rejestr s rozszerzenie znakowe s s rozszerzenie zerami s rozszerzenie znakowe s s h rozszerzenie zerami hu b bu Architektura systemów komputerowych Cezary Bolek 36
Instrukcja zapisu i odczytu z pamięci Instrukcja lb rt, imm 16 (rs) lh rt, imm 16 (rs) lw rt, imm 16 (rs) lbu rt, imm 16 (rs) lhu rt, imm 16 (rs) sb rt, imm 16 (rs) sh rt, imm 16 (rs) sw rt, imm 16 (rs) Działanie rt = MEM[rs+imm 16 ] rt = MEM[rs+imm 16 ] rt = MEM[rs+imm 16 ] rt = MEM[rs+imm 16 ] rt = MEM[rs+imm 16 ] MEM[rs+imm 16 ] = rt MEM[rs+imm 16 ] = rt MEM[rs+imm 16 ] = rt Format instrukcji I-Type x2 rs 5 rt 5 imm 16 x21 rs 5 rt 5 imm 16 x23 rs 5 rt 5 imm 16 x24 rs 5 rt 5 imm 16 x25 rs 5 rt 5 imm 16 x28 rs 5 rt 5 imm 16 x29 rs 5 rt 5 imm 16 x2b rs 5 rt 5 imm 16 Stosowane jest adresowanie bazowe z przesunięciem Adres pamięci = Rs (baza) + Immediate 16 (przesunięcie) Dwa przypadki adresowania bazowe z przesunięciem Gdy Rs = $zero = to Adres = Immediate 16 (adres. bezpośrednie) Gdy Immediate 16 = to Adres = Rs (adres. pośrednie rejestrowe) Architektura systemów komputerowych Cezary Bolek 37 Tryby adresowania Tryb adresowania jest to sposób określenia lokalizacji operandu instrukcji Adresowanie natychmiastowe Op 6 Rs 5 Rt 5 immediate 16 Operand jest stałą Adresowanie rejestrowe bezpośrednie Op 6 Rs 5 Rt 5 Rd 5 sa 5 funct 6 Operand znajduje się w rejestrze Register Bazowe z przesunięciem Operand znajduje się w pamięci (load/store) Op 6 Rs 5 Rt 5 immediate 16 Register = Base address Bezpośrednie i pośrednie rejestrowe + Byte Halfword Word Architektura systemów komputerowych Cezary Bolek 38
Tryby adresowania dla instrukcji skoków Adresowanie względem licznika PC Op 6 Rs 5 Rt 5 immediate 16 PC 3 +1 UŜywane przez instr. rozgałęzień (beq, bne, ) Word = Target Instruction Adres instrukcji docelowej PC = PC + 4 (1 + immediate 16 ) PC 3 + immediate 16 + 1 Adresowanie pseudobezpośrednie UŜywane przez instrukcję skoku Op 6 PC 4 immediate 26 : PC 26 Word = Target Instruction Adres instrukcji docelowej PC 4 immediate 26 Architektura systemów komputerowych Cezary Bolek 39 Koniec Architektura systemów komputerowych Cezary Bolek 4