פירוט מלא של כל משפחות הפקודות והתחביר
| פקודה | תחביר מלא | Meaning | תיאור הפעולה / נוסחה |
|---|---|---|---|
| add | add rd, rs1, rs2 | Add | חיבור של שני אוגרים: rd = rs1 + rs2 |
| sub | sub rd, rs1, rs2 | Subtract | חיסור של שני אוגרים: rd = rs1 - rs2 |
| addi | addi rd, rs1, imm | Add Immediate | חיבור אוגר עם מספר קבוע: rd = rs1 + imm |
| and | and rd, rs1, rs2 | AND Logical | פעולת וגם (AND) ברמת הביטים: rd = rs1 & rs2 |
| or | or rd, rs1, rs2 | OR Logical | פעולת או (OR) ברמת הביטים בין האוגרים |
| xor | xor rd, rs1, rs2 | XOR Logical | פעולת או-אקסקלוסיבי (XOR) ברמת הביטים |
| andi | andi rd, rs1, imm | AND Immediate | ביצוע AND בין אוגר למספר קבוע (imm) |
| ori / xori | ori rd, rs1, imm xori rd, rs1, imm | OR/XOR Immediate | ביצוע OR או XOR בין אוגר למספר קבוע |
| פקודה | תחביר מלא | Meaning | תיאור הפעולה / נוסחה |
|---|---|---|---|
| sll | sll rd, rs1, rs2 | Shift Left Logical | הזזה שמאלה של ביטים (שקול להכפלה ב-2n) |
| srl | srl rd, rs1, rs2 | Shift Right Logical | הזזה ימינה של ביטים עם דחיפת אפסים משמאל |
| sra | sra rd, rs1, rs2 | Shift Right Arith. | הזזה ימינה אריתמטית (שומרת על ביט הסימן של המספר) |
|
slli /
srli /
srai
|
slli rd, rs1, imm | Shift Immediate | פעולות הזזה כמו למעלה, אך מספר ההזזות הוא קבוע imm |
| פקודה | תחביר מלא | Meaning | תיאור הפעולה / נוסחה |
|---|---|---|---|
| slt | slt rd, rs1, rs2 | Set Less Than | אם rs1 < rs2 (כמספרים עם סימן), שים 1 ב-rd. אחרת 0 |
| sltu | sltu rd, rs1, rs2 | Set Less Than Unsigned | כמו slt, אבל למספרים חיוביים בלבד (ללא סימן) |
| slti | slti rd, rs1, imm | SLT Immediate | משווה את rs1 למספר הקבוע imm (עם סימן) |
| sltiu | sltiu rd, rs1, imm | SLTU Immediate | משווה את rs1 למספר הקבוע imm (ללא סימן) |
| פקודה | תחביר מלא | Meaning | תיאור הפעולה / נוסחה |
|---|---|---|---|
| lw | lw rd, imm(rs1) | Load Word | קורא מילה שלמה (32 ביט) מהזיכרון בכתובת rs1+imm לאוגר rd |
| lh | lh rd, imm(rs1) | Load Halfword | קורא חצי מילה (16 ביט) ומרחיב ל-32 ביט עם שמירת סימן |
| lb | lb rd, imm(rs1) | Load Byte | קורא בית (8 ביט) ומרחיב ל-32 ביט עם שמירת סימן |
| lhu / lbu | lhu rd, imm(rs1) lbu rd, imm(rs1) | Load Half/Byte Uns. | קורא 16/8 ביט ומרחיב באפסים (מתייחס אליו כחיובי) |
| פקודה | תחביר מלא | Meaning | תיאור הפעולה / נוסחה |
|---|---|---|---|
| sw | sw rs2, imm(rs1) | Store Word | כותב 32 ביטים מ-rs2 לזיכרון בכתובת המחושבת rs1+imm |
| sh | sh rs2, imm(rs1) | Store Halfword | כותב את 16 הביטים התחתונים של rs2 לזיכרון |
| sb | sb rs2, imm(rs1) | Store Byte | כותב את 8 הביטים התחתונים של rs2 לזיכרון |
| פקודה | תחביר מלא | Meaning | תיאור הפעולה / נוסחה |
|---|---|---|---|
| beq | beq rs1, rs2, label | Branch if Equal | אם rs1 == rs2, המעבד קופץ לשורה label |
| bne | bne rs1, rs2, label | Branch if Not Eq. | אם rs1 != rs2, המעבד קופץ לשורה label |
| blt | blt rs1, rs2, label | Branch if Less Than | אם rs1 < rs2 (מספרים עם סימן), קפוץ ל-label |
| bge | bge rs1, rs2, label | Branch Greater/Eq | אם rs1 >= rs2 (מספרים עם סימן), קפוץ ל-label |
| bltu | bltu rs1, rs2, label | Branch Less Uns. | אם rs1 < rs2 (ללא סימן / חיוביים בלבד), קפוץ |
| bgeu | bgeu rs1, rs2, label | Branch Greater/Eq Uns. | אם rs1 >= rs2 (ללא סימן / חיוביים בלבד), קפוץ |
| פקודה | תחביר מלא | Meaning | תיאור הפעולה / נוסחה |
|---|---|---|---|
| jal | jal rd, label | Jump And Link | קופץ לתווית label ושומר את "כתובת החזרה" (PC+4) באוגר rd |
| jalr | jalr rd, imm(rs1) | Jump And Link Reg. | קופץ לכתובת rs1+imm ושומר את כתובת החזרה באוגר rd |
| פקודה | תחביר מלא | Meaning | תיאור הפעולה / נוסחה |
|---|---|---|---|
| lui | lui rd, imm | Load Upper Immediate | מכניס ערך של 20 ביט ל-20 הביטים העליונים של rd ומאפס תחתונים |
| auipc | auipc rd, imm | Add Upper Imm. to PC | מוסיף 20 ביטים עליונים לכתובת השורה הנוכחית (PC) ושומר ב-rd |
פקודות אלו מטפלות בפעולות מתמטיות מורכבות יותר, והן דורשות תשומת לב מיוחדת להבדל בין מספרים עם סימן (Signed) ללא סימן (Unsigned) וגודל האוגרים.
| פקודה | תחביר מלא | Meaning | תיאור הפעולה / נוסחה |
|---|---|---|---|
| mul | mul rd, rs1, rs2 | Multiply | כפל של שני אוגרים. הפקודה שומרת את 32 הביטים התחתונים של תוצאת הכפל ב-rd. |
| mulh | mulh rd, rs1, rs2 | Multiply High | כפל של מספרים עם סימן ושמירת 32 הביטים העליונים של התוצאה (החצי העליון של 64 ביט). |
| mulhu | mulhu rd, rs1, rs2 | Multiply High Unsigned | כפל של מספרים ללא סימן (חיוביים בלבד) ושמירת 32 הביטים העליונים של התוצאה. |
| mulhsu | mulhsu rd, rs1, rs2 | Multiply High Signed-Unsigned | אופרנד ראשון נחשב כמספר עם סימן והשני ללא סימן. שומר את 32 הביטים העליונים. |
| div | div rd, rs1, rs2 | Divide | חילוק של מספרים עם סימן למציאת המנה (Quotient). |
| divu | divu rd, rs1, rs2 | Divide Unsigned | חילוק של מספרים ללא סימן. |
| rem | rem rd, rs1, rs2 | Remainder | מציאת שארית החילוק של מספרים עם סימן. |
| remu | remu rd, rs1, rs2 | Remainder Unsigned | מציאת שארית החילוק של מספרים ללא סימן. |
אלו אינן פקודות "אמיתיות" שקיימות בחומרת המעבד, אלא קיצורי דרך למתכנתים. האסמבלר (Assembler) מתרגם אותן אוטומטית לפקודות RISC-V רגילות שברשימה שלך.
| פקודה | תחביר מלא | Meaning | תיאור הפעולה / נוסחה |
|---|---|---|---|
| j | j label | Jump | קפיצה ללא תנאי לתווית (מתורגם בפועל ל- jal zero, label). |
| jr | jr rs | Jump Register | קפיצה לכתובת השמורה באוגר (מתורגם ל- jalr zero, rs, 0). |
| ret | ret | Return | חזרה מפונקציה למקום ממנו קראו לה (מתורגם ל- jalr zero, ra, 0). |
| call | call label | Call | קריאה לפונקציה מרוחקת (מתורגם לשילוב של auipc ו- jalr). |
| mv | mv rd, rs | Move | העתקת ערך מאוגר לאוגר (מתורגם ל- addi rd, rs, 0). |
| li | li rd, imm | Load Immediate | טעינת מספר קבוע גדול לאוגר (מתורגם לשילוב של lui ו- addi). |
| nop | nop | No Operation | אי-עשייה, המעבד פשוט ממתין מחזור שעון (מתורגם ל- addi zero, zero, 0). |
| not | not rd, rs | Not Logical | היפוך כל הביטים של האוגר (מתורגם ל- xori rd, rs, -1). |
| bgez | bgez rs, label | Branch >= 0 | קפיצה אם האוגר גדול או שווה לאפס (מתורגם ל- bge rs, zero, label). |
כאשר המעבד תומך בהרחבות מתמטיות למספרים עשרוניים, מתווספות פקודות שמסתיימות ב- .s (עבור 32-bit), .d (עבור 64-bit) או .q (עבור 128-bit) המשתמשות בסט אוגרים נפרד (f0 עד f31).
| פקודה | תחביר מלא | Meaning | תיאור הפעולה / נוסחה |
|---|---|---|---|
| flw / fsw | flw ft1, imm(rs1) | Float Load/Store | קריאה או כתיבה של מספר עשרוני מהזיכרון/לזיכרון. |
| fadd.s / fsub.s | fadd.s rd, rs1, rs2 | Float Add / Sub | חיבור או חיסור של מספרים עשרוניים בנקודה צפה. |
| fdiv.s / fsqrt.s | fdiv.s rd, rs1, rs2 | Float Div / Sqrt | חילוק או שורש ריבועי למספרים עשרוניים. |
| fmadd.s | fmadd.s rd, r1, r2, r3 | Fused Multiply-Add | ביצוע חיבור וכפל יחד באותה פקודה (נפוץ מאוד בעיבוד אותות): rd = (r1 * r2) + r3. |
| fcvt.s.w | fcvt.s.w rd, rs | Float Convert | המרה של מספר שלם רגיל (מסט האוגרים הרגיל) למספר עשרוני עליו ניתן לעשות חישובים מתקדמים. |
פקודות הרשאה אלו (Privileged Instructions) מטפלות בשגיאות, התראות חומרה ומצבי מערכת על ידי גישה לאוגרי סטטוס מיוחדים (Control and Status Registers).
| פקודה | תחביר מלא | Meaning | תיאור הפעולה / נוסחה |
|---|---|---|---|
| csrr | csrr rd, csr | CSR Read | קריאת הערך השמור באוגר מערכת (לדוגמה mcause) לאוגר רגיל לבדיקה. |
| csrw | csrw csr, rs | CSR Write | שינוי וכתיבה של ערך מאוגר רגיל אל תוך אוגר מערכת. |
| csrrw | csrrw rd, csr, rs | CSR Read & Write | החלפה: קריאה מאוגר המערכת ל-rd, ובמקביל כתיבת הערך מ-rs לתוכו. |
| mret | mret | Machine Return | פקודה המסמנת סיום טיפול בפסיקה וחזרה לתוכנית הרגילה (לכתובת השמורה באוגר mepc). |