Bài giảng Hệ thống máy tính và ngôn ngữ C - Chương 4: Mô hình Von Neumann và kiến trúc tập lệnh LC-3
4.1 Các thành phần cơ bản
4.2 Một ví dụ về mô hình von Neumann: LC-3
4.3 Quá trình xử lý lệnh
4.4 Thay đổi quá trình xử lý lệnh
4.5 Khái niệm ISA LC-3
4.6 Nhóm lệnh thi hành
4.7 Nhóm lệnh di chuyển dữ liệu
4.8 Nhóm lệnh điều khiển
4.9 Ba cấu trúc lệnh trong LC-3
4.10 Một ví dụ
tạo ra cũng tương tự như với lệnh LD và ST. Tuy nhiên, thay vì đây địa chỉ của toán hạng chứa dữ liệu cần được nạp hay lưu, thì toán hạng này lại chứa địa chỉ của toán hạng là dữ liệu cần được nạp hay lưu. Vì phải qua trung gian như vậy nên ta mới có kiểu định vị địa chỉ gián tiếp. Với kiểu định vị này, ta thấy toán hạng chứa dữ liệu cần làm việc có thể ở bất cứ đâu trong bộ nhớ 64K, chứ không bị giới hạn trong tầm 9 bit [8:0] như trong trường hợp lệnh LD và ST. Thanh ghi đích cho LDI và thanh ghi nguồn trong STI cũng được xác định bằng các bit [11:9] trong lệnh. CHƢƠNG 4 MÔ HÌNH VON NEUMANN VÀ KIẾN TRÚC TẬP LỆNH LC-3 4.7 Nhóm lệnh di chuyển dữ liệu 4.7.2 Indirect mode Ví dụ 4.10: Nếu lệnh ở địa chỉ x4A1B, và chứa đựng của x49E8 là x2110, việc thực thi lệnh này sẽ lấy dữ liệu từ ô nhớ có địa chỉ x2110 nạp vào thanh ghi R3. CHƢƠNG 4 MÔ HÌNH VON NEUMANN VÀ KIẾN TRÚC TẬP LỆNH LC-3 4.7 Nhóm lệnh di chuyển dữ liệu 4.7.2 Indirect mode CHƢƠNG 4 MÔ HÌNH VON NEUMANN VÀ KIẾN TRÚC TẬP LỆNH LC-3 4.7 Nhóm lệnh di chuyển dữ liệu 4.7.3 Base+offset mode Lệnh LDR (opcode = 0110) và STR (opcode = 0111) dùng kiểu định vị Base+offset. Kiểu định vị này xác định địa chỉ toán hạng trong bộ nhớ 64K bằng cách lấy 6 bit offset được mở rộng dấu IR[5:0] cộng với thanh ghi nền trong vùng IR[8:6]. Ví dụ 4.11: Nếu R2 đang chứa trị 16 bit x2345, lệnh nạp R1 nội dung của ô nhớ x2362 (x2345 + x1D). CHƢƠNG 4 MÔ HÌNH VON NEUMANN VÀ KIẾN TRÚC TẬP LỆNH LC-3 4.7 Nhóm lệnh di chuyển dữ liệu 4.7.3 Base+offset mode CHƢƠNG 4 MÔ HÌNH VON NEUMANN VÀ KIẾN TRÚC TẬP LỆNH LC-3 4.7 Nhóm lệnh di chuyển dữ liệu 4.7.4 Immediate mode Ví dụ 4.12: Nếu ô nhớ x4018 chứa lệnh LEA R5, #-3, và thanh ghi PC chứa x4018, ta có lệnh CHƢƠNG 4 MÔ HÌNH VON NEUMANN VÀ KIẾN TRÚC TẬP LỆNH LC-3 4.7 Nhóm lệnh di chuyển dữ liệu CHƢƠNG 4 MÔ HÌNH VON NEUMANN VÀ KIẾN TRÚC TẬP LỆNH LC-3 4.7 Nhóm lệnh di chuyển dữ liệu 4.7.5 Ví dụ: Giả sử các lệnh được chứa trong các ô nhớ từ địa chỉ x30F6 tới x30FC như hình 4.10 sau. CHƢƠNG 4 MÔ HÌNH VON NEUMANN VÀ KIẾN TRÚC TẬP LỆNH LC-3 4.8 Nhóm lệnh điều khiển Các lệnh điều khiển thay đổi trình tự các lệnh thực thi trong chương trình. LC-3 có năm mã lệnh thực hiện việc này: lệnh rẻ nhánh (Branch) có điều kiện, lệnh nhảy (Jump) không điều kiện, gọi chương trình con, TRAP, và lệnh trả vể từ ngắt (Interrupt). Trong mục này chủ yếu chúng ta nói về lệnh rẻ nhánh có điều kiện, lệnh nhảy không điều kiện, và TRAP. 4.8.1 Lệnh rẻ nhánh có điều kiện Định dạng của lệnh rẻ nhánh có điều kiện (opcode = 0000) như sau: CHƢƠNG 4 MÔ HÌNH VON NEUMANN VÀ KIẾN TRÚC TẬP LỆNH LC-3 4.8 Nhóm lệnh điều khiển 4.8.1 Lệnh rẻ nhánh có điều kiện Trong LC-3, tất cả các lệnh mà có ghi trị vào các thanh ghi đa dụng sẽ đặt trị cho ba mã điều kiện (NZP) là ADD, AND, NOT, LD, LDI, LDR, và LEA. Các mã điều kiện được lệnh rẻ nhánh có điều kiện sử dụng để xác định xem có thay đổi trình tự lệnh hay không; nghĩa là, xem sự thực thi lệnh có theo trình tự thường thấy như là kết quả của việc tăng thanh ghi PC trong phase FETCH của mỗi lệnh hay không. CHƢƠNG 4 MÔ HÌNH VON NEUMANN VÀ KIẾN TRÚC TẬP LỆNH LC-3 4.8 Nhóm lệnh điều khiển 4.8.1 Lệnh rẻ nhánh có điều kiện Trong khi thực hiện phase EXECUTE, bộ xử lý khảo sát các mã điều kiện mà các bit tương ứng của nó trong lệnh là 1. Nếu có một mã điều kiện mà được kiểm tra và thấy bằng 1, thanh ghi PC được nạp bằng địa chỉ có được trong phase EVALUATE ADDRESS. Ngược lại, khi không có một mã điều kiện mà được kiểm tra và thấy bằng 1, PC giữ trị không đổi. CHƢƠNG 4 MÔ HÌNH VON NEUMANN VÀ KIẾN TRÚC TẬP LỆNH LC-3 4.8 Nhóm lệnh điều khiển 4.8.1 Lệnh rẻ nhánh có điều kiện Ví dụ 4.13: Nếu giá trị cuối cùng được nạp vào một thanh ghi đa dụng nào đó là 0, thì lệnh hiện thời (ở ô nhớ x4027) dưới đây sẽ nạp thanh ghi PC bằng trị x4101 (x4028 + x0D9), tức lệnh kế cần thực thi sẽ ở ô nhớ x4101, chứ không phải ở ô nhớ x4028. CHƢƠNG 4 MÔ HÌNH VON NEUMANN VÀ KIẾN TRÚC TẬP LỆNH LC-3 4.8 Nhóm lệnh điều khiển 4.8.1 Lệnh rẻ nhánh có điều kiện CHƢƠNG 4 MÔ HÌNH VON NEUMANN VÀ KIẾN TRÚC TẬP LỆNH LC-3 4.8 Nhóm lệnh điều khiển 4.8.1 Lệnh rẻ nhánh có điều kiện Nếu tất cả ba bit [11:9] đều là 1???? CHƢƠNG 4 MÔ HÌNH VON NEUMANN VÀ KIẾN TRÚC TẬP LỆNH LC-3 4.8 Nhóm lệnh điều khiển 4.8.1 Lệnh rẻ nhánh có điều kiện Ví dụ 4.14: Nếu lệnh sau đây ở ô nhớ x507B được thực thi, thi thanh ghi PC được nạp trị x5201. Độc giả hãy suy nghĩ xem nếu tất cả ba bit [11:9] trong lệnh BR đều bằng không, điều gì sẽ xảy ra? CHƢƠNG 4 MÔ HÌNH VON NEUMANN VÀ KIẾN TRÚC TẬP LỆNH LC-3 4.8 Nhóm lệnh điều khiển 4.8.2 Ví dụ Giả sử chúng ta đã có 12 ô nhớ từ x3100 tới x310B chứa 12 số nguyên mà chúng ta cần tính tổng. CHƢƠNG 4 MÔ HÌNH VON NEUMANN VÀ KIẾN TRÚC TẬP LỆNH LC-3 4.8 Nhóm lệnh điều khiển 4.8.2 Ví dụ CHƢƠNG 4 MÔ HÌNH VON NEUMANN VÀ KIẾN TRÚC TẬP LỆNH LC-3 4.8 Nhóm lệnh điều khiển 4.8.3 Hai phương pháp điều khiển lặp Chúng ta dùng thuật ngữ lặp (loop) để mô tả chuỗi lệnh cần được thực thi lặp đi lặp lại theo một cơ chế điều khiển nào đó. Mỗi khi thân vòng lặp được thực hiện ta gọi là sự lặp lại (iteration) của vòng lặp. CHƢƠNG 4 MÔ HÌNH VON NEUMANN VÀ KIẾN TRÚC TẬP LỆNH LC-3 4.8 Nhóm lệnh điều khiển 4.8.3 Hai phương pháp điều khiển lặp Trong ví dụ ở mục trên, phương pháp biến đếm được sử dụng. Nếu chúng ta biết chính xác số lần lặp là n lần, thì đơn giản chúng ta chỉ cần gán cho biến đếm trị n, và sau mỗi lần lặp, chúng ta cần giảm biến đếm này và kiểm tra nó xem có là 0 hay chưa. Nếu chưa là 0, chúng ta đặt trị cho thanh ghi PC bằng địa chỉ của lệnh đầu thân vòng lặp, và tiếp tục sự lặp lại. CHƢƠNG 4 MÔ HÌNH VON NEUMANN VÀ KIẾN TRÚC TẬP LỆNH LC-3 4.8 Nhóm lệnh điều khiển 4.8.3 Hai phương pháp điều khiển lặp Phương pháp thứ hai là dùng trị canh (sentinel). Cách này đặc biệt hiệu quả khi chúng ta không biết trước có bao nhiêu sự lặp lại cần phải được thực hiện. Thông thường quá trình lặp sẽ là dãy các sự kiện cần xử lý, chúng ta cần thêm vào dãy sự kiện này một sự kiện là kiểm tra một giá trị mà chúng ta biết trước hay theo quy ước là không bao giờ xuất hiện trong các sự kiện gốc. Nếu việc kiểm tra này xảy ra, tức việc lặp kết thúc. Giá trị đó được gọi là trị canh. CHƢƠNG 4 MÔ HÌNH VON NEUMANN VÀ KIẾN TRÚC TẬP LỆNH LC-3 4.8 Nhóm lệnh điều khiển 4.8.4 Ví dụ Giả sử chúng ta cần cộng các trị nguyên dương từ ô nhớ x3100 tới x310B. Khi đó chúng ta có thể dùng bất kỳ trị âm nào để làm trị canh. Giả sử trị canh được chứa ở ô nhớ x310C là -1. CHƢƠNG 4 MÔ HÌNH VON NEUMANN VÀ KIẾN TRÚC TẬP LỆNH LC-3 4.8 Nhóm lệnh điều khiển 4.8.4 Ví dụ CHƢƠNG 4 MÔ HÌNH VON NEUMANN VÀ KIẾN TRÚC TẬP LỆNH LC-3 4.8 Nhóm lệnh điều khiển 4.8.5 Lệnh JMP Lệnh JMP nạp thanh ghi PC bằng trị của thanh ghi xác định bời các bit [8:6] của lệnh. Nếu lệnh JMP nằm ở địa chỉ x4000, R2 chứa trị x6600, và PC chứa x4000, thì lệnh JMP ở x4000 sẽ được thực thi, làm cho lệnh kế tiếp là lệnh ở x6600. Vì các thanh ghi đều dài 16 bit, có thể mã hóa địa chỉ cho cả bộ nhớ 64K của ISA LC-3, nên lệnh JMP không có giới hạn cho lệnh kế cần được thực thi. CHƢƠNG 4 MÔ HÌNH VON NEUMANN VÀ KIẾN TRÚC TẬP LỆNH LC-3 4.8 Nhóm lệnh điều khiển 4.8.6 Lệnh TRAP Lệnh TRAP (opcode = 1111) cho phép lấy dữ liệu vào và xuất dữ liệu ra khỏi máy tính và có định dạng như sau. Lệnh này thay đổi trị của thanh ghi PC, làm nó chỉ tới một vị trí trong bộ nhớ mà là một phần của hệ điều hành để hệ điều hành thực hiện một tác vụ nào đó nhân danh chương trình đang được thực thi. Theo kiểu nói của ngôn ngữ hệ điều hành, chúng ta nói lệnh TRAP gọi một dịch vụ của hệ điều hành (service call). Các bit [7:0] của lệnh TRAP tạo nên một trapvector 8 bit, xác định dịch vụ cần gọi mà chương trình muốn hệ điều hành thực hiện. CHƢƠNG 4 MÔ HÌNH VON NEUMANN VÀ KIẾN TRÚC TẬP LỆNH LC-3 4.8 Nhóm lệnh điều khiển 4.8.6 Lệnh TRAP Một số dịch vụ chúng ta cần biết để sử dụng ngay là : • Nhập một ký tự từ bàn phím: trapvector = x23 • Xuất một ký tự ra màn hình: trapvector = x21 • Kết thúc chương trình: trapvector = x25. Khi hệ điều hành hoàn tất dịch vụ, bộ đếm chương trình PC sẽ được đặt trở lại địa chỉ của lệnh ngay sau lệnh TRAP trong chương trình đang được thực thi, và chương trình tiếp tục chạy. Đây cũng là khả năng thực hiện giao tiếp của LC-3 giữa hệ đều hành và chương trình đang được thực thi. CHƢƠNG 4 MÔ HÌNH VON NEUMANN VÀ KIẾN TRÚC TẬP LỆNH LC-3 4.9 Ba cấu trúc lệnh trong LC-3 4.9.1 Ba cấu trúc cơ bản trong lập trình có cấu trúc Trong lập trình có ba cấu trúc lệnh cơ bản để thực hiện các tác vụ cần thiết, đó là các cấu trúc tuần tự (sequential), điều kiện (conditional), và lặp (iterative). Hình 4.16 trình bày ba cấu trúc cơ bản triển khai tác vụ cần thực thi (task). CHƢƠNG 4 MÔ HÌNH VON NEUMANN VÀ KIẾN TRÚC TẬP LỆNH LC-3 4.9 Ba cấu trúc lệnh trong LC-3 4.9.1 Ba cấu trúc cơ bản trong lập trình có cấu trúc CHƢƠNG 4 MÔ HÌNH VON NEUMANN VÀ KIẾN TRÚC TẬP LỆNH LC-3 4.9 Ba cấu trúc lệnh trong LC-3 4.9.2 Ba cấu trúc trong LC-3 CHƢƠNG 4 MÔ HÌNH VON NEUMANN VÀ KIẾN TRÚC TẬP LỆNH LC-3 4.10 Một ví dụ Đếm số lần xuất hiện của một ký tự xác định trước (được nhập từ bàn phím) trong một mảng ký tự (file) cho trước. Sau đó hiển thị số lần xuất hiện này ra màn hình(chấp nhận số lần xuất hiện tối đa của một ký tự là 9) CHƢƠNG 4 MÔ HÌNH VON NEUMANN VÀ KIẾN TRÚC TẬP LỆNH LC-3 4.10 Một ví dụ CHƢƠNG 4 MÔ HÌNH VON NEUMANN VÀ KIẾN TRÚC TẬP LỆNH LC-3 4.10 Một ví dụ CHƢƠNG 4 MÔ HÌNH VON NEUMANN VÀ KIẾN TRÚC TẬP LỆNH LC-3 4.10 Một ví dụ HEÄ THOÁNG MAÙY TÍNH VAØ NGOÂN NGÖÕ C KEÁT THUÙC CHÖÔNG 4
File đính kèm:
- bai_giang_he_thong_may_tinh_va_ngon_ngu_c_chuong_4_mo_hinh_v.pdf