Xem lại cách thực thi một chương trình
Phân loại lệnh trong MIPS
Truy cập bộ nhớ trong MIPS
Chi tiết về các toán tử
– Add, sub, etc.
Chi tiết về các lệnh chuyển đổi dữ liệu
– Load, store
Chi tiết về các lệnh điều khiển
– Jump, branch if equal
30 trang |
Chia sẻ: lylyngoc | Lượt xem: 1838 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Kiến trúc tập lệnh 1, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Click to edit Master title style Click to edit Master text styles Second level Third level Fourth level Fifth level 9/13/13 ‹#› Kiến trúc tập lệnh1 Nội dung Xem lại cách thực thi một chương trình Phân loại lệnh trong MIPS Truy cập bộ nhớ trong MIPS Chi tiết về các toán tử – Add, sub, etc. Chi tiết về các lệnh chuyển đổi dữ liệu – Load, store… Chi tiết về các lệnh điều khiển – Jump, branch if equal… Thực thi lệnh Today we’re going to learn the details! Thực thi chương trình Bộ 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ụng 4. Thực hiện tính toán 5. Tìm lệnh tiếp theo Lặp lại quá trình … Bài giảng nhấn mạnh sự thực thi trong bộ xử lý MIPS Ví 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ệnh Toá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ệnh Tập thanh ghi trong MIPS 32 Thanh ghi đa dụng. – Kí hiệu R0…R31 hoặc $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: lưu 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, R0 Bộ 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ỉ bộ nhớ trong mảng Đị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ớ (16EB) – 64-bit x86 lên tới ~48‐bits một ô nhớ (4PB). Tổ chức bộ nhớ Các kiểu dữ liệu trong MIPS được định nghĩa là 1 từ – Một từ gồm 32 bits = 4 bytes – 232 bytes = 230 words: addresses 0, 4, 8, … Câu hỏi: Đâu là 2 bit cuối cùng trong một địa chỉ từ ? Dữ liệu: Kiểu và kích thước • Đị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 • Địa chỉ Unalignment thì không (e.g., 1, 3, 7, 63) • Một số kỹ thuật hỗ trợ truy cập Unaligment (not MIPS) – Phần cứng có thể chuyển đổi thành đa truy cập định tuyến (complex) – Phần cứng có thể dò được và có phần mềm cố định truy cập không định tuyến (slow) • Một số nhược điểm – 2 truy cập bộ nhớ cộng gộp tạo ra dữ liệu unaligned – Intel cung cấp hỗ trợ thực thi mức cao trên vào năm 2010 (Nehalem) Truy nhập alignment (Access alignment) Question: Why do we care about in‐order and atomic execution? Answer: Without it we could not understand the program. Processor execution model Bộ xử lý thực thi lệnh theo 2 chế độ sequential và atomic – Sequential: Thực thi các lệnh tuần tự – Atomic: Thực thi lệnh cùng một lúc Sequential – Chương trình : R2 = R1 + R2 then R3 = R1 + R2 – Processor may not do: R3 = R1 + R2 then R2 = R1 + R2 ← wrong result Atomic – Chương trình : R2 = R1 + R2 then R3 = R1 + R2 – Bộ xử lý phải thực hiện xong tính toán: R2= R1 + R2 trước khi bắt đầu tính R3 = R1 + R2 Processors don’t do either of these things (too slow) – But it’s important that they make it look like they do – We’ll talk a lot about this when we get to pipelines Chương trình và dữ liệu được lưu trữ trong bộ nhớ – Các lệnh phải được nạp từ bộ nhớ để thực thi – Dữ liệu phải được nạp từ bộ nhớ để tính toán Máy tính lưu trữ chương trình Ví dụ: Các chỉ thị lệnh Phé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/sub 2. Data transfers: load word/store word 3. Sequencing: Branch/jump Chi tiết về các chỉ thị lệnh Program 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 tệp thanh ghi. Bộ điều khiển cập nhật lại giá trị của PC cho lệnh tiếp theo. Add/sub example (1 of 2) Add/sub example (2 of 2) Bộ đếm chương trình (PC) nạp lệnh từ thanh ghi lệnh Control báo cho ALU và thanh ghi dữ liệu (Register File) phải làm gì. ALU ghi kết quả vào Register File. Thực hành: add/sub f=(g+h) ‐(i+j) R3=f R4=g R5=h R6=i R7=j Các lệnh dịch chuyển dữ liệu Chi tiết về dịch chuyển dữ liệu 1. ALU tạo ra địa chỉ 2. Địa chỉ gửi tới thanh ghi địa chỉ bộ nhớ (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ớ. Load word example (1 of 2) Load word example (2 of 2) Sử dụng địa chỉ từ thanh ghi tệp để tải dữ liệu từ bộ nhớ Load word with offset (độ lệ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/sw Store word example Để thực hiện lưu trữ cần thông tin: Địa chỉ (từ ALU), dữ liệu (từ thanh ghi) Bài tập Biến A = 3 Địa chỉ của A = 24 Program: Ghi giá trị 512 vào A Lấy địa chỉ của A trong R5 Lấy giá trị mới của A trong R6 Lưu giá trị R6 vào ô nhớ 5: Mem[R5]←R6 Các chỉ thị điều khiển, rẽ nhánh Các lệnh điều khiển rẽ nhánh Lệ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 label Example: Lệnh nhảy không điều kiện Lệnh nhảy không điều kiện: jump – j Label jump to label Example: Chỉ thị rẽ nhánh Change the flow of the program → change the Program Counter – j jump goto label no matter what – bne branch not equal goto label only if registers are not equal Example: if (a==b) c=1; else c=2; Vòng lặp