CO2008 KIẾN TRÚC MÁY TÍNH Khoa Khoa Học và Kỹ Thuật Máy Tính Đại học Bách Khoa – Tp HCM 08/2019 Bài tập/Thực hành 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ụ[.]
CO2008 - KIẾN TRÚC MÁY TÍNH Khoa Khoa Học Kỹ Thuật Máy Tính Đại học Bách Khoa – Tp.HCM 08/2019 Bài tập/Thực hành CHƯƠNG 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 lệnh gọi hàm jal, jr • Tính tốn thời gian thực thi chương trình u cầu • Xem cách dùng lệnh (set, branch, jump, load, store, jal, jr) slide file tham khảo • Nộp file code hợp ngữ đặt tên theo format [Bai*.asm] chứa thư mục Lab4_MSSV Tập lệnh [tham khảo nhanh] Cú pháp slt Rd, Rs, Rt sltu Rd, Rs, Rt beq Rs, Rt, label bne Rs, Rt, label bltz Rs, label blez Rs, label bgtz Rs, label bgez Rs, label j label jr Rs jal label jalr Rs Ảnh hưởng Rd = (Rs < Rt) ? : Rd = (Rs < Rt) ? : Mơ tả [Có dấu]Rd = Rs < Rt, ngược lại Rd = [Không dấu] Rd = Rs < Rt, ngược lại Rd = Lệnh nhảy, rẽ nhánh if (Rs == Rt) PC ← label Rẽ nhánh đến label Rs == Rt if (Rs != Rt) PC ← label Rẽ nhánh đến label Rs != Rt if (Rs < 0) PC ← label Rẽ nhánh đến label Rs < if (Rs if (Rs >= 0) PC ← label Rẽ nhánh đến label Rs >= PC ← label Nhảy không điều kiện đến label Gọi hàm PC ← Rs Trở vị trí ghi Rs trỏ đến $ra ← PC+4, PC ← label Gọi hàm label, $ra nắm vị trí lệnh $ra ← PC+4, PC ← Rs Gọi hàm Rs trỏ đến, $ra nắm vị trí lệnh Review: MIPS instruction types R-type Op6 Rs5 Kiểu I-type Op6 Rs5 Kiểu J-type Op6 Rt5 Rt5 Rd5 Shamt5 Immediate16 Immediate26 F unction6 • 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 ghi (trường ghi bit tương ứng với 32 ghi) • Shamt (shift amount): Xác định số bits dịch lệnh dịch bit • Function: Xác định tốn tử(operator hay cịn gọi lệnh) kiểu lệnh R • Immediate: Đại diện cho số trực tiếp, địa chỉ, offset Bài tập Thực hành Sinh viên chuyển chương trình C bên qua hợp ngữ MIPS tương ứng 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 gọi thực thi lệnh jal reverse từ vùng text cArray, cArray_size gắn vào ghi ghi $a0 , $a1 Giá trị trả (nếu có) chứa vào $v0 Xuất chuỗi console 10 11 12 13 char[] cArray = "Computer Architecture 2019" int cArray_size = 26; void reverse(char[] cArray, int cArray_size) { int i; char temp; for (i =0 ; i > RT4:0 MFLO RD RD = LO MTHI RS HI = RS LL RD, OFF16(RS) RD = MEM32(RS + OFF16 ±); LINK MTLO RS LO = RS SC RD, OFF16(RS) IF ROTRR2 RD, RS, BITS5 SRL RD, RS, SHIFT5 RD = RS∅ >> SHIFT5 SRLV RD, RS, RT RD = RS∅ >> RT4:0 Copyright © 2008 MIPS Technologies, Inc All rights reserved RS, RT RD = RS ± × RT± ± BLTZAL RS, OFF18 ± MULTIPLY AND DIVIDE OPERATIONS (OVERFLOW TRAP) JUMPS AND BRANCHES (NOTE: ONE DELAY SLOT) AND ACC = RS∅ × RT∅ ACCUMULATOR ACCESS OPERATIONS + OFF16±) = RS ATOMIC READ-MODIFY-WRITE OPERATIONS ATOMIC, MEM32(RS + OFF16 ±) = RD; RD = ATOMIC ? : MD00565 Revision 01.01 REGISTERS zero at READING THE CYCLE COUNT REGISTER FROM C Always equal to zero Assembler temporary; used by the assembler 2-3 v0-v1 Return value from a function call 4-7 a0-a3 First four parameters for a function call 8-15 t0-t7 Temporary variables; need not be preserved 16-23 s0-s7 Function variables; must be preserved 24-25 t8-t9 Two more temporary variables 26-27 k0-k1 Kernel use registers; may change unexpectedly unsigned mips_cycle_counter_read() { unsigned cc; asm volatile("mfc0 %0, $9" : "=r" (cc)); return (cc