חזרה למבנה מחשבים

מדריך פקודות RISC-V השלם

פירוט מלא של כל משפחות הפקודות והתחביר

מקרא אוגרים: rd יעד (Destination), rs1/rs2 מקור (Source), imm קבוע (Immediate), label שורת קפיצה

אריתמטיקה ולוגיקה

פקודה תחביר מלא 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 בין אוגר למספר קבוע

הזזת ביטים (Shift)

פקודה תחביר מלא 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

השוואה (Set)

פקודה תחביר מלא 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 (ללא סימן)

קריאה מזיכרון (Load)

פקודה תחביר מלא 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 ביט ומרחיב באפסים (מתייחס אליו כחיובי)

כתיבה לזיכרון (Store)

פקודה תחביר מלא 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 לזיכרון

קפיצות מותנות (Branch)

פקודה תחביר מלא 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 (ללא סימן / חיוביים בלבד), קפוץ

קפיצות (Jump)

פקודה תחביר מלא 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

כפל וחילוק (Multiplication & Division)

פקודות אלו מטפלות בפעולות מתמטיות מורכבות יותר, והן דורשות תשומת לב מיוחדת להבדל בין מספרים עם סימן (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 מציאת שארית החילוק של מספרים ללא סימן.

פקודות מדומות נוחות (Pseudoinstructions)

אלו אינן פקודות "אמיתיות" שקיימות בחומרת המעבד, אלא קיצורי דרך למתכנתים. האסמבלר (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).

נקודה צפה (Floating-Point Instructions)

כאשר המעבד תומך בהרחבות מתמטיות למספרים עשרוניים, מתווספות פקודות שמסתיימות ב- .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 המרה של מספר שלם רגיל (מסט האוגרים הרגיל) למספר עשרוני עליו ניתן לעשות חישובים מתקדמים.

מערכת ופסיקות (Exceptions & CSRs)

פקודות הרשאה אלו (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).