מבנה המחשב תרגיל 6

bennyassembly, mips assembly, מבנה המחשבLeave a Comment

תרגיל 1 מימוש אלגוריתם BOOTH שנלמד בהרצאה.
נדרש לממש את אלגוריתם BOOTH לכפל מספרים בינריים שמיוצגים בשיטת המשלים ל .2 –
נתוני הכופל והנכפל יוכנסו ע"י המשתמש ותוצאת הכפל תוצג על גבי המסך.
הנח כי ערך הנתונים הינם בין 128 -ל – 127) +כלומר מספיק 8 סיביות עבור הנתון) .
תרגיל 2 כפל מטריצות.
. n x k : הינו B מטריצה וממד m x n הינו A מטריצה ממד . A x B מטריצות כפל לבצע נדרש
הכנס את ממדי המטריצות ובמידה והממדים תקינים ( כלומר מספר העמודות ב- A הינו כמספר
השורות ב- B (יש להכניס נתונים כפי שיוסבר בהמשך. אחרת הודע למשתמש כי ממדים אינם
תקינים ויש להכניס ממדים תקינים.
הכנסת נתונים: תיעשה ע"י המשתמש והקלט יוצג בצורת מטריצה .
למשל הכנסת נתוני מטריצה A : נכניס שורה ראשונה של n נתונים ( זה n העמודות בשורה
ראשונה) , לאחר מכן n נתונים של שורה שניה וכו' עד n נתונים של שורה m.
הפלט גם יוצג בצורת מטריצה: בדוגמא שלנו ממד של מריצת התוצאה הינו: k x m.

 

 

פיתרון  שאלה 1 



.data
.asciiz "ERROR. op code is worng!\n"
Start: .word 0x307777FF  0x74300011 0x48FFFFFF 0x31000000 0x310000A9 0x489CF7AF 0
Final: 
.text 

la $t1 Start  # the array
add $t0 $zero $zero  # counter
add $t2 $zero $zero

#  Loop
Loop:
lw $t1 Start ($t0)
beq $t1 $zero End
sra $t2 $t1 24
beq $t2 0x30 op_30 # go to label for case : 30
beq $t2 0x31 op_31 # go to label for case : 31
beq $t2 0x48 op_48 # go to label for case : 48
beq $t2 0x74 op_74 # go to label for case : 74
Loop2: addi $t0 $t0 4 # promote
j Loop

# OpCode : 30
op_30:
andi $t3 $t1 0xFFFFFF3C
sw $t3 Final ($t0)
j Loop2

# OpCode : 31
op_31:
ori $t3 $t1 0x000000C3
sw $t3 Final ($t0)
j Loop2

# OpCode : 48
op_48:
xori $t3 $t1 0x0000FF00
sw $t3 Final ($t0)
j Loop2

# OpCode : 74
op_74:
andi $t4 $t1 0x00F00000
sra $t4 $t4 20
sllv $t3 $t1 $t4
sw $t3 Final ($t0)
j Loop2

# end of program
End:
sw $zero Final ($t0)
add $t0 $zero $zero
# print the instructions:
p_loop:
lw $t1 Final ($t0)
beq $t1 $zero exit
addi $v0 $zero 1
add $a0 $t1 $zero
syscall 
addi $v0 $zero 11
addi $a0 $zero 32
syscall 
addi $t0 $t0 4
j p_loop

exit:

פיתרון  שאלה 2 


.data
mess: 0x40545454 0xdce4c2ae 0x74cedcd2 0xcad0a840
 0xd240cae4 0x40c240e6 0xeae4d2ec 0xdcd240e6
 0xeadef240 0xdec640e4 0xe8eae0da 0x7640e4ca
 0x5440525a 0x00145454
.space 0x40
msg: .asciiz "this function seems OK.\n"
.text
li $s2 3
mainlp: beq $s2 $zero exit
la $a0 msg
jal func
subi $s2 $s2 1
nop
nop
nop
nop
j mainlp
exit: li $v0 10
syscall
func: la $t4 mess
addi $a0 $t4 0x40
lbu $t5 0($t4)
getlp: beq $t5 $zero tweakf
srl $t5 $t5 1
sb $t5 0x40($t4)
addi $t4 $t4 1
lbu $t5 0($t4)
j getlp
tweakf:
la $t0 always
li $t1 0x03ffffff
and $t1 $t1 $t0
srl $t1 $t1 2
li $t2 0x08000000
or $t2 $t2 $t1
sw $t2 func
li $v0 4
syscall
la $t4 mess
lbu $t5 0($t4)
clrlp: beq $t5 $zero always
sb $zero 0x40($t4)
addi $t4 $t4 1
lbu $t5 0($t4)
j clrlp
always:
li $v0 4
syscall
jr $ra


כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *