Bài giảng Kiến trúc máy tính - Chương 3: Kiến trúc tập lệnh (ISA)
            Kiến trúc tập lệnh (Instruction Set Architecture)
 Sơ bộ kiến trúc bộ xử lý MIPS
 R-Type Các lệnh số học, luận lý, dịch
 I-Type Các lệnh số học, luận lý có hằng số
 Các lệnh nhảy và rẽ nhánh
 Chuyển phát biểu If và các biểu thức boolean
 Các lệnh truy xuất bộ nhớ Load & Store
 Chuyển đổi khối lặp và duyệt mảng
 Các chế độ định địa ch
        
         Sơ bộ kiến trúc bộ xử lý MIPS
 R-Type Các lệnh số học, luận lý, dịch
 I-Type Các lệnh số học, luận lý có hằng số
 Các lệnh nhảy và rẽ nhánh
 Chuyển phát biểu If và các biểu thức boolean
 Các lệnh truy xuất bộ nhớ Load & Store
 Chuyển đổi khối lặp và duyệt mảng
 Các chế độ định địa ch
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Kiến trúc máy tính - Chương 3: Kiến trúc tập lệnh (ISA)", để 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:
 bai_giang_kien_truc_may_tinh_chuong_3_kien_truc_tap_lenh_isa.pdf bai_giang_kien_truc_may_tinh_chuong_3_kien_truc_tap_lenh_isa.pdf
Nội dung text: Bài giảng Kiến trúc máy tính - Chương 3: Kiến trúc tập lệnh (ISA)
- dce 2017 Chapter 3 MIPS Instruction Set Architecture Kiến trúc Máy tính– Chương 3 © Fall 2017 2
- dce 2017 Kiến trúc tập lệnh (ISA)  Là dao diện chính giữa phần cứng và phần mềm, là cái nhìn trừu tượng của phần cứng trên quan điểm phần mềm  Kiến trúc tập lệnh bao gồm  Tập lệnh và định dạng lệnh  Kiểu dữ liệu, cách mã hóa và biễu diễn  Đối tượng lưu trữ: Thanh ghi (Registers) và bộ nhớ (Memory)  Các chế độ định địa chỉ để truy xuất lệnh và dữ liệu  Xử lý các điều kiện ngoại lệ (vd: chia cho 0)  Ví dụ (Phiên bản) Năm giới thiệu  Intel (8086, 80386, Pentium, ) 1978  MIPS (MIPS I, II, III, IV, V) 1986  PowerPC (601, 604, ) 1993 Kiến trúc Máy tính– Chương 3 © Fall 2017 4
- dce 2017 Kiến trúc Stack latch latch stack ALU Memory latch stack pt Ví dụ lệnh: a = b+c; push b; push b push c add pop a push c; add; stack: b c b+c pop a; b Kiến trúc Máy tính– Chương 3 © Fall 2017 6
- dce 2017 So sánh giữa các kiến trúc  Thanh ghi tích lũy  Một toán hạn (có thể là thanh ghi hoặc memory), thanh ghi tích lũy được sử dụng ngầm định  Stack  Không toán hạn: các toán hạn ngầm định trên đỉnh Stack (TOS)  Register (load store)  Ba toán hạn đều là thanh ghi  Load & Store là các lệnh dành riêng cho việc truy xuất memory (truy xuất gián tiếp thông qua thanh ghi)  Register-Memory  Hai toán hạn, một là memory  Memory-Memory  Ba toán hạn, có thể tất cả là memory Kiến trúc Máy tính– Chương 3 © Fall 2017 8
- dce 2017 Ví dụ chương trình hợp ngữ MIPS Kiến trúc Máy tính– Chương 3 © Fall 2017 10
- dce 2017 Sơ bộ kiến trúc MIPS . . . 4 bytes per word Memory Up to 232 bytes = 230 words . . . EIU $0 Execution & FPU F0 Floating 32 General $1 Integer Unit F1 Point Unit Purpose $2 (Main proc) F2 (Coproc 1) 32 Floating-Point Registers Registers $31 F31 Arithmetic & Integer FP ALU Logic Unit mul/div Arith Floating-Point Arithmetic Unit Hi Lo TMU BadVaddr Trap & Status Memory Unit Cause (Coproc 0) Integer EPC Multiplier/Divider Kiến trúc Máy tính– Chương 3 © Fall 2017 12
- dce 2017 Quy ước tên gọi bộ thanh ghi MIPS  Assembler tham khảo thanh ghi bằng tên hoặc số  Lập trình viên thường dùng thanh ghi theo tên  Assembler chuyển tham khảo từ tên sang số Name Register Usage $zero $0 Always 0 (forced by hardware) $at $1 Reserved for assembler use $v0 – $v1 $2 – $3 Result values of a function $a0 – $a3 $4 – $7 Arguments of a function $t0 – $t7 $8 – $15 Temporary Values $s0 – $s7 $16 – $23 Saved registers (preserved across call) $t8 – $t9 $24 – $25 More temporaries $k0 – $k1 $26 – $27 Reserved for OS kernel $gp $28 Global pointer (points to global data) $sp $29 Stack pointer (points to top of stack) $fp $30 Frame pointer (points to stack frame) $ra $31 Return address (used by jal for function call) Kiến trúc Máy tính– Chương 3 © Fall 2017 14
- dce 2017 Phân loại lệnh trong tập lệnh – nhóm lệnh  Các lệnh số học nguyên (Integer Arithmetic)  Các lệnh cộng/trừ, lệnh luận lý (and, or, nor, xor) và lệnh dịch (shift left, shift right)  Các lệnh truy xuất dữ liệu từ bộ nhớ (Data Transfer)  Lệnh Load&Store tương ứng thao tác Đọc/Ghi  Hỗ trợ dữ liệu byte (1byte), half word (2byte), word (4byte)  Nhảy và rẽ nhánh (Jump and Branch)  Các lệnh điều khiển dòng thực thi khác cách tuần tự  Các lệnh số học số thực (Floating Point Arithmetic)  Các lệnh thao tác trên các thanh ghi số thực  Các lệnh phụ  Các lệnh hỗ trợ xử lý ngoại lệ (exceptions)  Các lệnh quản lý bộ nhớ Kiến trúc Máy tính– Chương 3 © Fall 2017 16
- dce 2017 R-Type Format Op6 Rs5 Rt5 Rd5 sa5 funct6  Op: mã phép toán (opcode)  Cho biết lệnh làm phép toán gì  funct: function code – mở rộng opcode  Có thể có 26 = 64 functions có thể mở rộng cho một opcode  MIPS sử dụng opcode 0 để định nghĩa lệnh loại R-type  Ba thanh ghi toán hạn (Register Operand)  Rs, Rt: Hai toán hạn nguồn  Rd: Toán hạn đích chứa kết quả  sa: Quy định số bit dịch trong các lệnh dịch Kiến trúc Máy tính– Chương 3 © Fall 2017 18
- dce 2017 Số nguyên nhị phân không dấu  Cho 1 số n-bit, có dạng n  Tầm vực giá trị sẽ là: 0 đến +2 – 1  Ví dụ:  0000 0000 0000 0000 0000 0000 0000 10112 = 0 + + 1×23 + 0×22 +1×21 +1×20 = 0 + + 8 + 0 + 2 + 1 = 1110  Giá trị 1 số nhị phân không dấu 32-bit sẽ là:  0 đến +4,294,967,295 (giá trị thập phân) Kiến trúc Máy tính– Chương 3 © Fall 2017 20
- dce 2017 Số âm có dấu  Đảo giá trị bit và cộng 1  Đảo giá trị bit: 1 → 0, 0 → 1  Ví dụ: giá trị (-) 2  +2 = 0000 0000 00102  –2 = 1111 1111 11012 + 1 = 1111 1111 11102 Kiến trúc Máy tính– Chương 3 © Fall 2017 22
- dce 2017 Tầm biểu diễn của số nguyên có dấu Số nguyên có dấu n-bit: Tầm biểu diễn từ -2n–1 đến (2n–1 – 1) Các số dương: 0 đến 2n–1 – 1 Các số âm: -2n–1 đến -1 Storage Type Unsigned Range Powers of 2 Byte –128 to +127 –27 to (27 – 1) Half Word –32,768 to +32,767 –215 to (215 – 1) Word –2,147,483,648 to +2,147,483,647 –231 to (231 – 1) –9,223,372,036,854,775,808 to Double Word –263 to (263 – 1) +9,223,372,036,854,775,807 Câu hỏi: Cho biết tầm biểu diễn của số nguyên có dấu 20 bits? Kiến trúc Máy tính– Chương 3 © Fall 2017 24
- dce 2017 Ví dụ về Nhớ/Tràn  “Nhớ” và “Tràn” là độc lập với nhau  Có bốn trường hợp (Ví dụ số 8-bit) 1 1 1 1 1 1 0 0 0 0 1 1 1 1 15 0 0 0 0 1 1 1 1 15 + + 0 0 0 0 1 0 0 0 8 1 1 1 1 1 0 0 0 248 (-8) 0 0 0 1 0 1 1 1 23 0 0 0 0 0 1 1 1 7 Carry = 0 Overflow = 0 Carry = 1 Overflow = 0 1 1 1 1 0 1 0 0 1 1 1 1 79 1 1 0 1 1 0 1 0 218 (-38) + + 0 1 0 0 0 0 0 0 64 1 0 0 1 1 1 0 1 157 (-99) 1 0 0 0 1 1 1 1 143 0 1 1 1 0 1 1 1 119 (-113) Carry = 0 Overflow = 1 Carry = 1 Overflow = 1 Kiến trúc Máy tính– Chương 3 © Fall 2017 26
- dce 2017 Các phép toán luận lý  Xét 4 phép toán: and, or, xor, nor x y x and y x y x or y x y x xor y x y x nor y 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 1 1 0 1 1 0 1 0 1 0 0 1 0 1 1 0 1 1 0 0 1 1 1 1 1 1 1 1 0 1 1 0  AND có tính chất xóa: x and 0 = 0  OR có tính chất tạo: x or 1 = 1  XOR có tính chất đảo: x xor 1 = not x  NOR có thể dùng như NOT:  x nor x tương ứng not x Kiến trúc Máy tính– Chương 3 © Fall 2017 28
- dce 2017 Phép dịch (Shift Operation)  Phép dịch thực hiện di chuyển tấc cả các bit của một thanh ghi sang trái hoặc phải  Có 3 lệnh dịch số lượng bit cố định: sll, srl, sra  sll/srl tương ứng shift left/right logical (số không dấu)  Trường “sa” (5-bit shift amount) chỉ số lượng bit được dịch  sra tương ứng shift right arithmetic (bảo toàn dấu)  Bit dấu (sign-bit) được thêm vào từ bên trái sll 32-bit register shift-out MSB . . . shift-in 0 srl shift-in 0 . . . shift-out LSB sra shift-in sign-bit . . . shift-out LSB Kiến trúc Máy tính– Chương 3 © Fall 2017 30
- dce 2017 Phép nhân dựa trên phép dịch  Lệnh dịch trái (sll) có thể thực hiện phép nhân  Khi số nhân là mũ của 2  Một số nguyên bất kỳ có thể biểu diễn thành tổng của các số là mũ của 2  Ví dụ: nhân $s1 với 36 . Phân tích 36 thành (4 + 32) và sử dụng tính chất phân phối của phép nhân  $s2 = $s1*36 = $s1*(4 + 32) = $s1*4 + $s1*32 sll $t0, $s1, 2 ; $t0 = $s1 * 4 sll $t1, $s1, 5 ; $t1 = $s1 * 32 addu $s2, $t0, $t1 ; $s2 = $s1 * 36 Kiến trúc Máy tính– Chương 3 © Fall 2017 32
- dce 2017 Tiếp theo  Kiến trúc tập lệnh (Instruction Set Architecture)  Sơ bộ kiến trúc bộ xử lý MIPS  R-Type Các lệnh số học, luận lý, dịch  I-Type Các lệnh số học, luận lý có hằng số  Các lệnh nhảy và rẽ nhánh  Chuyển phát biểu If và các biểu thức boolean  Các lệnh truy xuất bộ nhớ Load & Store  Chuyển đổi khối lặp và duyệt mảng  Các chế độ định địa chỉ Kiến trúc Máy tính– Chương 3 © Fall 2017 34
- dce 2017 Các lệnh số học luận lý (ALU) kiểu I-Type Instruction Meaning I-Type Format addi $s1, $s2, 10 $s1 = $s2 + 10 op = 0x8 rs = $s2 rt = $s1 imm16 = 10 addiu $s1, $s2, 10 $s1 = $s2 + 10 op = 0x9 rs = $s2 rt = $s1 imm16 = 10 andi $s1, $s2, 10 $s1 = $s2 & 10 op = 0xc rs = $s2 rt = $s1 imm16 = 10 ori $s1, $s2, 10 $s1 = $s2 | 10 op = 0xd rs = $s2 rt = $s1 imm16 = 10 xori $s1, $s2, 10 $s1 = $s2 ^ 10 op = 0xe rs = $s2 rt = $s1 imm16 = 10 lui $s1, 10 $s1 = 10 << 16 op = 0xf 0 rt = $s1 imm16 = 10  addi: overflow sinh ra arithmetic exception  Trong trường hợp overflow, kết quả không được ghi vào thanh ghi đích  addiu: giống lệnh addi nhưng tràn số được bỏ qua  Hằng số 16 bit trong lệnh addi và addiu là số có dấu  Không có lệnh subi hoặc subiu  Hằng số 16 bit trong lệnh andi, ori, xori là số không dấu Kiến trúc Máy tính– Chương 3 © Fall 2017 36
- dce 2017 Khởi tạo hằng số 32-bit???  Lệnh I-Type chỉ chứa hằng số 16-bit Op6 Rs5 Rt5 immediate16  Làm thế nào để khởi tạo giá trị 32-bit cho một thanh ghi?  Không thể có giá trị 32-bit trong lệnh I-Type   Gợi ý: dùng nhiều lệnh thay vì một lệnh Ví dụ: khởi tạo $s1=0xAC5165D9 (hằng số 32-bit) addiu $s1,$0,0xAC51 lui: load upper immediate sll $s1,$s1,16 ori $s1,$s1,0x65D9 load upper clear lower 16 bits 16 bits lui $s1,0xAC51 $s1=$17 0xAC51 0x0000 ori $s1,$s1,0x65D9 $s1=$17 0xAC51 0x65D9 Kiến trúc Máy tính– Chương 3 © Fall 2017 38
- dce 2017 Định dạng lệnh J-Type Op6 immediate26  Định dạng J-type áp dụng cho các lệnh nhảy không điều kiện (unconditional jump, giống như lệnh goto): j label # jump to label . . . label:  Hằng số 26-bit được gắn vào trong lệnh Hằng số này cho biết địa chỉ nhảy đến  Thanh ghi Program Counter (PC) được thay đổi như sau: least-significant 4 26 Next PC = PC immediate 00 2 bits are 00 4 bit cao nhất của PC không đổi 2 bit cuối luôn bằng 00 Kiến trúc Máy tính– Chương 3 © Fall 2017 40
- dce 2017 Các lệnh Set on Less Than  MIPS cung cấp lệnh gán bằng 1 khi nhỏ hơn (set on less than) slt rd,rs,rt if (rs < rt) rd = 1 else rd = 0 sltu rd,rs,rt unsigned < slti rt,rs,im16 if (rs < im16) rt = 1 else rt = 0 sltiu rt,rs,im16 unsigned <  So sánh có dấu / không dấu (Signed / Unsigned) Có thể sinh ra các kết quả khác nhau Giả sử $s0 = 1 và $s1 = -1 = 0xffffffff slt $t0,$s0,$s1 kết quả $t0 = 0 stlu $t0,$s0,$s1 kết quả $t0 = 1 Kiến trúc Máy tính– Chương 3 © Fall 2017 42
- dce 2017 Các lệnh giả Pseudo-Instructions  Cung cấp bởi assembler và được tự động chuyển đổi sang lệnh có thật  Mục đích để hỗ trợ lập trình hợp ngữ được dễ dàng Pseudo-Instructions Các lệnh Thật tương ứng move $s1, $s2 addu Ss1, $s2, $zero not $s1, $s2 nor $s1, $s2, $s2 li $s1, 0xabcd ori $s1, $zero, 0xabcd lui $s1, 0xabcd li $s1, 0xabcd1234 ori $s1, $s1, 0x1234 sgt $s1, $s2, $s3 slt $s1, $s3, $s2 slt $at, $s1, $s2 blt $s1, $s2, label bne $at, $zero, label  Assembler dùng thanh ghi $at = $1 trong các chuyển đổi  $at được gọi là thanh ghi assembler temporary Kiến trúc Máy tính– Chương 3 © Fall 2017 44
- dce 2017 Tiếp theo  Kiến trúc tập lệnh (Instruction Set Architecture)  Sơ bộ kiến trúc bộ xử lý MIPS  R-Type Các lệnh số học, luận lý, dịch  I-Type Các lệnh số học, luận lý, dịch có hằng số  Các lệnh nhảy và rẽ nhánh  Chuyển phát biểu If và các biểu thức boolean  Các lệnh truy xuất bộ nhớ Load & Store  Chuyển đổi khối lặp và duyệt mảng  Các chế độ định địa chỉ Kiến trúc Máy tính– Chương 3 © Fall 2017 46
- dce 2017 Biểu thức điều kiện kết hợp AND  Ngôn ngữ lập trình sử dụng short-circuit evaluation  Nếu biểu thức đầu false, biểu thức thứ 2 được bỏ qua if (($s1 > 0) && ($s2 < 0)) {$s3++;} # One Possible Implementation bgtz $s1, L1 # first expression j next # skip if false L1: bltz $s2, L2 # second expression j next # skip if false L2: addiu $s3,$s3,1 # both are true next: Kiến trúc Máy tính– Chương 3 © Fall 2017 48
- dce 2017 Biểu thức điều kiện kết hợp OR  Short-circuit evaluation cho phép OR  Nếu biểu thức 1 true, biểu thức kế tiếp được bỏ qua if (($sl > $s2) || ($s2 > $s3)) {$s4 = 1;}  Lời giải: bgt $s1, $s2, L1 # yes, execute if part ble $s2, $s3, next # no: skip if part L1: li $s4, 1 # set $s4 to 1 next:  bgt, ble, và li là những lệnh giả pseudo-instructions  Được assembler chuyển tự động sang các lệnh thật (Slide 44) Kiến trúc Máy tính– Chương 3 © Fall 2017 50
- dce 2017 Tiếp theo  Kiến trúc tập lệnh (Instruction Set Architecture)  Sơ bộ kiến trúc bộ xử lý MIPS  R-Type Các lệnh số học, luận lý, dịch  I-Type Các lệnh số học, luận lý, dịch có hằng số  Các lệnh nhảy và rẽ nhánh  Chuyển phát biểu If và các biểu thức boolean  Các lệnh truy xuất bộ nhớ Load & Store  Chuyển đổi khối lặp và duyệt mảng  Các chế độ định địa chỉ Kiến trúc Máy tính– Chương 3 © Fall 2017 52
- dce 2017 Load và Store dữ liệu Word (32-bit)  Lệnh Load Word (Word = 4 bytes in MIPS) lw Rt, imm16(Rs) # Rt MEMORY[Rs+imm16]  Lệnh Store Word sw Rt, imm16(Rs) # Rt MEMORY[Rs+imm16]  Các xác định địa chỉ ô nhớ dùng địa chỉ nền và độ dời: Memory Address = Rs (base) + Immediate16 (offset) Độ dời immediate16 được mở rộng dấu thành số 32 bit Định địa chỉ dùng địa chỉ nền và dộ dời Op6 Rs5 Rt5 immediate16 + Memory Word Base address Kiến trúc Máy tính– Chương 3 © Fall 2017 54
- dce 2017 Địa chỉ theo Byte  Dữ liệu 8-bit bytes vẫn hữu dụng, hầu hết các kiến trúc hỗ trợ định địa chỉ bộ nhớ theo bytes  Alignment restriction – địa chỉ của một ô nhớ word phải là số chi hết cho kích thức một word (4 byte đối với MIPS-32)  Big Endian: leftmost byte is word address IBM 360/370, Motorola 68k, MIPS, Sparc, HP PA  Little Endian: rightmost byte is word address Intel 80x86, DEC Vax, DEC Alpha (Windows NT) little endian byte 0 3 2 1 0 msb lsb 0 1 2 3 big endian byte 0 Kiến trúc Máy tính– Chương 3 © Fall 2017 56
- dce 2017 Ví dụ chi tiết dữ liệu lệnh Store Kiến trúc Máy tính– Chương 3 © Fall 2017 58
- dce 2017 Load/Store Byte và Halfword  MIPS hỗ trợ kiểu dữ liệu: Byte = 8 bits, Halfword = 16 bits, Word = 32 bits  Lệnh Load & store cho bytes và halfwords lb = load byte,lbu = load byte unsigned, sb = store byte lh = load half, lhu = load half unsigned, sh = store halfword  Load mở rộng giá trị ô nhớ thành số 32-bit trong thanh ghi 32-bit Register s sign – extend s s b 0 zero – extend 0 bu s sign – extend s s h 0 zero – extend 0 hu Kiến trúc Máy tính– Chương 3 © Fall 2017 60
- dce 2017 Tiếp theo  Kiến trúc tập lệnh (Instruction Set Architecture)  Sơ bộ kiến trúc bộ xử lý MIPS  R-Type Các lệnh số học, luận lý, dịch  I-Type Các lệnh số học, luận lý, dịch có hằng số  Các lệnh nhảy và rẽ nhánh  Chuyển phát biểu If và các biểu thức boolean  Các lệnh truy xuất bộ nhớ Load & Store  Chuyển đổi khối lặp và duyệt mảng  Các chế độ định địa chỉ Kiến trúc Máy tính– Chương 3 © Fall 2017 62
- dce 2017 Sử dụng con trỏ để duyệt Arrays  Xét phát biểu WHILE: i = 0; while (A[i] != k) i = i+1; A là mảng số nguyên 4 byte Giả sử địa chỉ A, i, k tương ứng $s0, $s1, $s2  Sử dụng con trỏ (Pointer) để duyệt mảng A Pointer được tăng lên 4 (faster than indexing) move $t0, $s0 # $t0 = $s0 = addr A j cond # test condition loop: addiu $s1, $s1, 1 # i = i+1 addiu $t0, $t0, 4 # point to next cond: lw $t1, 0($t0) # $t1 = A[i] bne $t1, $s2, loop # loop if A[i]!= k  Chỉ còn 4 lệnh (thay vì 6) trong thân vòng lặp Kiến trúc Máy tính– Chương 3 © Fall 2017 64
- dce 2017 Tính tổng của một mảng nguyên sum = 0; for (i=0; i<n; i++) sum = sum + A[i]; Giả sử $s0 = địa chỉ của A, $s1 = kích thức mảng = n move $t0, $s0 # $t0 = address A[i] xor $t1, $t1, $t1 # $t1 = i = 0 xor $s2, $s2, $s2 # $s2 = sum = 0 L1: lw $t2, 0($t0) # $t2 = A[i] addu $s2, $s2, $t2 # sum = sum + A[i] addiu $t0, $t0, 4 # point to next A[i] addiu $t1, $t1, 1 # i++ bne $t1, $s1, L1 # loop if (i != n) Kiến trúc Máy tính– Chương 3 © Fall 2017 66
- dce 2017 Các chế độ định địa chỉ  Địa chỉ (vị trí) của toán hạn?  Địa chỉ của ô nhớ được tính như thế nào? Immediate Addressing Op6 Rs5 Rt5 immediate16 Operand is a constant Register Addressing Op6 Rs5 Rt5 Rd5 sa5 funct6 Operand is in a register Register Operand is in memory (load/store) Base or Displacement Addressing Op6 Rs5 Rt5 immediate16 + Byte Halfword Word Register = Base address Kiến trúc Máy tính– Chương 3 © Fall 2017 68
- dce 2017 Giới hạn của lệnh nhảy và rẽ nhánh  Phạm vi địa chỉ của lệnh Jump = 226 lệnh = 256 MB  Nhảy đến vị trí không quá 226 lệnh hoặc 256 MB  4 bit cao của PC không đổi Địa chỉ đích của lệnh Jump PC4 immediate26 00  Phạm vi địa chỉ của lệnh rẽ nhánh  Lệnh rẽ nhánh có định dạng I-Type (16-bit hằng số)  Định địa chỉ tương đối với PC: PC30 + immediate16 + 1 00 . Địc chỉ đích = PC + 4×(1 + immediate16) . Là số lệnh tính từ vị trí lệnh kế của lệnh rẽ nhánh . Hằng số dương => Forward, Hằng số âm => Backward . Khoảng cách xa nhất ±215 lệnh (thông thường lệnh rẽ nhánh có địch chỉ đích lân cận vị trí lệnh) Kiến trúc Máy tính– Chương 3 © Fall 2017 70
- dce 2017 Four Design Principles 1. Simplicity favors regularity  Fix the size of instructions (simplifies fetching & decoding)  Fix the number of operands per instruction . Three operands is the natural number for a typical instruction 2. Smaller is faster  Limit the number of registers for faster access (typically 32) 3. Make the common case fast  Include constants inside instructions (faster than loading them)  Design most instructions to be register-to-register 4. Good design demands good compromises  Fixed-size instructions compromise the size of constants Kiến trúc Máy tính– Chương 3 © Fall 2017 72

