Professional Documents
Culture Documents
cs621 Ex4 5309035144
cs621 Ex4 5309035144
1.Run the program One Step at a Time from start (at line 7) until the program finish execute the
instruction at line 24 (addi $1, $5, -2) and describe what happen to the Registers and Data Segment on
each step.
la $s0, fibs ; Fibs เปนตัวแปรที่เก็บคา Array 20 ชอง,โหลดคา Address เริ่มตน มาเก็บ ในตัวแปล $s0
ซึ่งเปน register เอาไวเกบคา address เริ่มตน ซึ่ง Data Segment เริ่มตอที่ 0x10010000
lw $s5, 0($s5) โดยที่ $s5 เก็บ address ของ memory ไว แลวเอาคาใน memory ที่ $5 เก็บไว นั่นก็คือ 20 มา
เก็บใน $s5 อีกทีหนึ่งเพราะ เพราะฉะนัน $s5 ตอนนี้จึงเก็บ 20
li $s2, 1 เปนคําสั่งสําหรับ load immediate คา 1 เอามาเก็บใน register $s2 ซึ่ง 1 เปนคาเริ่มตน
sw $s2, 0($s0) ก็คือคําสั่ง store word ที่ทําการบันทึกคา $s2 ซึ่งตอนนี้เก็บ 1 อยู ทําการเก็บไวใน memroy
ที่ $s0 + 0 address เพราะฉะนั้น ก็เก็บไน memroy ที่เก็บ $s0 เก็บไวเลย การเก็บคา
F(0) = 1
sw $s2, 4($s0) ก็คือคําสั่ง store word ที่ทําการบันทึกคา $s2 ซึ่งตอนดวย 1 address จะตอง + 4 นั่นก็คือ $s0
เก็บ address อะไรไว จะตอง + 4 แลวนําคา $s2 ก็คือ 1 มาเก็บไว ซึ่งจะเห็นไดวา data seqment ตัวที่ 1 กับ 2 มี
คาเก็บเปน 1 เหมือนกัน บรรทัดนี้ก็เทากับวา
F[1] = F[0] = 1
addi $s1, $s5, -2 เปนคําสั่ง นับจํานวน loop ซึ่ง Register $s5 ซึ่งเก็บขนาดของ Array ลบดวย 2 แลวนําคาที่
ได addi กับตัวแปล $s1
ลักษณะการทํางานของคําสั่ง
ลักษณะการทํางานของคําสั่งแตละ Step
li $t0, 16 เปนคําสั่ง สําหรับเอาคา 16 ไปเก็บในตัวแปล $t0 ซึ่งเปนการเก็บขนาดของ Array
loop: mult $s0, $t1 เปนสวนของการวน loop ตามแนว Column โดยเริม่ จาก เอาคา $t1=16
โดย คูณกับตัวแปล $s0= 0 แลวนําคา $s2
addi $s1, $s1, 1 เพิ่มคา column ขึ้นอีกหนึ่งหลังจากที่วน loop จนหมด column แรก
bne $s1, $t1, loop เช็คเงื่อนไขวาวน loop จนหมดทุก column หรือยัง ถายังก็วน loopกลับไปทําจน
หมด
คําสั่งที่ใชในการรัน
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
17 18 19 20 21 22 23 24 25 26 27 28 ...
ลักษณะการทํางานของคําสั่ง
li $t0, 16 เปนคําสั่ง สําหรับเอาคา 16 ไปเก็บในตัวแปล $t0 ซึ่งเปนการเก็บขนาดของ
Array
loop: mult $s0, $t1 เปนสวนของการวน loop ตามแนว Column โดยเริม่ จาก เอาคา $t1=16
โดย คูณกับตัวแปล $s0= 0 แลวนําคา $s2
addi $s0, $s0, 1 เพิ่มคา Row ขึ้นอีกหนึ่งหลังจากที่วน loop จนหมด Row แรก
bne $s0, $t0, loop เช็คเงื่อนไขวาวน loop จนหมดทุก column หรือยัง ถายังก็วน loopกลับไปทําจน
หมด
ลักษณะการทํางานของคําสั่ง
Data Segment ที่เกิดขึ้นจากการรันคําสั่ง
4. Set a break point (Bkpt) on the instruction at line 24 and run the program. Describe what happen in the
Data Segment when the program stop at the breakpoint. Do the same until the execution finishes.
addi $s1, $s5, -2 คําสั่งบรรทัดนี้ โดยการนับจํานวนลูปแลว ลดขนาด size ลง 2 โดยการเอา-2 ไปลบ $s5
แลวไปเก็บใน Register $s1 ถาเรา break point ณ บรรทัดนี้ ถาเรามาดูที่ Data Segment Value(+0) = 1 ก็คือ
คาที่เอาไปใสที่ตําแหนงที่เรากําหนด แลวที่ตําแหนง Value(+4) = 1 ดวยตามคําสั่งของโปรแกรม
5. Write a MIP assembly program to calculate sum = 1+2+3+4+...+20 and print a string “Hello World :)”
with the output on screen.
lw $s1, 0($s1) โดยที่ $s1 เก็บ address ของ memory ไว แลวเอาคาใน memory ที่ $s1 เก็บไว นั่นก็คือ 20 มา
เก็บ
addi $s1 , $s1 , 1 บวกคาเริ่มตนตั้งแต 1 เขาไปเก็บในตัวแปล $s1 ตัวแปลนี้จะทําหนาที่ เพิ่มจํานวน loop 1
จน ถึง 20 +1
loop: add $s2 , $s2 , $s0 บวกคา เริ่มตนคือ 1 เขากับตัวแปล temp เพื่อสะสมคา
bne $s0 , $s1 , loop ทําหนาที่เช็คเงื่อนไข วาบวกครบ 20 จํานวนหรือยัง ถายังวน ไปบวกใหม ถาครบก็ออก
จากลูป แลวแสดงผล ออกมา