Bài tập thực hành Kiến trúc máy tính số 3 - Chương 2: Kiến trúc tập lệnh MIPS: Lệnh đại số, luận lý, truy xuất dữ liệu

• 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. 
pdf 6 trang xuanthi 28/12/2022 3380
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ố 3 - Chương 2: Kiến trúc tập lệnh MIPS: Lệnh đại số, luận lý, truy xuất dữ liệu", để 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_3_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ố 3 - Chương 2: Kiến trúc tập lệnh MIPS: Lệnh đại số, luận lý, truy xuất dữ liệu

  1. Tập lệnh [tham khảo nhanh] Cú pháp Ảnh hưởng Mô tả slt Rd, Rs, Rt Rd = (Rs 0) PC ← label Rẽ nhánh đến label nếu Rs > 0 bgez Rs, label if (Rs >= 0) PC ← label Rẽ nhánh đến label nếu Rs >= 0 j label PC ← label Nhảy không điều kiện đến label Gọi hàm jr Rs PC ← Rs Trở về vị trí thanh ghi Rs trỏ đến jal label $ra ← PC+4, PC ← label Gọi hàm label, khi đó $ra nắm vị trí lệnh tiếp theo jalr Rs $ra ← PC+4, PC ← Rs Gọi hàm Rs đang trỏ đến, khi đó $ra nắm vị trí lệnh tiếp theo Bài tập và Thực hành Lập trình có cấu trúc. Sinh viên chuyển các cấu trúc sau của ngôn ngữ C qua ngôn ngữ assembly. Tham khảo hình ảnh về các cấu trúc ở cuối bài thực hành. Bài 1: Phát biểu IF-ELSE (1) 1 if(a % 2 == 0) { Print string:"Computer Science and Engineering, HCMUT"} 2 else { Print string:"Computer Architecture 2019"} Bài 2: Phát biểu IF-ELSE (2) 1 if(a >= -3 &&a <= 4) {a=b-c;} 2 else {a=b+c;} Bài 3: Phát biểu SWITCH-CASE Hiện thực phát biểu switch-case bên dưới bằng hợp ngữ. Cho biết b = 100, c = 2. Giá trị input nhập từ người dùng. Xuất ra giá trị của a. 1 switch (input) 2 { 3 case 1:a=b+c; break; 4 case 2:a=b-c; break; 5 case 3:a=bxc; break; 6 case 4:a=b/c; break; 7 default: NOP; // No-Operation;a=0 8 break; 9 } Bài 4: Vòng lặp FOR - xác định chuỗi Fibonacci bằng vòng lặp. Nhập vào n (nguyên dương), xuất ra số Fibonacci Fn. 1 if (n == 0) {return 0;} 2 else if(n == 1) {return 1;} 3 else{ 4 f0= 0; f1 = 1; 5 for (i = 2;i <=n;i++){ 6 fn= fn-1 + fn-2; 7 } 8 } 9 return fn; 2
  2. (a) Xác định nội dung của vùng nhớ dữ liệu và xác định các lệnh sẽ gây ra lỗi khi thực thi, giải thích. Biết MIPS chuẩn được thiết kế theo kiểu BIG ENDIAN. (b) Xếp lại dữ liệu sao cho bộ nhớ tối ưu hơn (trong kiến trúc 32 bit). Sơ đồ cấu trúc của phát biểu (if-else, for, while, do-while) Start Start For initialization yes If condition? no Condition? no yes Else statements For statements If statements Update condition Stop Stop Hình. 1: If-else statement Hình. 2: For statements Start Start no Do-while statements Condition? yes Condition? yes While statements no Stop Stop Hình. 4: Do-while statement Hình. 3: While statement 4
  3. REGISTERS READING THE CYCLE COUNT REGISTER FROM C ATOMIC READ-MODIFY-WRITE EXAMPLE 0 zero Always equal to zero unsigned mips_cycle_counter_read() atomic_inc: 1 at Assembler temporary; used by the assembler { ll $t0, 0($a0) # load linked 2-3 v0-v1 Return value from a function call unsigned cc; addiu $t1, $t0, 1 # increment asm volatile("mfc0 %0, $9" : "=r" (cc)); sc $t1, 0($a0) # store cond'l 4-7 a0-a3 First four parameters for a function call return (cc u; • First four parameters are passed in registers $a0−$a3. } • 64-bit parameters are passed in register pairs: C / ASSEMBLY-LANGUAGE FUNCTION INTERFACE • Little-endian mode: $a1:$a0 or $a3:$a2. • Big-endian mode: $a0:$a1 or $a2:$a3. • Every subsequent parameter is passed through the stack. #include MIPS SDE-GCC COMPILER DEFINES • First 16 bytes on the stack are not used. __mips MIPS ISA (= 32 for MIPS32) • Assuming $sp was not modified at function entry: int asm_max(int a, int b); • The 1st stack parameter is located at 16($sp). __mips_isa_rev MIPS ISA Revision (= 2 for MIPS32 R2) int main() • The 2nd stack parameter is located at 20($sp), etc. • { __mips_dsp DSP ASE extensions enabled 64-bit parameters are 8-byte aligned. int x = asm_max(10, 100); int y = asm_max(200, 20); _MIPSEB Big-endian target CPU Return Values printf("%d %d\n", x, y); • 32-bit and smaller values are returned in register $v0. _MIPSEL Little-endian target CPU • } 64-bit values are returned in registers $v0 and $v1: _MIPS_ARCH_CPU Target CPU specified by -march=CPU • Little-endian mode: $v1:$v0. • Big-endian mode: $v0:$v1. _MIPS_TUNE_CPU Pipeline tuning selected by -mtune=CPU INVOKING MULT AND MADD INSTRUCTIONS FROM C NOTES int dp(int a[], int b[], int n) MIPS32 VIRTUAL ADDRESS SPACE { • Many assembler pseudo-instructions and some rarely used kseg3 0xE000.0000 0xFFFF.FFFF Mapped Cached int i; machine instructions are omitted. long long acc = (long long) a[0] * b[0]; • The C calling convention is simplified. Additional rules apply ksseg 0xC000.0000 0xDFFF.FFFF Mapped Cached for (i = 1; i > 31); • Most MIPS processors increment the cycle counter every other } kseg0 0x8000.0000 0x9FFF.FFFF Unmapped Cached cycle. Please check your processor documentation. useg 0x0000.0000 0x7FFF.FFFF Mapped Cached Copyright © 2008 MIPS Technologies, Inc. All rights reserved. MD00565 Revision 01.01