Announcement
Collapse
No announcement yet.
Giúp giải dùm bài kiến trúc máy tinh đơn giản
Collapse
X
-
Originally posted by 12520816 View PostMình ko hiểu lắm phần câu 2b
Assume that the variables f, g, h, i, and
j are assigned to registers $s0, $s1, $s2, $s3, and $s4, respectively. Assume that the base address of
the arrays A and B are in registers $s6 and $s7, respectively
Câu 2 b là câu mảng trong mảng. bạn tưởng tượng trong MIPS thì lấy 1 phần tử trong mảng sẽ nhân chỉ số của phần tử đó với 4 rồi cộng thêm địa chỉ nền của mảng đó. Ví dụ: f=A[4] => lw $s0,16($s6).
Trong câu b bạn lưu B[8] vào thanh ghi tạm bất kỳ, sau đó nhân thêm 4 rồi cộng với địa chỉ nền của mảng A là được. Nhân thêm 4 tương đương với dịch trái (sll) 2 bit.
Câu b giải như sau:
lw $t0,32($s7) # lấy phần tử thứ 8 từ mảng B
sll $t0,$t0,2 # nhân địa chỉ thanh ghi $t0 cho 4
add $t0,$t0,$s6 #cộng địa chỉ thanh ghi $t0 cho thanh ghi $s6
lw $t1,0($t0) #lưu giá trị của phần tử A[B[8]] cho thanh ghi $t1 (thanh ghi tạm )
sub $s0,$s1,$t1 #trừ theo đề cho f=g-A[B[8]]
Leave a comment:
-
Originally posted by 10520413 View Postbài 2/
a)
lw $t0, 16($s7)
add $t0, $t0, $s2
add $s0, $t0, $s1
=> 3 assemplu instructions, 5 registers ($t0, $s0,1,2,7)
b)
lw $t0, 32($s7)
sll $t0, $t0, 2
add $t0, $t0, $s7
lw $t0, 0($t0)
sll $t0, $t0, 2
add $t0, $t0, $s6
lw $t0, 0($t0)
sub $s0, $s1, $t0
=> 8 assemply instructions, 5 registers ($t0, $s0,1,6,7)
bài 3/ phần rút gọn câu 5 bó tay, vậy là quá gọn rồi
a)
f=f+g+h+i+j
b)
f=A[1]
:salute:Last edited by 12520816; 17-10-2013, 20:16.
Leave a comment:
-
cho mình hỏi cấu trúc đề thi giưã kì kiến trúc máy tính như thế nào vậy ,mọi người ?
Leave a comment:
-
**Thắc mắc bài của bạn này:
bài 2/
a)
lw $t0, 16($s7)
add $t0, $t0, $s2
add $s0, $t0, $s1
=> 3 assemplu instructions, 5 registers ($t0, $s0,1,2,7)
Với lại cái đề bài nó không cho biết khởi tạo mảng B bao nhiêu giá trị, chỉ biết là lấy giá trị tại vị trí 4 trong mảng.
Trong asm nếu bạn khai báo thì compiler sẽ chỉ định một vùng cho bạn lưu trử mảng đó, còn nếu khai báo và khởi tạo giá trị thì sẽ khởi tạo một vùng đồng thời đưa các giá trị khởi tạo vào và lúc này stack pointer sẽ nằm tại đáy của stack rồi. Nếu mảng B khởi tạo 10 giá trị thì sao??? Lúc này stack pointer sẽ nằm tại đáy của stack. Vậy nếu muốn lấy vị trí 4 thì bạn phải lùi con trỏ này về tại vị trí 4 và đọc giá trị tại đó.
Nếu chỉ khai báo mà chưa khởi tạo thì con trỏ tại vị trí 0 nếu muốn đọc giá trị tại vị trí 4 bạn phải đưa con trỏ lên vị trí đó và đọc giá trị ra.
Base address giống như là một cái mốc, là một ví trí cố định gúp bạn có thể tính các địa chỉ khác dựa vào nó
thân!
Leave a comment:
-
bài 2/
a)
lw $t0, 16($s7)
add $t0, $t0, $s2
add $s0, $t0, $s1
=> 3 assemplu instructions, 5 registers ($t0, $s0,1,2,7)
b)
lw $t0, 32($s7)
sll $t0, $t0, 2
add $t0, $t0, $s7
lw $t0, 0($t0)
sll $t0, $t0, 2
add $t0, $t0, $s6
lw $t0, 0($t0)
sub $s0, $s1, $t0
=> 8 assemply instructions, 5 registers ($t0, $s0,1,6,7)
bài 3/ phần rút gọn câu 5 bó tay, vậy là quá gọn rồi
a)
f=f+g+h+i+j
b)
f=A[1]
:salute:
Leave a comment:
-
Có thể giúp a giải bài này nữa đc không, anh ngu môn này lắm rồi :
Bài 2:
The following problems deal with translating from C to MIPS. Assume that the variables f, g, h, i, and
j are assigned to registers $s0, $s1, $s2, $s3, and $s4, respectively. Assume that the base address of
the arrays A and B are in registers $s6 and $s7, respectively. Assume that the elements of the arrays A
and B are 4-byte words:
a. f = g + h + B[4]
b. f = g – A[B[8]]
1. For the C statements above, what is the corresponding MIPS assembly code?
2. For the C statements above, how many MIPS assembly instructions are needed to perform the C
statement?
3. For the C statements above, how many registers are needed to carry out the C statement using MIPS
assembly code?
The following problems deal with translating from MIPS to C. Assume that the variables f, g, h, i, and
j are assigned to registers $s0, $s1, $s2, $s3, and $s4, respectively. Assume that the base address of
the arrays A and B are in registers $s6 and $s7, respectively.
a.
add $s0, $s0, $s1
add $s0, $s0, $s2
add $s0, $s0, $s3
add $s0, $s0, $s4
b.
lw $s0, 4($s6)
4. For the MIPS assembly instructions above, what is the corresponding C statement?
5. For the MIPS assembly instructions above, rewrite the assembly code to minimize the number if
MIPS instructions (if possible) needed to carry out the same function.
6. How many registers are needed to carry out the MIPS assembly as written above? If you could
rewrite the code above, what is the minimal number of registers needed?
Leave a comment:
-
a)
add f,g,h
add f,f,i
add f,f,j
=> 3 assemply instructions
f= 14
b)
addi f, h, 5
add f, f, g
=> 2 assemply instructions
f= 10
Chúc anh thi tốt!
Leave a comment:
Leave a comment: