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
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