MIPS Instructions
Download
Report
Transcript MIPS Instructions
מבוא למחשב
• עד כה למדנו תכן לוגי:
– הפרדה לבקר ומסלול נתונים
– Pipelines
– תקשורת
• ביתרת הקורס נלמד על המחשב כדוגמה אחת מעניינת וחשובה
– מחשב פשוטMIPS :
– ספרPatterson & Hennessy, :
Computer Organization and Design: The Hardware/Software Interface
• לימוד המחשב עומד בפני עצמו ,אבל גם משמש מבוא לקורס
"מבנה מחשבים ספרתיים"
– כאן נתמקד על המחשב כדוגמה לתכן לוגי ,וכאמצעי לבניית מערכת
ספרתית מסובכת
1
December 2013
מה זה מחשב?
• לוגיקה מתוכנתת
• ע"י שינוי הבקר ניתן לבצע בה משימות שונות
• כיצד משנים בקר?
– משתמשים בעיקרון של בקר מבוסס ( ROMזיכרון קריאה
בלבד)
– משתמשים ב RAM-במקום בROM-
– מחליפים את תוכן ה( RAM-כלומר "מתכנתים" אותו)
2
December 2013
ממה מורכב המחשב?
• נהוג לחלק את המחשב לקופסאות:
– מעבד ,זיכרון ,דיסק ,מדפסת וכד'
• החלוקה שלנו:
– מסלול נתונים ( )Datapathהכולל:
• לוגיקה צירופית (יחידות עיבוד)
• רגיסטרים (וגם זיכרון נתונים גדול יותר)
– בקר מתוכנת
• כולל זיכרון גדול ל"פקודות"
• בנוסף ,צריך גם:
– תכנית המפעילה את הבקר
– קומפילציה (הידור) :המרה מתכנית בשפה עילית ( )Cל"שפת המכונה"
3
December 2013
מסלול נתונים כללי
• נשתמש במסלול נתונים שיתאים לכל פעולה שנרצה
לבצע
OPERATION
• נקבע שכל "מילה"
היא 32סיביות ( 4בתים)
ALU
32
32
32
REGISTERS
INPUT
4
OUTPUT
December 2013
מסלול נתונים כללי שני
•
למען הפשטות ,היעילות והמהירות מחלקים את הזיכרון לשניים:
– Register Fileקטן ( 32רגיסטרים) ומהיר
– זיכרון נתונים גדול ,איטי יותר
•
ה ALU-מוזן מהרגיסטרים בלבד
– ניתן להעביר נתונים מהזיכרון לרגיסטר – LOAD
– ניתן להעביר נתונים מרגיסטר לזיכרון STORE -
ALU
Data
Register #
Address
REGISTER FILE
CONTROLLER
Register #
DATA MEMORY
Register #
Data
5
December 2013
) פשוטFSM( בקר
Outputs
Outputs
ROM / RAM
Combinational logic
Next state
Next state
State register
Inputs
December 2013
State register
Inputs
6
מה בתוכנית?
• מבנה מסלול הנתונים במחשב
– מסלול פשוט – מחזור שעון יחיד לכל פעולה
– מסלול חכם – מספר מחזורים משתנה לכל פעולה
– מסלול חכם יותר – עם pipeline
• קבוצת הפקודות במחשב (תוכן הבקר)
– תכנות באסמבלר
– כיצד מתורגמת תכנית ב C-לתכנית בשפת מכונה
• בקרים חכמים יותר
7
December 2013
פקודות מכונה של MIPS
• בשיעורי תרגול נלמד (חומר של פרק 4בספר :)PH
– פקודות מכונה של MIPS
– איך תכנה בשפת Cמתורגמת לפקודות מכונה
– איך לתכנת בשפת המכונה
– איך לבצע סימולציה (הרצה) של תכניות בשפת המכונה
– כיצד נראות הפקודות כאשר הן מגיעות אל הבקר
• בהרצאות נלמד:
– איך בנוי ופועל מסלול הנתונים במחשב (ומדוע)
– איך בנוי ופועל הבקר במחשב (ומדוע)
• בכדי לגשר בין הנושאים ,נתחיל בסקירה קצרה של הפקודות
8
December 2013
פקודות המכונה
• משפט בשפת :C
a=b+c
• מתורגם ע"י קומפיילר לפקודת אסמבלי:
add $s1,$s2,$s3
– $s1,$s2,$s3הם רגיסטרים
– הפקודה צריכה לבצע
>$s1 <$s2> + <$s3
– בדרך כלל נשמיט את הסימון < > שמשמעותו "התוכן של "...
– מתורגם ע"י אסמבלר לפקודת מכונה (מספר בן 32סיביות)
• במחשב יהיו 32רגיסטרים מהירים ,כל שאר הנתונים יהיו
בזיכרון נתונים גדול (ואיטי)
• כל הפעולות האריתמטיות תתבצענה רק בין רגיסטרים
• למרבית הרגיסטרים שימוש ידוע ושמות משמעותיים:
9
December 2013
שמות הרגיסטרים
שם
10
שימוש
מספר
$zero
0
קבוע 0
$at
1
שמור לאסמבלר
$v0-$v1
2-3
תוצאות חישובים
$a0-$a3
4-7
ארגומנטים מועברים לסברוטינות
$t0-$t7
8-15
משתנים זמניים
$s0-$s7
16-23
משתני שפת התכנות העלית
$t8-$t9
24-25
משתנים זמניים
$k0-$k1
26-27
שמור למערכת ההפעלה
$gp
28
Global Pointer
$sp
29
Stack Pointer
$fp
30
- Frame Pointerתיחום אזור משתני סברוטינה
$ra
31
- Return Addressכתובת חזרה מסברוטינה
December 2013
כיצד מיוצגת הפקודה במחשב?
• דוגמה:
add $t0,$s1,$s2
• צורה כללית:
rd=rs+rt : add rd,rs,rt
• יצוג במחשב כמספר בן 32סיביות לפי פורמט קבוע:
– 10001 10010 01000 00000 100000
000000
funct
shamt
rd
rt
rs
op
6 bits
5 bits
5 bits
5 bits
5 bits
6 bits
+
הפורמט נקרא R-type
11
December 2013
פקודות העברת נתונים
• פקודות אחרות טוענות ( )loadנתונים מזיכרון לרגיסטר או
ההיפך—שומרות ( )storeמרגיסטר לזיכרון
• פורמט פקודת אסמבליrt=mem[rs+offset] : lw rt,offset(rs) :
– טוען מילה – 32סיביות
• דוגמהlw $t0, 32($s3) :
• הייצוג במכונה:
– 0000000000100000
100011 10011 01000
immediate value / address offset
rt
rs
op
16 bits
5 bits
5 bits
6 bits
הפורמט נקרא I-typeבגלל הערך ה"מיידי" (קבוע המוכלל בתכנית)
12
December 2013
מבנה הזכרונות (נתונים ,תכנית)
• כתובת בת 32סיביות
• הכתובת מתייחסת לבית
(של 8סיביות)
– מרחב הכתובות = 232בתים
( 4גיגה-בתים) = 230מלים
• גודל מרחב הכתובות הוא
הגודל המכסימלי האפשרי
של הזיכרון
3
2
1
0
3
2
1
0
0
7
6
5
4
4
8
8
12
• בדרך כלל יכיל המחשב
זיכרון קטן בהרבה מהגודל
המכסימלי
13
December 2013
יישור מלים של 32סיביות בזיכרון בעל כתובות בתים
• יישור בכתובת מודולו ( 4טוב!)
• מיקום לא מיושר (גרוע!)
3
2
1
3
0
2
1
0
0
4
MSB
LSB
14
8
0
LSB
MSB
4
8
December 2013
התכנית השמורה בזיכרון
• כל פקודת מכונה היא תבנית בת 32סיביות
• התכנית בנויה מהרבה פקודות השמורות בזיכרון
המחשב
• המחשב מבצע פקודות ברצף סדור ,אחת אחרי השנייה:
– ) Program Counter (PCמכיל את כתובת הזיכרון
בה נמצאת הפקודה הבאה שיש לבצע
– בזמן ביצוע פקודה אחת מוסיפים 4ל PC-כך שיכיל
את כתובת הפקודה הבאה
15
December 2013
The Program Counter
Instruction Memory
0
4
PC = 8
Instruction
8
Next instruction at PC+4
12
16
December 2013
16
פקודות קפיצה
לפעמים יש צורך לקפוץ לפקודה אחרת ולא להמשיך בפקודה הבאה,כזכור
בתור
•
)jump( ) או בלתי מותניתbranch( קפיצה מותנית:סוג שלישי של פקודות
•
כתובC בתכנית בשפת,למשל
•
if (i == j) f = g + h; else f = g – h;
bne $s3, $s4, Label_1
add
j
Label_1:
Label_2:
$s0,$s1,$s2
Label_2
sub $s0,$s1,$s2
…
T
+
# if (i j) Go to Label_1
# “Label_1” : offset from PC to the
# label below
# Always go to Label_2
F
-
F
T
+
December 2013
17
עוד על קפיצות מותנות
:• קפיצה מותנית תלויה בשוויון
bne a,b,Label –
beq a,b,Label –
את זה עושה.a<b • אבל איננה יכולה לבדוק יחס כגון
: bne “ ואחריהset if less than” פקודת
slt
$t0,a,b
bne $t0,$zero,Label
# $t0 = 1 if a<b else 0
•
# branch if a<b
:I-type • פקודות הקפיצה המותנות מיוצגות בפורמט
op
rs
rt
immediate value / address offset
6 bits
5 bits
5 bits
16 bits
December 2013
18
קפיצות בלתי מותנות
• jumpקופצת לכתובת בזיכרון .אבל כתובת כוללת 32
סיביות ,ובפקודה יש מקום רק ל:26-
jump target address
26 bits
op
6 bits
• ננצל את העובדה שהפקודות מיושרות בזיכרון (כל
פקודה מתחילה בכתובת שהיא כפולה של ,)4ולכן
תמיד שתי הסיביות הימניות בכתובת הן ' .'00יש לנו
כבר 28 = 26+2סיביות ,חסרות עוד ...4
• נשתמש בארבע הסיביות העליונות של :PC
– הכתובת לקפיצה היא:
’PC[31:28] || instruction[25:0] || ’00
19
December 2013
מסלול הנתונים מבוסס ALU
• מסלול הנתונים שלנו יכיל יחידה לביצוע פעולות
אריתמטיות ולוגיות ( .)ALUלמשל:
– A+B
– A-B
– )And(A,B
– )Or(A,B
• מבנה אפשרי:
20
December 2013
בסיסיALU
CarryIn
Operation
חיסור
Binvert
a0
Operation
CarryIn
b0
CarryIn
ALU0
Result0
CarryOut
a
0
a1
b1
1
0
ALU1
Result1
CarryOut
Result
a2
b
CarryIn
2
b2
CarryIn
ALU2
Result2
CarryOut
1
CarryOut
a31
b31
December 2013
CarryIn
ALU31
Result31
21
SLT כוללALU
lsb-' בכל הסיביות חוץ מה0' מציבהSLT • פקודת
A-B של החיסורmsb תלוי בסיבית0/1 מוצבlsb-• ב
נוסיף חומרה לזיהוי גלישהmsb-• ב
B in ve rt
O p e ration
C arryIn
B in v e rt
O p e ra tio n
C a rr y In
a
0
a
0
1
R es u lt
b
0
1
2
R e s u lt
1
b
Le ss
3
0
2
1
Set
L es s
O v e rflo w
de tec tion
3
O ve rflow
C a r ry O u t
msb
December 2013
כל השאר
22
Binvert
CarryIn
a0
b0
CarryIn
ALU0
Less
CarryOut
a1
b1
0
CarryIn
ALU1
Less
CarryOut
a2
b2
0
CarryIn
ALU2
Less
CarryOut
Operation
Result0
Result1
Result2
CarryIn
a31
b31
0
December 2013
CarryIn
ALU31
Less
Result31
Set
Overflow
23
... תומך קפיצות מותנותALU
Bnegate
• נוסיף בדיקה
לאפס עבור
beq ,bne
Operation
a0
b0
CarryIn
ALU0
Less
CarryOut
Result0
a1
b1
0
CarryIn
ALU1
Less
CarryOut
Result1
a2
b2
0
CarryIn
ALU2
Less
CarryOut
Result2
a31
b31
0
December 2013
CarryIn
ALU31
Less
Zero
Result31
Set
Overflow
24
ALU-תוספות ל
CarryIn
a0
b0
a1
b1
a2
b2
a3
b3
:• אפשר כמובן להוסיף
CarryIn
Result0--3
ALU0
P0
G0
pi
gi
Carry-lookahead unit
C1
a4
b4
a5
b5
a6
b6
a7
b7
a8
b8
a9
b9
a10
b10
a11
b11
a12
b12
a13
b13
a14
b14
a15
b15
ci + 1
CarryIn
Result4--7
ALU1
P1
G1
לזירוז החיבורCLA –
מחלק,– מכפל
...– ועוד
pi + 1
gi + 1
C2
ci + 2
CarryIn
Result8--11
ALU2
P2
G2
pi + 2
gi + 2
C3
ci + 3
CarryIn
Result12--15
ALU3
P3
G3
pi + 3
gi + 3
C4
ci + 4
CarryOut
December 2013
25