Bài Tập Assembly Kiến Trúc Máy Tính Uit Có đáp án - Tài Liệu Text

Tải bản đầy đủ (.pdf) (12 trang)
  1. Trang chủ
  2. >>
  3. Công Nghệ Thông Tin
  4. >>
  5. Phần cứng
Bài tập Assembly kiến trúc máy tính uit có đáp án

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.74 MB, 12 trang )

Khoa Kỹ thuật Máy tính – Đại học Công Nghệ Thông Tin2015Bài Tập Chương 2---oOo--Các bài tập chương này được trích dẫn và dịch lại từ:Computer Organization and Design: The Hardware/Software Interface,Patterson, D. A., and J. L. Hennessy, Morgan Kaufman, Revised FourthEdition, 2011.---------------------Lưu ý: Các mảng sử dụng trong chương này đều là mảng mà mỗi phần tử chứa 1word/từ nhớ, mỗi từ nhớ chứa 4 bytes.---------------------Bài 1.Phần 1.a)f = g + h + i + j;b)f = g + (h + 5);g, h, i, j là những số nguyên 32-bit1.1 Hãy tìm mã hợp ngữ MIPS tương đương các lệnh C trên.1.2 Có bao nhiêu lệnh MIPS để hiện thực các lệnh C trên.1.3 Nếu các biên f, g, h, i và j có giá trị tương ứng là 1, 2, 3, 4, 5 thì giá trị của f là baonhiêu?Phần 2.a.add f, g, hb.addi f, f, 1add f, g, h1.4 Tìm lệnh C tương đương với các lệnh hợp ngữ MIPS trên.1.5 Nếu các giá trị f, g, h và i có giá trị tương ứng 1, 2, 3 và 4 thì giá trị cuối cùng của f làbao nhiêu?Trả lời:Phần 1.1.1a.add f, g, hadd f, f, iadd f, f, jb.Dịch: Nguyễn Hữu Nhân & Trần Thị Như NguyệtTrang 1Khoa Kỹ thuật Máy tính – Đại học Công Nghệ Thông Tin2015addi f, h, 5add f, f, g1.2a. 3b. 21.3a. 14b. 10Phần 2.1.4a. f = g + hb.addi f, f, 1  f = f + 1add f, g, h  f = g + h Cuối cùng f = g + h1.5a. 5b. 5Bài 2.Phần 1.a. f = g + h + B[4];b. f = g – A[B[4]];f, g, h, i, j được lưu ở các thanh ghi $s0, $s1, $s2, $s3, $s4Địa chỉ cơ sở/nền (base address) của mảng A và B được lưu trong các thanh ghi $s6, $s7.Mỗi phần2.1 Hãy chuyển các câu lệnh C bên trên sang dạng hợp ngữ MIPS.2.2 Cần bao nhiêu lệnh hợp ngữ MIPS để có chức năng tương đương với từng câu lệnhC?2.3 Có bao nhiêu thanh ghi khác nhau được dùng cho từng câu lệnh C bên trên.Phần 2.a.add $s0, $s0, $s1add $s0, $s0, $s2add $s0, $s0, $s3add $s0, $s0, $s4b.lw $s0, 4($s6)2.4 Hãy tìm câu lệnh C tương đương với các câu lệnh hợp ngữ MIPS bên trên.2.5 Hãy thử rút gọn số lượng lệnh hợp ngữ MIPS trên nếu có thể.2.6 Có bao nhiêu thanh ghi được sử dụng trong đoạn hợp ngữ trên? Nếu ta có thể rút gọnsố lệnh thì ta cần bao nhiêu thanh ghi?Dịch: Nguyễn Hữu Nhân & Trần Thị Như NguyệtTrang 2Khoa Kỹ thuật Máy tính – Đại học Công Nghệ Thông Tin2015Trả lời:2.1Lệnh hợp ngữ MIPS tương ứng:a) f = g + h + B[4];lw $s0, 16($s7)# Bởi vì MIPS định địa chỉ theo byte và một word chứa 4 byteadd $s0, $s0, $s1add $s0, $s0, $s2b) f = g – A[B[4]];lw $t0, 16($s7)sll $t0, $t0, 2add $t0, $t0, $s6lw $s0, 0($t0)sub $s0, $s1, $s0# $t0=B[4]# $t0=B[4] * 4# $t0=&A[B[4]]2.2a) 3b) 52.3a) 4b) 52.4Tìm lệnh C tương đương với chuỗi lệnh hợp ngữ:add $s0, $s0, $s1  f=f+hadd $s0, $s0, $s2  f=f+h+gadd $s0, $s0, $s3  f=f+h+g+iadd $s0, $s0, $s4  f=f+h+g+i+ja)f = f+g+h+i+j;b)f = A[1];(lw $s0, 4($s6): Lệnh này đọc dữ liệu của từ nhớ cách địa chỉ nền đang chứatrong thanh ghi $s6 4 byte. Nếu xem nội dung thanh ghi $s6 là địa chỉ nền của mảng A,lệnh này đọc nội dung phần tử thứ 2 của mảng, tức phần tử A[1])2.5a)Không đổib)Không đổi2.6a) Có 5 thanh ghi (không thể rút gọn nhỏ hơn)b) Có 2 thanh ghi 2 (không thể rút gọn nhỏ hơn)Bài 3.a. f = -g + h + B[1];b. f = A[B[g] + 1];f, g, h, i, j được lưu tại các thanh ghi $s0, $s1, $s2, $s3, $s4Địa chỉ cơ sở của hai chuỗi A và B được lưu trong các thanh ghi $s6, $s73.1 Hãy tìm các lệnh hợp ngữ MIPS tương đương với các câu lệnh C bên trên.Dịch: Nguyễn Hữu Nhân & Trần Thị Như NguyệtTrang 3Khoa Kỹ thuật Máy tính – Đại học Công Nghệ Thông Tin20153.2 Cần bao nhiêu lệnh hợp ngữ MIPS để có chức năng tương đương với từng câu lệnhC?3.3 Có bao nhiêu thanh ghi khác nhau được dùng cho từng câu lệnh C bên trên.Trả lời:3.1a.f = -g + h + B[1];lw $s0, 4($s7)sub $s0, $s0, $s1add $s0, $s0, $s2b.f = A[B[g] + 1];# tìm B[g]sll $t0, $s1, 2add $t0, $t0, $s7lw $t0, 0($t0)# tính B[g] + 1addi $t0, $t0, 1# tìm A[B[g] + 1]sll $t0, $t0, 2add $t0, $t0, $s6lw $s0, 0($t0)# $t0 = B[g]# $t0 = B[g] + 1 Có thể viết gọn hơn với ít lệnh MIPS hơn không? Có thể sử dụng ít thanh ghi hơnkhông?Bài 4.Các câu hỏi dưới đây liên quan đến mở rộng dấu và tràn.Thanh ghi $s0 và $s1 lưu các giá trị như bảng bên dưới. Hãy trả lời các câu hỏi liên quanđến lệnh hợp ngữ MIPS bên dưới và tính toán các kết quả.a. $s0 = 0x70000000; $s1 = 0x0FFFFFFFb. $s0 = 0x40000000; $s1 = 0x40000000Ghi chú: Khi 0x trước một giá trị thì giá trị đó đang biểu diễn trong hệ 164.1Tính kết quả của $t0 sau khi thực hiện câu lệnh: add $t0, $s0, $s1Kết quả trong thanh ghi $t0 đúng như mong muốn của phép toán chưa? Có xảy ra trànkhông?4.2Tính kết quả của $t0 sau khi thực hiện câu lệnh: sub $t0, $s0, $s1Kết quả trong thanh ghi $t0 đúng như mong muốn của phép toán chưa? Có xảy ra trànkhông?4.3Tính kết quả của $t0 sau khi chạy chuỗi lệnh:Dịch: Nguyễn Hữu Nhân & Trần Thị Như NguyệtTrang 4Khoa Kỹ thuật Máy tính – Đại học Công Nghệ Thông Tin2015add $t0, $s0, $s1add $t0, $t0, $s0Kết quả trong thanh ghi $t0 đúng như mong muốn của phép toán chưa? Có xảy ra trànkhông?Trả lời:4.1a.$s0 = 0x70000000;$s1 = 0x0FFFFFFF;add $t0, $s0, $s1Sau khi thực hiện câu lệnh trên, $t0 = 0x7FFFFFFFKết quả này đúng như mong muốn, không tràn.b.$s0 = 0x40000000;$s1 = 0x40000000;add $t0, $s0, $s1Sau khi thực hiện câu lệnh trên, $t0 = 0x80000000Phép toán add được thực hiện trên số có dấu (dùng bù hai). Phép cộng trên thực hiệncộng hai số dương, nhưng kết quả 0x80000000 rõ ràng là số âm  phép toàn bị tràn4.2sub $t0, $s0, $s1a) $t0 = 0x60000001, không trànb) $t0 = 0, không tràn.4.3add $t0, $s0, $s1add $t0, $t0, $s0a) $t0 = 0x70000000 + (0x70000000 + 0x0FFFFFFF) = 0xEFFFFFFFTràn, bởi vì cộng hai số dương nhưng bit dấu của kết quả lại là âm, không đúng.b) $t0 = 0x40000000 + (0x40000000 + 0x40000000) = 0xC0000000Tràn, bởi vì cộng hai số dương nhưng bit dấu của kết quả lại là âm, không đúng.Bài 5.Chuyển các mã máy sau sang dạng hợp ngữ MIPS5.1 & 5.2. Từ các giá trị binary ở bảng trên, hãy xác định chuỗi nhị phân thể hiện là lệnhgì?Xác định các lệnh trên là thuộc kiểu lệnh gì (I-type, R-type, J-type).Dịch: Nguyễn Hữu Nhân & Trần Thị Như NguyệtTrang 5Khoa Kỹ thuật Máy tính – Đại học Công Nghệ Thông Tin2015Chú ý: Tham khảo “MIPS reference data” (trang 2, sách tham khảo) để dò tìm opcodecủa các lệnh.5.3Nếu chuỗi nhị phân trên chỉ là dữ liệu đơn thuần. Hãy chuyển chúng sang dạng mã HEX.5.4 & 5.5Hãy dịch các lệnh sau sang dạng mã máya) add $t0, $t0, $zerob) lw $t1, 4($s3)5.6 Hãy trình bày dưới dạng mã HEX của các trường opcode, Rs và Rt của các lệnh trên.Đối với các lệnh kiểu R, hãy trình bày dưới dạng mã HEX của các trường Rd và funct.Đối với các lệnh kiểu I, hãy trình bày dưới dạng mã HEX trường trực tiếp (immediatefield).Answer:5.1 & 5.2a) op = 101011(2) = 2B(hex)  Lệnh sw (tra bảng “MIPS reference data”, trang 2,sách tham khảo) dạng I-typers = 10000(2) = 16(10): vậy địa chỉ nền được lưu trong thanh ghi thứ 16, chính làthanh ghi $s0.rt = 01011(2) = 11 (10): thanh ghi thứ 11, chính là thanh ghi $t3.Immediate(16 bit) = 100(2) = 4(10) Lệnh assembly này là: sw $t3, 4($s0)23(hex)b) op = 100011(2) = 23(10)  Lệnh lw I-type instructionrs = 01000(2) = 8(10): thanh ghi thứ 8, là thanh ghi $t0rt = 01000(2) = 8 (10): thanh ghi thứ 8, là thanh ghi $t0Immediate (16 bit) = 1000000(2) = 64(10)=>Lệnh assembly: lw $t0, 64($t0)5.3a) 0xAE0B0004b) 0x8D0800405.4 & 5.5a) add $t0, $t0, $zeroadd: R-type formatopcode = 0hexrs = 8ten($t0 là thanh ghi thứ 8/ $t0 là thanh ghi có chỉ số 8)Dịch: Nguyễn Hữu Nhân & Trần Thị Như NguyệtTrang 6Khoa Kỹ thuật Máy tính – Đại học Công Nghệ Thông Tin2015rt = 0ten($zero là thanh ghi thứ 0)rd = 8ten($t0 là thanh ghi thứ 8)shamt = 0ten (không sử dụng)func = 20hex 1= 00000(2) Machine code: 0000 0001 0000 0000 0100 0000 0010 0000bin = 01004020hexa) lw: I-type formatopcode = 23hexrs = 19ten = 10011bin ($s3 là thanh ghi thứ 19)rt = 9ten ($t1 là thanh ghi thứ 9)immediate = 4ten Machine code: 1000 1110 0110 1001 0000 0000 0000 0100 bin = 8E690004hex5.6a) op=0x0; rs=0x8; rt=0x0; rd=0x8; shamt=0x0; func=0x20b) op=0x23; rs=0x13; rt=0x9; imm=0x4Bài 6.Cho giá trị của các thanh ghi sau:6.1 Hãy cho biết giá trị của thanh ghi $t2 sau khi chạy các lệnh sau:sll $t2, $t0, 4or $t2, $t2, $t16.2 Hãy cho biết giá trị của thanh ghi $t2 sau khi chạy các lệnh sau:srl $t2, $t0, 3andi $t2, $t2, 0xFFEFTrả lời:6.1 Tìm giá trị của $t2a) 0x57755778b) 0xFEFFFEDE6.2 Tìm giá trị của $t2a) 0x0000AAAAb) 0x0000BFCDBài 7.Giá trị của thanh ghi $t0 được cho trong bảng bên dưới7.1Giả sử rằng thanh ghi $t0 chứa giá trị ở bảng trên và $t1 có giá trịDịch: Nguyễn Hữu Nhân & Trần Thị Như NguyệtTrang 7Khoa Kỹ thuật Máy tính – Đại học Công Nghệ Thông Tin2015Hãy cho biết giá trị của $t2 sau khi chạy các lệnh dưới# set on less than# go to ELSE if $t2=0# go to DONE# $t2 = 0+27.2Giả sử rằng thanh ghi $t0 chứa giá trị trong bảng trên và được so sánh với giá trị X bằnglệnh MIPS bên dưới. Hãy chú ý cấu trúc của lệnh slti. Tìm giá trị của X (nếu có) để $t2có giá trị là 1.slti $t2, $t0, X7.3Giả sử con trỏ PC đang có giá trị 0x0000 0020.Ta có thể sử dụng lệnh nhảy trong hợp ngữ MIPS (lệnh j) để nhảy đến địa chỉ có giá trịnhư trong bảng trên hay không.Tương tự, ta có thể sử dụng lệnh nhảy-nếu-bằng (lệnh beq) để nhảy đến địa chỉ có trongbảng trên hay không.Answer:7.1a.“slt” làm việc vơí số có dấu: Nếu thanh ghi $t0 nhỏ nhon thanh ghi $t1 thì thanh ghi$t2 nhận giá trị là 1; nếu ngược lại $t2 nhận giá trị 0$t0 = 1010 1101 0001 0000 0000 0000 0000 0010(2)$t1 = 0011 1111 1111 1000 0000 0000 0000 0000Rõ ràng $t0 là một số âm, thanh ghi $t1 là một số dương, do đó $t0 < $t1  $t2 = 1 beq điều kiện bằng không xảy ra  lệnh “j DONE” được thực hiện  $t2 = 1b. Tương tự $t2=17.2a)$t0 = 1010 1101 0001 0000 0000 0000 0000 0010(2) $t0 = - 1,391,460,350Xét lệnh: slti $t2, $t0, XNếu $t0 < X thì $t2 nhận giá trị là 1; ngược lại $t2 nhận giá trị là 0. Vậy theo nhưyêu cầu đề bài, để sau lệnh này, giá trị thanh ghi $t2 = 1 thì X phải có giá trị lớn hơn $t0.Mặt khác, X chỉ có được biểu diễn tối đa trong 16 bits, có dấu theo bù 2, nên giá trị củanó không thể vượt quá 2 15-1 = 32767 Vậy X từ -1,391,460,349 tới 32767b)Tương tự, X từ 0 tới 327677.3PC = 0x0000 0020 Ta có thể sử dụng lệnh nhảy j trong hợp ngữ MIPS để con trỏ PC trỏ tới địa chỉđược ghi trong bảng trên không? Giải thích?a) KhôngDịch: Nguyễn Hữu Nhân & Trần Thị Như NguyệtTrang 8Khoa Kỹ thuật Máy tính – Đại học Công Nghệ Thông Tin2015b) KhôngLệnh Jump (j) thuộc kiểu lệnh J nên trường địa chỉ (address) có 26 bit.Địa chỉ mà lệnh j sẽ nhảy tới, tức là địa chỉ sẽ gán cho con trỏ PC được tính bằngcách:JumpAddr = { PC+4[31:28], address, 2’b0 } (Xem bảng trang 2 sáchtham khảo)Tức vùng address trong mã máy của lệnh j được lấy ra, dịch trái 2 bit; sau đó gánthêm 4 bit cao nhất được lấy từ 4 bit cao nhất (từ 28 tới 31) của PC hiện tại + 4.PC hiện tại bằng 0x0000 0020  PC + 4 = 0x000000244 bit từ 28 tới 31 của PC + 4 = 0000(2) PC mới, nơi mà lệnh j nhảy tới có giá trị:4 bit từ 28 tới 31 của (PC + 4)26 bits của trường address trong mã máy của jVậy 4 bit cao nhất của PC mới với bất kỳ lệnh j nào cũng phải có 0000. Nhữnggiá trị cho trong bảng trên có giá trị lớn hơn 0000. Vì thế không thể sử dụng lệnh jđể nhảy tới các địa chỉ như trong bảngTa có thể sử dụng lệnh “nhảy nếu bằng” (beq) của hợp ngữ MIPS để PC trỏ tớiđịa chỉ được cho trong bảng trên không? Giải thích?a) Khôngb) KhôngLệnh beq thuộc kiểu I-typeVí dụ lệnh beq $t0, $t1, 4Thì 4 được lưu vào trường immediateKhi beq thực hiện lệnh nhảy, giá trị mới gán cho PC = PC hiện tại + 4 +(immediate x 4)Hay: PC mới = PC hiện tại + 4 + (immediate

Từ khóa » Thanh Ghi Lệnh Chứa Thông Tin G