פורסם 2007 ביוני 1818 שנים צריכה להפוך תכנית לשפת MIPS:איך אני מצהירה על משתנים?int i, j, k[10]k[i] = j הכתובת של K שמורה ברגיסטר 5.רגיסטר $S7 = 1תודה
פורסם 2007 ביוני 1818 שנים אני לא נגעתי בזה איזה שנתיים...אבל משהו כמוFour_F: .float 4.0מגדיר את הערך 4.וזה קוד לבאבלסורט. צריך להבין שמערך זה רק פוינטר.## SAL code for bubble sort of integer array# .datan: .word 0 # input numbera: .space 200 # 50 element arrayi: .word # array indexJ: .word # array indexbase: .word a # base address of arrayend: .word # address of last array elementflag: .word 0 # completion flagprompt: .asciiz "Enter integers to be sorted, one per line. End with 0\n"result: .asciiz "Sorted list:\n"nl: .byte '\n' .text__start: puts prompt # prompt for input la base, a # initialize base, end move end, basegetin: get n # input numbers > 0 blez n, sort move M[end], n # store input in array add end, end, 4 # increment ending address b getinsort: la i, a # bubble sort outer loop add J, i, 4 move flag, 0 # clear swap flagloop: ble M[i], M[J], noswap # if elements i & J out of order, swap move n, M[i] move M[i], M[J] move M[J], n move flag, 1 # set swap flagnoswap: add i, i, 4 # increment i add J, J, 4 # increment J blt J, end, loop # test for end of array bgtz flag, sort # if a swap occurred, continue sort put '\n' puts result la i, aprint: put M[i] # print sorted array put '\n' add i, i, 4 blt i, end, print done
פורסם 2007 ביוני 1818 שנים צריכה להפוך תכנית לשפת MIPS:איך אני מצהירה על משתנים?int i, j, k[10]k[i] = j הכתובת של K שמורה ברגיסטר 5.רגיסטר $S7 = 1תודהקודם כל' date=' מיפס זה שם של מחשב. זה כמו להגיד "שפת פנטיום".במיפס, כמו בכל אסמבלי אחר, אין משתנים, אלא יש זיכרון ויש רגיסטרים.את צריכה לדעת באיזה כתובת נמצא המערך K, ובאיזו כתובת נמצא I ובאיזו כתובת נמצא J.לא הבנתי מה זה $1, לכן אענה בכלליות.lw $3, 0[bla1]lw $4, 0[bla2]add $2, $5, $3sw $4, 0[$2]מה שעשיתי כאן בעצם זה:1) לטעון את הערך של I לתוך רגיסטר 3(BLA1 צריך להיות שם של רגיסטר שמכיל את הכתובת של I).2) לטעון את הערך של J לתוך רגיסטר 4.3) לסכום את $5 ו $3 כדי לקבל את הכתובת בזיכרון של k[ i '].4) להכניס לזיכרון בכתובת של k[ i] את הערך שהכנסתי מקודם ל$4(J בעצם).
פורסם 2007 ביוני 1918 שנים מחבר אם אני קובעת איזה משתנה יהיה בכל רגיסטר? אז- איך אני מכניסה את המשתנים לתוך רגיסטרים?איך אני מצהירה על משתנה מסוג INT?לדוגמא:int i=0, j=0, k[10];איך אני מכניסה את K לרגיסטר S5?I לרגיסטר S0?J לרגיסטר S1?
פורסם 2007 ביוני 1918 שנים 1) משתנה זה בסך הכל כתובת בזיכרון. משתנה לא מיוצג ע"י רגיסטר, אלא ע"H כתובת מסויימת. הכתובת תלוייה בכל התוכנית, ולא ניתן לדעת את הכתובת ישירות. אם אלו משתנים גלובאלים, אז זה תלוי במשתנים שמוגדרים לפניהם. אז אלה משתנים שמוגדרים על הSTACK(בתוך פונקציה מסויימת, או בכל בלוק של קוד) זה תלוי בפונקציות שקראת להן לפני ההצהרה על המשתנים, ובמשתנים שהגדרת לפני.2) כשאת אומרת להכניס משתנים לתוך רגיסטרים, את מתכוונת לכתובת שלהם, או לערך.3) לא מצהירים על משתנה. הקומפיילר אחראי ליצור כתובת(או OFFSET) למשתנה. המשתנה שמוגדר אחריו יהייה בכתובת שגדולה ב- 4 ממנו(בגלל שהגודל של INT הוא 4 בדרך כלל). הקומפיילר גם יודע איזה סוג זה כל משתנה, ולכן הוא יודע לתת את הערכים שלו לרגיסטרים המתאימים(אם זה FLOAT למשל, אז יש רגיסטרים אחרים שמשתמשים בהם).אם קיבלת שאלה מסויימת, תרשמי או תסרקי את כולה כדי שנוכל לעזור לך.
פורסם 2007 ביוני 2018 שנים מחבר שאלה ראשונה:.dataiInt: .word 0str1: .asciiz "i is " # str2: .asciiz "\n".textmain:lw $s0, iIntli $s6, 1li $s7, 10 Loop: slt $s6, $s0, $s7beq $s6, $zero, Endli $v0,4 la $a0,str1syscall lw $s0, iInt li $v0, 1 move $a0, $s0 syscall li $v0,4 la $a0,str3syscall addi $s0, $s0, 1j LoopEnd:li $v0, 10 syscallאני עברת בלולאה מ0-9 ורוצה בכל פעם לרשום את הערך של המונה, אבל נוצרת לי לולאה אינסופית (המונה לא מתקדם...)
פורסם 2007 ביוני 2018 שנים מחבר תודה, הסתדרתי.<הבעיה היתה בהדפסת המספר.>שאלה נוספת:בתוך הלולאה אני רוצה לבצע את הפקודה: j = i*3כיצד??הרי פקודת MULT היא: mult $2, $3
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.