Bài giảng môn Kiến trúc máy tính - Chương 4: Kiến trúc tập lệnh (Instruction Set Architecture)
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng môn Kiến trúc máy tính - Chương 4: Kiến trúc tập lệnh (Instruction Set Architecture)", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Tài liệu đính kèm:
- bai_giang_mon_kien_truc_may_tinh_chuong_4_kien_truc_tap_lenh.ppt
Nội dung text: Bài giảng môn Kiến trúc máy tính - Chương 4: Kiến trúc tập lệnh (Instruction Set Architecture)
- Chương 4 Kiến trúc tập lệnh (Instruction Set Architecture) 1
- Nội dung • Mô hình lập trình của máy tính • Các đặc trưng của lệnh máy • Các kiểu thao tác của lệnh • Các phương pháp định địa chỉ • Phân loại tập lệnh • Kiến trúc tập lệnh Intel x86 2
- Mô hình lập trình của máy tính • Vị trí kiến trúc tập lệnh ISA trong máy tính – Nằm giữa phần cứng và NNLT cấp cao HLL – Giúp phần mềm tương thích khi kiến trúc phần cứng thay đổi 3
- Mô hình lập trình của máy tính • Máy tính theo quan điểm lập trình 4
- Mô hình lập trình của máy tính • Ví dụ về sự thi hành chương trình 5
- Mô hình lập trình của máy tính • Tập thanh ghi (Registers) – Chứa các thông tin tạm thời phục vụ cho hoạt động ở thời điểm hiện tại của CPU – Được coi là mức đầu tiên của hệ thống bộ nhớ – Số lượng thanh ghi nhiều → tăng hiệu năng của CPU – Có hai loại thanh ghi: • Các thanh ghi lập trình được • Các thanh ghi không lập trình được 6
- Mô hình lập trình của máy tính • Phân loại thanh ghi theo chức năng – Thanh ghi địa chỉ: quản lý địa chỉ của bộ nhớ hay cổng IO. – Thanh ghi dữ liệu: chứa tạm thời các dữ liệu. – Thanh ghi đa năng: có thể chứa địa chỉ hoặc dữ liệu. – Thanh ghi điều khiển/trạng thái: chứa các thông tin điều khiển và trạng thái của CPU. – Thanh ghi lệnh: chứa lệnh đang được thực hiện. 7
- Mô hình lập trình của máy tính • Một số thanh ghi điển hình – Các thanh ghi địa chỉ (Address Register) • Bộ đếm chương trình PC (Program Counter) • Con trỏ dữ liệu DP (Data Pointer) • Con trỏ ngăn xếp SP (Stack Pointer) • Thanh ghi cơ sở và thanh ghi chỉ số (Base Register & Index Register) – Các thanh ghi dữ liệu (Data Register) – Thanh ghi trạng thái (Status Register) 8
- Mô hình lập trình của máy tính • Bộ đếm chương trình PC – Còn được gọi là con trỏ lệnh IP (Instruction Pointer) – Giữ địa chỉ của lệnh tiếp theo sẽ được thi hành. – Sau khi một lệnh được nhận vào, nội dung PC tự động tăng để trỏ sang lệnh kế tiếp. • Thanh ghi con trỏ dữ liệu DP – Chứa địa chỉ của ô nhớ dữ liệu mà CPU muốn truy cập – Thường có nhiều thanh ghi con trỏ dữ liệu cho phép chương trình có thể truy cập nhiều vùng nhớ đồng thời. 9
- Mô hình lập trình của máy tính • Ngăn xếp (Stack) – Ngăn xếp là vùng nhớ có cấu trúc LIFO (Last In - First Out) hoặc FILO (First In - Last Out) – Ngăn xếp thường dùng để phục vụ cho chương trình con – Đáy ngăn xếp là một ô nhớ xác định – Đỉnh ngăn xếp là thông tin nằm ở vị trí trên cùng trong ngăn xếp – Đỉnh ngăn xếp có thể bị thay đổi 10
- Mô hình lập trình của máy tính • Con trỏ ngăn xếp SP (Stack Pointer) – Chứa địa chỉ của ô nhớ đỉnh ngăn xếp – Khi cất một thông tin vào ngăn xếp: • Thao tác PUSH • Nội dung của SP tự động tăng • Thông tin được cất vào ô nhớ đang trỏ bởi SP – Khi lấy một thông tin ra khỏi ngăn xếp: • Thao tác POP • Thông tin được đọc từ ô nhớ đang trỏ bởi SP • Nội dung của SP tự động giảm – Khi ngăn xếp rỗng, SP trỏ vào đáy 11
- Mô hình lập trình của máy tính • Thanh ghi cơ sở và thanh ghi chỉ số – Thanh ghi cơ sở: chứa địa chỉ của ngăn nhớ cơ sở (địa chỉ cơ sở) – Thanh ghi chỉ số: chứa độ lệch địa chỉ giữa ngăn nhớ mà CPU cần truy cập so với ngăn nhớ cơ sở (chỉ số) – Địa chỉ của ngăn nhớ cần truy cập = địa chỉ cơ sở + chỉ số 12
- Mô hình lập trình của máy tính • Thanh ghi dữ liệu (Data Register) – Chứa các dữ liệu tạm thời hoặc các kết quả trung gian – Cần có nhiều thanh ghi dữ liệu – Các thanh ghi số nguyên: 8, 16, 32, 64 bit – Các thanh ghi số dấu chấm động: 32, 64, 80 bit • Thanh ghi trạng thái (Status Register) – Còn gọi là thanh ghi cờ (Flags Register) hoặc từ trạng thái chương trình PSW (Program Status Word) – Chứa các thông tin trạng thái của CPU • Các cờ phép toán: báo hiệu trạng thái của kết quả phép toán • Các cờ điều khiển: biểu thị trạng thái điều khiển của CPU 13
- Mô hình lập trình của máy tính • Ví dụ cờ phép toán – Zero Flag (cờ rỗng): được thiết lập lên 1 khi kết quả của phép toán bằng 0. – Sign Flag (cờ dấu): được thiết lập lên 1 khi kết quả phép toán nhỏ hơn 0 (kết qủa âm) – Carry Flag (cờ nhớ): được thiết lập lên 1 nếu phép toán có nhớ ra ngoài bit cao nhất → cờ báo tràn với số không dấu. – Overflow Flag (cờ tràn): được thiết lập lên 1 nếu cộng hai số nguyên cùng dấu mà kết quả có dấu ngược lại → cờ báo tràn với số có dấu . 14
- Mô hình lập trình của máy tính • Ví dụ cờ điều khiển – Interrupt Flag (Cờ cho phép ngắt): • Nếu IF = 1 → CPU ở trạng thái cho phép ngắt với tín hiệu yêu cầu ngắt từ bên ngoài gửi tới • Nếu IF = 0 → CPU ở trạng thái cấm ngắt với tín hiệu yêu cầu ngắt từ bên ngoài gửi tới – Direction Flag (Cờ hướng): • Nếu DF=0 → Truy cập bộ nhớ theo hướng tăng • Nếu DF=1 → Truy cập bộ nhớ theo hướng giảm 15
- Mô hình lập trình của máy tính • Ví dụ: Tập thanh ghi của một số bộ xử lý 16
- Các đặc trưng của lệnh máy • Giới thiệu chung về tập lệnh – Mỗi bộ xử lý có một tập lệnh xác định – Tập lệnh thường có hàng chục đến hàng trăm lệnh – Mỗi lệnh là một chuỗi số nhị phân mà bộ xử lý hiểu được để thực hiện một thao tác xác định. – Các lệnh được mô tả bằng các ký hiệu gợi nhớ → chính là các lệnh của hợp ngữ (assembly), ví dụ: ADD, SUB, LOAD, STORE, 17
- Các đặc trưng của lệnh máy • Các thành phần của lệnh máy Opcode Operand address – Mã thao tác (operation code): mã hóa cho thao tác mà bộ xử lý phải thực hiện bằng số nhị phân (làm gì?) – Địa chỉ toán hạng (operand address): chỉ ra nơi chứa các toán hạng mà thao tác sẽ tác động (làm ở đâu?) • Toán hạng nguồn: dữ liệu vào của thao tác • Toán hạng đích: dữ liệu ra của thao tác • Toán hạng: Thanh ghi, bộ nhớ, thiết bị ngoại vi, • Ví dụ: 1 lệnh 16 bit có 2 toán hạng 18
- Các đặc trưng của lệnh máy • Số lượng địa chỉ toán hạng trong lệnh – Ba địa chỉ toán hạng: • 2 toán hạng nguồn, 1 toán hạng đích • Ví dụ : a = b + c → ADD A, B, C • Từ lệnh dài vì phải mã hoá địa chỉ cho cả ba toán hạng – Hai địa chỉ toán hạng: • Một toán hạng vừa là toán hạng nguồn vừa là toán hạng đích; toán hạng còn lại là toán hạng nguồn • Ví dụ : a = a + b → ADD A, B • Giá trị cũ của 1 toán hạng nguồn bị mất vì phải chứa kết quả • Rút gọn độ dài từ lệnh, được sử dụng phổ biến 19
- Các đặc trưng của lệnh máy • Số lượng địa chỉ toán hạng trong lệnh (tiếp) – Một địa chỉ toán hạng: • Một toán hạng được chỉ ra trong lệnh • Một toán hạng là ngầm định, thường là thanh ghi tích lũy (accumulator) • Ví dụ : a = b + c LOAD B ADD C STORE A – Không địa chỉ toán hạng: • Các toán hạng đều được ngầm định: Sử dụng Stack • Ví dụ: a = b + c PUSH B PUSH C ADD POP A 20
- Các đặc trưng của lệnh máy • Đánh giá về số địa chỉ toán hạng – Nhiều địa chỉ toán hạng • Các lệnh phức tạp hơn • Cần nhiều thanh ghi • Chương trình có ít lệnh hơn • Nhận lệnh và thực hiện lệnh chậm hơn – Ít địa chỉ toán hạng • Các lệnh đơn giản hơn • Cần ít thanh ghi • Chương trình có nhiều lệnh hơn • Nhận lệnh và thực hiện lệnh nhanh hơn 21
- Các đặc trưng của lệnh máy • Các kiểu toán hạng – Địa chỉ – Số • Số nguyên • Số dấu chấm động Câu hỏi: Khi đọc trong 1 ô • Mã BCD nhớ nhận được gía trị nhị phân 65, làm sao biết – Ký tự được đây là gì? • Mã ASCII • Số nguyên 65 • Ký tự ‘A’ – Dữ liệu logic • Lệnh CT 65 • Các bit hoặc các cờ • Địa chỉ 65 22
- Các kiểu thao tác của lệnh • Phân loại lệnh: – Di chuyển dữ liệu – Xử lý số học với số nguyên – Xử lý logic – Điều khiển vào-ra (IO) – Chuyển điều khiển (rẽ nhánh) – Điều khiển hệ thống 23
- Các kiểu thao tác của lệnh • Các lệnh di chuyển dữ liệu – MOVE Copy dữ liệu từ nguồn đến đích – LOAD Nạp dữ liệu từ bộ nhớ đến bộ xử lý – STORE Cất dữ liệu từ bộ xử lý đến bộ nhớ – EXCHANGE Hoán đổi nội dung của nguồn và đích – CLEAR Chuyển các bit 0 vào toán hạng đích – SET Chuyển các bit 1 vào toán hạng đích – PUSH Cất nội dung toán hạng nguồn vào ngăn xếp – POP Lấy nội dung đỉnh ngăn xếp đưa đến toán hạng đích 24
- Các kiểu thao tác của lệnh • Các lệnh số học – ADD Cộng hai toán hạng – SUBTRACT Trừ hai toán hạng – MULTIPLY Nhân hai toán hạng – DIVIDE Chia hai toán hạng – ABSOLUTE Lấy trị tuyệt đối toán hạng – NEGATE Đổi dấu toán hạng (lấy 0 trừ toán hạng) – INCREMENT Tăng toán hạng thêm 1 – DECREMENT Giảm toán hạng đi 1 – COMPARE Trừ hai toán hạng để lập cờ 25
- Các kiểu thao tác của lệnh • Các lệnh logic – AND Thực hiện phép AND hai toán hạng – OR Thực hiện phép OR hai toán hạng – XOR Thực hiện phép XOR hai toán hạng – NOT Đảo bit của toán hạng (lấy bù 1) – TEST Thực hiện phép AND hai toán hạng để lập cờ 26
- Các kiểu thao tác của lệnh • Ví dụ các lệnh logic – Giả sử có hai thanh ghi chứa dữ liệu như sau: (R1) = 1010 1010 (R2) = 0000 1111 – R1 (R1) AND (R2) = 0000 1010 Phép toán AND dùng để xoá (Clear) một số bit và giữ nguyên một số bit còn lại của toán hạng. – R1 (R1) OR (R2) = 1010 1111 Phép toán OR dùng để thiết lập (Set) một số bit và giữ nguyên một số bit còn lại của toán hạng. – R1 (R1) XOR (R2) = 1010 0101 Phép toán XOR dùng để đảo một số bit và giữ nguyên một số bit còn lại của toán hạng. 27
- Các kiểu thao tác của lệnh • Các lệnh logic (tiếp) – SHIFT Dịch trái (phải) toán hạng – ROTATE Quay trái (phải) toán hạng 28
- Các kiểu thao tác của lệnh • Các lệnh nhập xuất chuyên dụng – INPUT : Copy dữ liệu từ một cổng xác định đưa đến đích (thiết bị → bộ nhớ) – OUTPUT: Copy dữ liệu từ nguồn đến một cổng xác định (bộ nhớ → thiết bị) • Các lệnh chuyển điều khiển – JUMP (BRANCH): Lệnh rẽ nhánh không điều kiện – CONDITIONAL JUMP : Lệnh rẽ nhánh có điều kiện – CALL : Lệnh gọi chương trình con – RETURN : Lệnh trở về từ chương trình con 29
- Các kiểu thao tác của lệnh • Lệnh rẽ nhánh có điều kiện – Trong lệnh có kèm theo điều kiện – Kiểm tra điều kiện trong lệnh: • Nếu điều kiện đúng → chuyển tới thực hiện lệnh ở vị trí có địa chỉ XXX PC XXX • Nếu điều kiện sai → chuyển sang thực hiện lệnh_kế_tiếp – Điều kiện thường được kiểm tra thông qua các cờ – Có nhiều lệnh rẽ nhánh theo các điều kiện khác nhau 30
- Các kiểu thao tác của lệnh • Minh hoạ lệnh rẽ nhánh không và có điều kiện 31
- Các kiểu thao tác của lệnh • Minh hoạ lệnh rẽ nhánh không và có điều kiện (tiếp) 32
- Các kiểu thao tác của lệnh • Lệnh CALL và RETURN – CALL: Gọi chương trình con • Cất nội dung PC (chứa địa chỉ của lệnh_kế_tiếp) ra Stack • Nạp vào PC địa chỉ lệnh đầu tiên của chương trình con được gọi • Bộ xử lý được chuyển sang thực hiện chương trình con tương ứng – RETURN: Trở về từ chương trình con • Lấy địa chỉ của lệnh_kế_tiếp được cất ở Stack nạp trả lại cho PC • Bộ xử lý được điều khiển quay trở về thực hiện tiếp lệnh nằm sau lệnh CALL 33
- Các kiểu thao tác của lệnh • Gọi các chương trình con lồng nhau 34
- Các kiểu thao tác của lệnh • Truyền tham số giữa các chương trình con – Truyền qua Stack – Ví dụ: P gọi Q(y1,y2) có 2 tham số. 35
- Các kiểu thao tác của lệnh • Các lệnh điều khiển hệ thống – HALT : Dừng thực hiện chương trình – WAIT : Tạm dừng thực hiện chương trình, lặp kiểm tra điều kiện cho đến khi thoả mãn thì tiếp tục thực hiện – NO OPERATION : Không thực hiện gì cả – LOCK : Cấm không cho xin chuyển nhượng bus – UNLOCK : Cho phép xin chuyển nhượng bus 36
- Các phương pháp định địa chỉ • Khái niệm về định địa chỉ (addressing) – Toán hạng của lệnh có thể là: • Một giá trị cụ thể nằm ngay trong lệnh • Nội dung của thanh ghi • Nội dung của ngăn nhớ hoặc cổng IO – Phương pháp định địa chỉ (addressing modes) là cách thức địa chỉ hóa trong vùng địa chỉ của lệnh để xác định nơi chứa toán hạng • Định địa chỉ tức thì • Định địa chỉ thanh ghi • Định địa chỉ trực tiếp • Định địa chỉ gián tiếp qua thanh ghi • Định địa chỉ gián tiếp • Định địa chỉ dịch chuyển 37
- Các phương pháp định địa chỉ • Định địa chỉ tức thì (Immediate Addressing) – Toán hạng nằm ngay trong vùng địa chỉ của lệnh – Chỉ có thể là toán hạng nguồn – Ví dụ: ADD R1, 5 ; R1 R1+5 – Không tham chiếu bộ nhớ – Truy cập toán hạng rất nhanh – Dải giá trị của toán hạng bị hạn chế 38
- Các phương pháp định địa chỉ • Định địa chỉ thanh ghi (Register Addressing) – Toán hạng được chứa trong thanh ghi có tên trong vùng địa chỉ – Ví dụ: ADD R1, R2 ; R1 R1+R2 – Số lượng thanh ghi ít → vùng địa chỉ cần ít bit hơn – Không tham chiếu bộ nhớ – Truy cập toán hạng nhanh – Tăng số lượng thanh ghi → hiệu quả hơn 39
- Các phương pháp định địa chỉ • Định địa chỉ trực tiếp (Direct Addressing) – Toán hạng là ngăn nhớ có địa chỉ được chỉ ra trực tiếp trong vùng địa chỉ của lệnh – Ví dụ: • ADD R1, A ;R1 R1 + (A) • Cộng nội dung thanh ghi R1 với nội dung của ô nhớ có địa chỉ là A • Tìm toán hạng trong bộ nhớ ở địa chỉ A – CPU tham chiếu bộ nhớ một lần để truy nhập dữ liệu 40
- Các phương pháp định địa chỉ • Định địa chỉ gián tiếp qua thanh ghi (Register Indirect Addressing) – Toán hạng là ô nhớ có địa chỉ nằm trong thanh ghi – Vùng địa chỉ cho biết tên thanh ghi đó. Thanh ghi có thể là ngầm định – Thanh ghi này được gọi là con trỏ (pointer) – Vùng nhớ có thể được tham chiếu là lớn (2n, với n là độ dài của thanh ghi) 41
- Các phương pháp định địa chỉ • Định địa chỉ gián tiếp qua bộ nhớ (Indirect Memory Addressing) – Bộ nhớ được trỏ bởi vùng địa chỉ của lệnh chứa địa chỉ của toán hạng – Có thể gián tiếp nhiều lần – Giống như khái niệm biến con trỏ và biến động trong lập trình – CPU phải thực hiện tham chiếu bộ nhớ nhiều lần để tìm toán hạng → chậm – Vùng nhớ có thể được tham chiếu là lớn 42
- Các phương pháp định địa chỉ • Định địa chỉ dịch chuyển (Displacement Addressing) – Để xác định toán hạng, vùng địa chỉ chứa hai thành phần: • Tên thanh ghi • Hằng số – Địa chỉ của toán hạng = nội dung thanh ghi + hằng số – Thanh ghi có thể được ngầm định 43
- Các phương pháp định địa chỉ • Định địa chỉ dịch chuyển (tiếp) – Các dạng địa chỉ dịch chuyển • Địa chỉ hoá tương đối với PC – Thanh ghi là Bộ đếm chương trình PC – Toán hạng có địa chỉ cách ô nhớ được trỏ bởi PC một độ lệch xác định • Định địa chỉ cơ sở (base) – Thanh ghi chứa địa chỉ cơ sở – Hằng số là chỉ số • Định địa chỉ chỉ số (index) – Hằng số là địa chỉ cơ sở – Thanh ghi chứa chỉ số 44
- Phân loại tập lệnh • CISC và RISC – CISC:Complex Instruction Set Computer: • Máy tính với tập lệnh đầy đủ • Ví dụ: Intel x86, Motorola 680x0 – RISC:Reduced Instruction Set Computer: • Máy tính với tập lệnh thu gọn • Ví dụ: SunSPARC, Power PC, MIPS, ARM – RISC đối nghịch với CISC 45
- Phân loại tập lệnh • Các đặc trưng của CISC – Số lượng lệnh nhiều (vài trăm lệnh) → Dễ lập trình, chương trình ngắn hơn (chiếm ít bộ nhớ) – Truy cập toán hạng ở các thanh ghi lẫn bộ nhớ – Cấu trúc CPU phức tạp – Thời gian thực hiện lệnh cần nhiều chu kỳ máy – Số lượng khuôn dạng lệnh lớn – CPU có tập thanh ghi nhỏ – Có nhiều mode địa chỉ – Một số lệnh không có mạch phần cứng riêng (cần có vi chương trình để thực hiện) 46
- Phân loại tập lệnh • Các đặc trưng của RISC – Số lượng lệnh ít (vài chục lệnh) và cơ bản nhất → Khó lập trình, chương trình dài hơn – Hầu hết các lệnh truy cập toán hạng ở các thanh ghi – Cấu trúc CPU đơn giản – Thời gian thực hiện lệnh là một chu kỳ máy – Số lượng khuôn dạng lệnh ít (<=4) – CPU có tập thanh ghi lớn – Có ít mode địa chỉ (<=4) – Mỗi lệnh có mạch phần cứng riêng (không cần vi chương trình) 47
- Phân loại tập lệnh • So sánh CISC và RISC Loại CISC RISC . Hãng SX IBM DEC VAX Intel Motorola MIPS Hệ thống MT 370/168 11/780 486 88000 R4000 Năm SX 1973 1978 1989 1988 1991 Số lượng lệnh 208 303 235 51 94 Kích thước lệnh (B) 2-6 2-57 1-11 4 32 Addressing modes 4 22 11 3 1 Số lượng thanh ghi 16 16 8 32 32 Vi ChươngTrình (KB) 420 480 246 0 0 48
- Phân loại tập lệnh • Thống kê 10 lệnh Intel x86 sử dụng nhiều nhất TT Lệnh Tỷ lệ (%) 1 load 22% 2 conditional branch 20% 3 compare 16% 4 store 12% 5 add 8% 6 and 6% 7 sub 5% 8 move register-register 4% 9 call 1% 10 return 1% Total 96% 49
- Phân loại tập lệnh • Tại sao kiến trúc CISC của Intel vẫn sử dụng nhiều? – Vấn đề tương thích – Dễ xây dựng trình dịch (compiler) hơn – Phù hợp với nhiều NNLT cấp cao (HLL) – Phần mềm có sẵn đang sử dụng nhiều – Thực tế hiện nay sử dụng hệ thống tập lệnh lai giữa RISC và CISC • Tổ chức bên trong theo RISC • Kiến trúc lập trình bên ngoài theo CISC • Sử dụng vi chương trình làm trung gian 50
- Phân loại tập lệnh • Ưu nhược điểm của CISC – Ưu điểm • Chương trình ít lệnh hơn, ít tốn bộ nhớ để lưu trữ • Truy cập bộ nhớ với ít lệnh hơn • Chương trình dễ viết, dễ đọc và dễ hiểu hơn – Nhược điểm • Dạng lệnh phức tạp, giải mã lệnh chậm • Lệnh phức tạp nên không uyển chuyển, không áp dụng cho nghiều trường hợp khác nhau • Xử lý ngắt chậm hơn (do lệnh chiếm nhiều chu kỳ máy) nên thời gian đáp ứng kém 51
- Kiến trúc tập lệnh Intel x86 52
- Kiến trúc tập lệnh Intel x86 53
- Kiến trúc tập lệnh Intel x86 54
- Kiến trúc tập lệnh Intel x86 55
- Kiến trúc tập lệnh Intel x86 56
- Kiến trúc tập lệnh Intel x86 57
- Kiến trúc tập lệnh Intel x86 59
- Kiến trúc tập lệnh Intel x86 60
- Kiến trúc tập lệnh Intel x86 61
- Kiến trúc tập lệnh Intel x86 62
- Kiến trúc tập lệnh Intel x86 63
- Kiến trúc tập lệnh Intel x86 65
- Kiến trúc tập lệnh Intel x86 66
- Kiến trúc tập lệnh Intel x86 • Ví dụ về khuôn dạng lệnh của CPU Intel x86 67
- Kiến trúc tập lệnh Intel x86 68
- Kiến trúc tập lệnh Intel x86 69
- Kiến trúc tập lệnh Intel x86 70
- Câu hỏi 71