Bài tập thực hành Kiến trúc máy tính số 4 - Chương 2: Kiến trúc tập lệnh MIPS: Gọi hàm (lập trình cấu trúc), thời gian thực thi

Mục tiêu
• Chuyển từ ngôn ngữ cấp cao (C) sang hợp ngữ MIPS.
• Sử dụng lệnh điều khiển (nhảy, rẽ nhánh) để lập trình cấu trúc.
• Biết nguyên lý gọi hàm. Sử dụng các lệnh gọi hàm jal, jr.
• Tính toán thời gian thực thi của chương trình. 
pdf 5 trang xuanthi 28/12/2022 2820
Bạn đang xem tài liệu "Bài tập thực hành Kiến trúc máy tính số 4 - Chương 2: Kiến trúc tập lệnh MIPS: Gọi hàm (lập trình cấu trúc), thời gian thực thi", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.

File đính kèm:

  • pdfbai_tap_thuc_hanh_kien_truc_may_tinh_so_4_chuong_2_kien_truc.pdf

Nội dung text: Bài tập thực hành Kiến trúc máy tính số 4 - Chương 2: Kiến trúc tập lệnh MIPS: Gọi hàm (lập trình cấu trúc), thời gian thực thi

  1. • Op (opcode) Mã lệnh, dùng để xác định lệnh thực thi (trong kiểu R, Op = 0). • Rs, Rt, Rd (register): Trường xác định thanh ghi (trường thanh ghi 5 bit tương ứng với 32 thanh ghi). • Shamt (shift amount): Xác định số bits dịch trong các lệnh dịch bit. • Function: Xác định toán tử(operator hay còn gọi là lệnh) trong kiểu lệnh R. • Immediate: Đại diện cho con số trực tiếp, địa chỉ, offset. Bài tập và Thực hành Sinh viên chuyển chương trình C bên dưới qua hợp ngữ MIPS tương ứng. 1. Leaf function (hàm lá) Chuyển thủ tục "reverse" (đảo thứ tự chuỗi) từ ngôn ngữ C sang hợp ngữ MIPS. Thủ tục reverse được gọi khi thực thi lệnh jal reverse từ vùng .text. cArray, cArray_size được gắn vào các thanh ghi thanh ghi $a0, $a1. Giá trị trả về (nếu có) chứa vào $v0. Xuất chuỗi ra console. 1 char[] cArray="Computer Architecture 2019" 2 int cArray_size = 26; 3 void reverse(char[] cArray, int cArray_size) 4 { 5 int i; 6 char temp; 7 for (i =0 ;i<cArray_size/2;i ++) 8 { 9 temp= cArray[i]; 10 cArray[i] = cArray[cArray_size -1 -i]; 11 cArray[cArray_size -1 -i] = temp; 12 } 13 } Lưu ý: Dùng "jal reverse" để gọi thủ tục "reverse" và dùng "jr $ra" trở về vị trí thanh ghi $ra đánh dấu. 2. Non-leaf function (là hàm/thủ tục gọi một hàm/thủ tục bên trong). Chuyển thủ tục range từ C sang hợp ngữ MIPS tương đương. 1 int iArray[10]; 2 int iArray_size = 10; 3 int range(iArray, iArray_size) 4 { 5 int temp1= max(iArray, iArray_size); 6 int temp2= min(iArray, iArray_size); 7 int range= temp1- temp2; 8 return range; 9 } Chương trình bắt đầu từ vùng .text, sau đó nó gọi hàm range. Trong hàm range lại gọi 2 hàm con là max và min. Giả sử địa chỉ và kích thức iarray được gắn lần lượt vào các thanh ghi $a0, $a1. Xuất giá trị range ra ngoài console. Lưu ý: Khi gọi các hàm/thủ tục thanh ghi $ra sẽ tự đánh dấu lệnh tiếp theo như là vị trí trở về. Do đó trước khi gọi hàm con trong hàm range thì sinh viên cần lưu lại giá trị thanh ghi $ra trong stack. Sau khi thực thi xong, sinh viên cần phục hồi lại giá trị cho thanh ghi $ra từ stack. Dùng "jal range","jal max","jal min" để gọi thủ tục range, max, min. Dùng "jr $ra" để trở về vị trí lệnh mà thanh ghi $ra đã đánh dấu. Để lưu(push) giá trị $ra vào stack, sinh viên có thể dùng các lệnh sau: 1 addi $sp, $sp, -4 # adjust stack for1 item 2 sw $ra, 0($sp) # save return address 2
  2. ® MIPS32 Instruction Set LOGICAL AND BIT-FIELD OPERATIONS JUMPS AND BRANCHES (NOTE: ONE DELAY SLOT) ± Quick Reference AND RD, RS, RT RD = RS & RT B OFF18 PC += OFF18 ∅ ± ANDI RD, RS, CONST16 RD = RS & CONST16 BAL OFF18 RA = PC + 8, PC += OFF18 RD  DESTINATION REGISTER R2 ∅ ± EXT RD, RS, P, S RS = RSP+S-1:P BEQ RS, RT, OFF18 IF RS = RT, PC += OFF18 RS, RT  SOURCE OPERAND REGISTERS R2 ± RA  RETURN ADDRESS REGISTER (R31) INS RD, RS, P, S RDP+S-1:P = RSS-1:0 BEQZ RS, OFF18 IF RS = 0, PC += OFF18 PC  PROGRAM COUNTER O OP ± ACC  64-BIT ACCUMULATOR NOP N - BGEZ RS, OFF18 IF RS ≥ 0, PC += OFF18 O I CCUMULATOR LOW CC AND HIGH CC PARTS L , H  A (A 31:0) (A 63:32) NOR RD, RS, RT RD = ~(RS | RT) ± BGEZAL RS, OFF18 RA = PC + 8; IF RS ≥ 0, PC += OFF18 ±  SIGNED OPERAND OR SIGN EXTENSION ∅ NOT RD, RS RD = ~RS ±  UNSIGNED OPERAND OR ZERO EXTENSION BGTZ RS, OFF18 IF RS > 0, PC += OFF18 ::  CONCATENATION OF BIT FIELDS OR RD, RS, RT RD = RS | RT ± R2  MIPS32 RELEASE 2 INSTRUCTION BLEZ RS, OFF18 IF RS ≤ 0, PC += OFF18 ∅ DOTTED  ASSEMBLER PSEUDO-INSTRUCTION ORI RD, RS, CONST16 RD = RS | CONST16 ± BLTZ RS, OFF18 IF RS > SHIFT5 ATOMIC READ-MODIFY-WRITE OPERATIONS ± MFLO RD RD = LO D S T D S T SRAV R , R , R R = R >> R 4:0 ± LL RD, OFF16(RS) RD = MEM32(RS + OFF16 ); LINK ∅ MTHI RS HI = RS D S SHIFT D S SHIFT SRL R , R , 5 R = R >> 5 ± IF ATOMIC, MEM32(RS + OFF16 ) = RD; ∅ MTLO RS LO = RS SC RD, OFF16(RS) SRLV RD, RS, RT RD = RS >> RT4:0 RD = ATOMIC ? 1 : 0 Copyright © 2008 MIPS Technologies, Inc. All rights reserved. MD00565 Revision 01.01