Bài giảng Kiến trúc máy tính - Chương 2: Kiến trúc tập lệnh

Có rất nhiều kiến trúc tập lệnh khác nhau (ISAs): – x86 (Intel/AMD) – ARM (ARM) – JVM (Java) – PPC (IBM, Motorola) – SPARC (Oracle, Fujitsu) – PTX (Nvidia) – etc. Chú ý đến một số vấn đề chính : – Các kiểu mã máy (Machine types) – Phân loại các kiểu tập lệnh (ISA classes) – Các chế độ đánh địa chỉ (Addressing modes) – Độ lớn của chỉ thị (Instruction width) – Phân biệt kiến trúc CISC vs. RISC

pptx65 trang | Chia sẻ: huongthu9 | Lượt xem: 425 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Bài giảng Kiến trúc máy tính - Chương 2: Kiến trúc tập lệnh, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Kiến trúc máy tính Computer architectureTo improve is to change; to be perfect is to change often.Winston ChurchillChương 2: Kiến trúc tập lệnhTập lệnh MIPSBiên dịch mã máy Kiến trúc tập lệnhMultiple Implementations: 8086  Pentium 4ISAs evolve: MIPS-I, MIPS-II, MIPS-II, MIPS-IV, MIPS,MDMX, MIPS-32, MIPS-64instruction setsoftwarehardwareChu kỳ thực thi lệnh cơ bảnInstructionFetchInstructionDecodeOperandFetchExecuteResultStoreNextInstructionObtain instruction from program storageDetermine required actions and instruction sizeLocate and obtain operand dataCompute result value or statusDeposit results in register or storage for later useDetermine successor instructionThực thi chương trìnhBộ xử lý thực thi chương trình như thế nào?1. Tải lệnh 2. Tìm ra toán tử được sử dụng 3. Tìm ra dữ liệu nào được sử dụng4. Thực hiện tính toán5. Tìm lệnh tiếp theoLặp lại quá trình Bài giảng nhấn mạnh sự thực thi trong bộ xử lý MIPSThực thi lệnhToday we’re going to learn the details!ADDSUBTRACTANDORCOMPARE...0101001110100111000111010...Programmer's ViewComputer's ViewCPUMemoryI/OComputerProgram(Instructions)Kiến trúc Princeton (Von Neumann) --- Data and Instructions mixed in same unified memory--- Program as data--- Storage utilization--- Single memory interfaceKiến trúc Harvard--- Data & Instructions in separate memories--- Has advantages in certain high performance implementations--- Can optimize each memoryThực thi lệnhCác kiểu toán hạng cơ bảnDeclining cost of registersSo sánh số lượng toán hạngThực thi phép toán (C = A + B) với các kiểu toán hạng khác nhauStackAccumulatorRegister (load-store)Push ALoad ALoad R1,APush BAdd BLoad R2,BAddStore CRegister (register-memory)Load R1,AAdd R1,BStore C, R1Add R3,R1,R2Pop CStore C,R3So sánh số lượng các chỉ thịKích thước toán hạng (Operand)Tập thanh ghi trong MIPS32 Thanh ghi đa dụng.– R0R31 or $0$31– Các biến phải lưu trên thanh ghi.Một số trường hợp đặc biệt.– R0 luôn có giá trị zero (0)– R29 là thanh ghi con trỏ ngăn xếp– R31 được sử dụng cho thủ tục quay lại địa chỉ Một số thanh ghi đặc biệt.– PC (Program Counter): Thanh ghi lệnh hiện tại– HI & LO kết quả của phép nhân– Thanh ghi dấu phẩy động – Một số thanh ghi điều khiển (kiểm soát lỗi hoặc trạng thái)Câu hỏi: Tại sao giá trị thanh ghi R0 luôn bằng 0?Trả lời: Luôn cần giá trị 0 trong một chương trình Move: add dest, src, R0Bộ nhớ là một mảng 1 chiều lưu trữ dữ liệu• Mỗi ô nhớ có kích thước 1 byte (8 bits)• Địa chỉ ô nhớ được xác định theo địa chỉ byte.Địa chỉ bộ nhớ được đánh chỉ số trên mảng • Máy tính 32 bits, có 232 ô nhớ (4GB)• Máy tính 64‐bit, có 264 ô nhớ (16ExaByte) Ví dụ:– 64-bit x86 lên tới ~48‐bits một ô nhớ (4PetaByte).Tổ chức bộ nhớ Các kiểu dữ liệu trong MIPS được định nghĩa là 1-byte hoặc 1-word– Một từ gồm 32 bits = 4 bytes– 232 bytes = 230 words: addresses 0, 4, 8, Câu hỏi: địa chỉ của một từ được xác định như thế nào ?Tổ chức bộ nhớ Địa chỉ Alignment : Tạo trên 4 byte (word) ở đường biên (e.g., 0, 4, 8, 12) – Dữ liệu được lưu trữ ở địa chỉ byte chia hết cho kích thước Ánh xạ địa chỉ theo byte: EndianessLittle Endian: address of least significant byte = word address (xx00 = Little End of word)Intel 80x86, DEC Vax, DEC Alpha (Windows NT)Big EndianLittle EndianBig Endian: address of most significant byte = word address (xx00 = Big End of word)IBM 360/370, Motorola 68k, MIPS, Sparc, HP PAÁnh xạ địa chỉ theo tuyến : AlignmentAlignment: require that objects fall on address that is multiple of their size.0 1 2 3AlignedNotAlignedDạng chỉ thị MIPS và các chế độ đánh địa chỉoprsrtrdimmedregisterRegister (direct)oprsrtregisterBase+index+MemoryimmedoprsrtImmediateimmedoprsrtPCPC-relative+Memory Các chỉ thị lệnh dài 32 bitsThống kê các kiểu địa chỉMeasured on the VAX-11Register operations account for 51% of all references~75% - displacement and immediate~85% - displacement, immediate and register indirectVí dụ: Tập lệnh MIPSĐịnh dạng trường lệnh 3 toán hạng :Complex operation many instructions with temporary values.Phân loại tập lệnhToán tử– Số học (add, multiply, subtract, divide, )– Logic (and, or, not, xor, )Dịch chuyển dữ liệu– Move (register to register)– Load (memory to register)– Store (register to memory)Điều khiển dữ liệu– Branch (có điều kiện, e.g., , ==)– Jump (không điều kiện, e.g., goto)Bảng tham khảo định dạng lệnhCác lệnh thực thiPhép toán (Data operations)– Số học (add, multiply, subtract, divide, )– Logic (and, or, not, xor, )Dịch chuyển dữ liệu (Data transfer)– Move (register to register)– Load (memory to register)– Store (register to memory)Rẽ nhánh (Sequencing)– Branch (conditional, e.g., , ==)– Jump (unconditional, e.g., goto)1. Data operations:add/sub2. Data transfers: load word/store word3. Sequencing: Branch/jumpCác phép toánProgram Counter (PC) lưu trữ địa chỉ lệnh.Các lệnh được nạp từ bộ nhớ vào thanh ghi lệnh.Bộ điều khiển giải mã lệnh và báo cho ALU và tệp thanh ghi phải làm gì.ALU thực thi lệnh và kết quả được chuyển lại thanh ghi dữ liệu Bộ điều khiển cập nhật lại giá trị của PC cho lệnh tiếp theo.Ví dụ về lệnh: Add/sub (1 of 2)Ví dụ về lệnh: Add/sub (2 of 2)Bộ đếm chương trình (PC) nạp lệnh từ thanh ghi lệnhControl báo cho ALU và tệp thanh ghi (Register File) phải làm gì. ALU ghi kết quả vào Register File.Thực hành: add/subf=(g+h) ‐(i+j)R3=fR4=gR5=hR6=IR7=jDịch chuyển dữ liệu1. ALU tính toán ra địa chỉ2. Địa chỉ gửi tới thanh ghi địa chỉ (Memory Address Register)3. Kết quả xác định hướng dịch chuyển đi/ đến được lưu trữ trên thanh ghi dữ liệu bộ nhớ (Memory Data Register)4. Dữ liệu từ bộ nhớ có thể được ghi lại trên tệp thanh ghi (Register File) hoặc ghi vào bộ nhớ.Lệnh tải từ: Load word (1 of 2)Lệnh tải từ: Load word (2 of 2)Sử dụng địa chỉ từ tệp thanh ghi để tải dữ liệu từ bộ nhớ Lệnh tải từ với độ lệch địa chỉ.Độ lệch được thêm vào địa chỉ như là một phần của các câu lệnh lw/swLệnh lưu từ: Store wordĐể thực hiện lưu trữ cần thông tin: Địa chỉ (từ ALU), dữ liệu (từ thanh ghi)Ví dụ: Biến A = 3 Địa chỉ của A = 24Thực hiện chương trình:Ghi giá trị A bằng 512Địa chỉ của A vào R5Lưu giá trị mới của A vào R6Store : Mem[R5]←R6Các lệnh điều khiển rẽ nhánhLệnh điều khiển rẽ nhánh– Câu lệnh nào được thực thi tiếp theo?– Thay đổi luồng điều khiển chương trình “control flow”Câu lệnh điều kiện trong MIPS– bne R0, R1, Label branch if not equal to label– beq R3, R4, Label branch if equal to labelExample:Lệnh nhảy không điều kiệnLệnh nhảy không điều kiện: jump– j Label jump to labelExample:Các chỉ thị rẽ nhánhThay đổi đường dữ liệu chương trình → Thay đổi bộ đếm chương trình PC– j jump Nhảy tới nhãn không điều kiện– bne branch not equal Nhảy tới nhãn nếu giá trị các thanh ghi không bằng nhauVí dụ: if (a==b) c=1; else c=2;Xác định địa chỉ rẽ nhánh có điều kiệnHUST-FET, 22/08/202136PCAdd3232323232offset163200sign-extendTrường 16 bit thấp của lệnh rẽ nhánhbranch dstaddress?Add432Lệnh nhảy không điều kiệnHUST-FET, 22/08/202137Lệnh nhảy không điều kiện: j label #go to label Định dạng lệnh (J Format):0x02 26-bit addressPC432263200từ trường 26 bits thấp của lệnh nhảyVòng lặpĐịa chỉ trong lệnh rẽ nhánh và lệnh nhảyQuestion:Sử dụng lệnh nhảy bne/beq với khoảng cách bao nhiêu?Answer:Từ -32,767 đến +32,768 lệnh từ chỉ thị lệnh hiện tại.Các lệnh rẽ nhánh– bne/beq I-format 16 bit immediate– j J-format 26 bit immediateĐịa chỉ là 32 bits! Điều khiển bằng cách nào?– Xem xét bne/beq như là độ lệch tương đối (relative offsets) (cộng với giá trị PC hiện thời)– Xem xét j như là một giá trị tuyệt đối (absolute value) (thay thế 26 bits của PC)Ví dụ nhảy địa chỉ: loopsBiên dịch thành mã máy Mã hóa và các định dạngĐịnh dạng lệnh (mã máy)Ngôn ngữ máy– Máy tính không hiểu được chuỗi ký tự sau “add R8, R17, R18”– Các lệnh phải được chuyển đổi thành ngôn ngữ máy(1s and 0s)Ví dụ:add R8, R17, R18 → 000000 10001 10010 01000 00000 100000Các trường lệnh MIPS• opcode mã lệnh xác định phép toán (e.g., “add” “lw”)• rs chỉ số thanh ghi chứa toán hạng nguồn 1 trong tệp thanh ghi• rt chỉ số thanh ghi chưa toán hạng nguồn 2 trong tệp thanh ghi• rd chỉ số thanh ghi lưu kết quả• shamt Số lượng dịch(cho chỉ thị dịch)• funct mã chức năng thêm cho phần mã lệnh (add = 32, sub =34)Định dạng lệnh MIPS• MIPS có 3 dạng chỉ thị :– R: operation 3 registers no immediate– I: operation 2 registers short immediate– J: jump 0 registers long immediateCâu hỏi: Lệnh cộng tức thời (addi) cần bao nhiêu bit để lưu giá trị hằng số?Trả lời: I-format: 5+5+6 bits = 16 bits. Giá trị nằm trong khoảng Từ -32,768 đến +32,767Tổng kết các lệnh MIPSHUST-FET, 22/08/202144CategoryInstrOpCExampleMeaningArithmetic(R & I format)add0 & 20add $s1, $s2, $s3$s1 = $s2 + $s3subtract0 & 22sub $s1, $s2, $s3$s1 = $s2 - $s3add immediate8addi $s1, $s2, 4$s1 = $s2 + 4shift left logical0 & 00sll $s1, $s2, 4$s1 = $s2 > 4 (fill with zeros)shift right arithmetic0 & 03sra $s1, $s2, 4$s1 = $s2 >> 4 (fill with sign bit)and0 & 24and $s1, $s2, $s3$s1 = $s2 & $s3or0 & 25or $s1, $s2, $s3$s1 = $s2 | $s3nor0 & 27nor $s1, $s2, $s3$s1 = not ($s2 | $s3)and immediatecand $s1, $s2, ff00$s1 = $s2 & 0xff00or immediatedor $s1, $s2, ff00$s1 = $s2 | 0xff00load upper immediateflui $s1, 0xffff$s1 = 0xffff0000Tổng kết các lệnh MIPSHUST-FET, 22/08/202145CategoryInstrOpCExampleMeaningDatatransfer(I format)load word23lw $s1, 100($s2)$s1 = Memory($s2+100)store word2bsw $s1, 100($s2)Memory($s2+100) = $s1load byte20lb $s1, 101($s2)$s1 = Memory($s2+101)store byte28sb $s1, 101($s2)Memory($s2+101) = $s1load half21lh $s1, 101($s2)$s1 = Memory($s2+102)store half29sh $s1, 101($s2)Memory($s2+102) = $s1Cond. branch(I & R format)br on equal4beq $s1, $s2, L if ($s1==$s2) go to Lbr on not equal5bne $s1, $s2, Lif ($s1 !=$s2) go to Lset on less than immediateaslti $s1, $s2, 100if ($s2 Big/Last FullPOP: Read from Mem(SP) Decrement SPPUSH: Increment SP Write to Mem(SP)growsupgrowsdownLittle --> Big/Next EmptyPOP: Decrement SP Read from Mem(SP)PUSH: Write to Mem(SP) Increment SPCall-Return Linkage: Stack FramesMany variations on stacks possible (up/down, last pushed /next )Compilers normally keep scalar variables in registers, not memory!FPARGSCallee SaveRegistersLocal VariablesSPReference args andlocal variables atfixed (positive) offsetfrom FPGrows and shrinks duringexpression evaluation(old FP, RA)High MemLow MemCác kiến trúc tập lệnh khác (ISAs)Có rất nhiều kiến trúc tập lệnh khác nhau (ISAs):– x86 (Intel/AMD)– ARM (ARM)– JVM (Java)– PPC (IBM, Motorola)– SPARC (Oracle, Fujitsu)– PTX (Nvidia)– etc.Chú ý đến một số vấn đề chính :– Các kiểu mã máy (Machine types)– Phân loại các kiểu tập lệnh (ISA classes)– Các chế độ đánh địa chỉ (Addressing modes)– Độ lớn của chỉ thị (Instruction width)– Phân biệt kiến trúc CISC vs. RISCPhân loại tập lệnh cơ bản• Accumulator (1 register) – 1 address add A acc ← acc + mem[A]• General purpose register file (load/store) – 3 addresses add Ra Rb Rc Ra ← Rb + Rc load Ra Rb Ra ← Mem[Rb]• General purpose register file (Register - Memory)– 2 address add Ra B Ra ← Mem[B]• Stack (not a register file but an operand stack)– 0 address add tos ← tos + next tos = top of stack• Comparison:– Bytes per instruction? Number of instructions? Cycles per instruction?Các chế độ đánh địa chỉTổng kết: Các kiến trúc tập lệnh• Architecture = what’s visible to the program about the machine– Not everything in the implementation is “visible”– The implementation may not follow the architecture– The invisible stuff is the “microarchitecture” and it’s very messy, but very fun (huge engineering challenges; lots of money)• A big piece of the ISA is the assembly language structure– Primitive instructions (appear to) execute sequentially and atomically– Formats, computations, addressing modes, etc.• CISC: lots of complicated instructions• RISC: a few basic instructions• All recent machines are RISC, but x86 is still CISC (although they do RISC tricks on the inside)

Các file đính kèm theo tài liệu này:

  • pptxbai_giang_kien_truc_may_tinh_chuong_2_kien_truc_tap_lenh.pptx