נתון הקוד הבא:
addi t0,x0,0x100
addi t1,x0,0x200
beq t0,t1,FIRST
beq t0,t0,SECOND
FIRST:
addi t2,x0, 0x1
j END
SECOND:
addi t2,x0,0x2
END:
מה יהיה התוכן של רגיסטר בסיום ריצת הקוד?
תחילה, אנו לוקחים את הערך בהקסה ומוסיפים אותו לערך ושמים זאת ברגיסטר .
לאחר משכן, אנו לוקחים את הערך בהקסה ומוסיפים אותו לערך ושמים זאת ברגיסטר .
כעת אנו בודקים האם . מכיוון שהם שונים, אנחנו לא קופצים ל-.
כעת, אנו בודקים האם שזה כמובן נכון. לכן, אנו קופצים ל-.
אנחנו מציבים ברגיסטר את הערך מרגיסטר בחיבור לערך בהקסה.
לכן:
בסוף הריצה.
סטודנט רוצה לקרוא מכתובת בזיכרון לתוך רגיסטר . אילו מהקודים הבאים יאפשרו זאת?
a. lw t0,0x2000
b.
addi t0,x0,0x2000
lw t0,0(t1)
c. lw t0,0(0x2000)
d.
addi t1,x0,0x2000
lw t0,0(t1)
אנו יודעים כי אנו רוצים לקרוא אל ולא לשנות את ערכו. לכן נוחל לפסול את תשובה שכן שם אנו משנים את ערכו של .
קריאה מזיכרון היא רק דרך פוינטרים ברגיסטרים ולא דרך כתובות ולכן התשובות נפסלות.
נשארנו רק עם תשובה ולכן היא הנכונה!
(למה אפשר לעשות את זה ולא את אין לי שמץ)