Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 95 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
95
Dung lượng
2,32 MB
Nội dung
BỘ CÔNG THƯƠNG TRƯỜNG CAO ĐẲNG CÔNG NGHIỆP NAM ĐỊNH GIÁO TRÌNH KIẾN TRÚC MÁY TÍNH NGÀNH/CHUN NGÀNH: CƠNG NGHỆ THÔNG TIN (Lưu hành nội bộ) Dùng cho đào tạo: Cao đẳng Nam Định, năm 2020 BỘ CÔNG THƯƠNG TRƯỜNG CAO ĐẲNG CƠNG NGHIỆP NAM ĐỊNH GIÁO TRÌNH KIẾN TRÚC MÁY TÍNH NGÀNH/CHUN NGÀNH: CƠNG NGHỆ THƠNG TIN (Lưu hành nội bộ) CHỦ BIÊN: LÊ HỮU TOẢN Nam Định, năm 2020 LỜI GIỚI THIỆU Giáo trình giới thiệu với bạn sinh viên cấu trúc chức máy tính Chúng tơi mong muốn trình bày cách rõ ràng, cụ thể đặc điểm tính chất hệ máy tính đại ngày Tuy nhiên, có hai vấn đề gặp phải sau: Thứ nhất, thị trường có nhiều dịng sản phẩm máy tính khác từ máy tính đơn chip giá rẻ đến siêu máy tính giá hàng chục triệu Khơng giá thành, chúng cịn khác từ kích thước, hiệu ứng dụng Thứ hai, công nghệ máy tính thay đổi cách nhanh chóng từ việc sử dụng mạch tích hợp để chế tạo thành phần máy tính đến khái niệm tổ chức song song việc kết hợp thành phần Mặc dù có đa dạng tốc độ thay đổi cơng nghệ nhanh chóng, hệ máytính ngày tuân theo số khái niệm xun suốt Trong sách này, chúng tơi trình bày cách kỹ lưỡng khái niệm tổ chức kiến trúc máy tính số vấn đề thiết kế máy tính đại Tài liệu xây dựng nhằm đáp ứng nhu cầu học tập nghiên cứu sinh viên trường Cao đẳng Cơng nghiệp Nam Định Do thời gian có hạn nên phạm vi giáo trình, khơng thể đề cập tất vấn đề nóng hổi lĩnh vực thiết kế Web Nhóm tác giả mong nhận ý kiến đóng góp từ thầy để tài liệu hồn chỉnh Nam Định, 27 tháng 04 năm 2020 Chủ biên Lê Hữu Toản MỤC LỤC LỜI GIỚI THIỆU MỤC LỤC Chương TỔNG QUAN VỀ KIẾN TRÚC MÁY TÍNH 1.1 Các hệ máy tính 1.1.1 Lịch sử máy tính 1.1.2 Máy tính tương lai 15 1.2 Phân loại máy tính 16 1.2.1 Theo kích thước 16 1.2.2 Theo kiến trúc 20 1.3 Thơng tin mã hóa thơng tin 21 1.3.1 Khái niệm thông tin 21 1.3.2 Lượng thơng tin mã hóa thơng tin 22 1.3.3 Hệ thống số 23 1.3.4 Chuyển đổi hệ thống số 25 1.3.5 Biểu diễn thông tin 25 Chương 2: KIẾN TRÚC PHẦN MỀM BỘ XỬ LÝ 31 2.1 Thành phần máy tính 31 2.1.1 Định nghĩa kiến trúc máy tính 32 2.1.2 Kiến trúc phần mềm 32 2.1.3 Tổ chức máy tính 32 2.1.4 Lắp đặt phần cứng 32 2.2 Tập lệnh 33 2.2.1 Các lệnh nhớ, tính tốn… 33 2.2.2 Các lệnh có điều kiện 34 2.2.3 Các lệnh chuyển hướng 35 2.2.4 Thủ tục 36 2.3 Kiến trúc RISC 38 2.3.1 Giới thiệu 38 2.3.2.Các kiểu định vị xử lý RISC 40 2.4 Toán hạng 41 Chương 3: TỔ CHỨC BỘ XỬ LÍ 42 3.1 Đường liệu 42 3.2 Bộ điều khiển 43 3.3 Diễn tiến thi hành lệnh mã máy 45 3.4 Ngắt 47 3.5 Kỹ thuật ống dẫn 48 3.5.1 Giới thiệu 48 3.5.2 Khó khăn kỹ thuật ống dẫn 49 3.5.3 Khó khăn cấu trúc 49 3.5.4 Khó khăn số liệu 49 3.5.5 Khó khăn điều khiển 50 3.6 Ống dẫn, siêu ống dẫn, siêu vô hướng 51 3.6.1 Giới thiệu 51 3.6.2.Hạn chế 52 Chương 4: BỘ NHỚ 53 4.1 Các loại nhớ 53 4.1.1 RAM, ROM 53 4.1.2 Thiết bị lưu trữ 55 4.2 Các cấp nhớ 55 4.2.1 Giới thiệu 55 4.2.2 Các cấp nhớ 55 4.3 Cách truy xuất liệu nhớ 57 4.4 Bộ nhớ Cache cách tổ chức nhớ Cache CPU 57 4.4.1 Khái niệm: cache hit, cache miss, cache penalty 57 4.4.2 Hoạt động 57 4.4.3 Các mức Cache 61 4.4 Hiệu Cache 61 Chương 5: THIẾT BỊ NHẬP XUẤT 63 5.1 Đĩa từ 63 5.2 Đĩa quang 65 5.3 Các loại thẻ nhớ 66 5.4 Băng từ 67 5.5 Các chuẩn BUS 67 5.5.1 Bus nối ngoại vi vào xử lý nhớ 67 5.5.2 Giao tiếp xử lý với phận nhập xuất 69 Chương 6: NGÔN NGỮ ASSEMBLY 71 6.1 Tổng quan 71 6.1.1 Cấu trúc chung chương trình 71 6.1.2 Cấu trúc lệnh 76 6.1.3 Biến khai báo biến 77 6.1.4 Các chế độ địa 78 6.2 Các lệnh 78 6.2.1 Các lệnh tính tốn 78 6.2.2 Các lệnh xuất nhập 81 6.3 Các lệnh điều khiển 82 6.3.1 Các lệnh điều kiện, lặp 82 6.3.2 Lệnh chuyển hướng chương trình 84 6.4 Ngăn xếp thủ tục 86 6.4.1 Ngăn xếp 86 6.4.2 Chương trình 89 6.4.3 Truyền tham số chương trình chương trình 91 TÀI LIỆU THAM KHẢO 93 Chương TỔNG QUAN VỀ KIẾN TRÚC MÁY TÍNH MỤC TIÊU: - Ghi nhớ lịch sử phát triển máy tính - Trình bày thành phần máy vi tính - Giải thích cách biến đổi hệ thống số, bảng mã thông dụng dùng để biểu diễn ký tự 1.1 Các hệ máy tính 1.1.1 Lịch sử máy tính a Thế hệ đầu tiên: Đèn ống chân không *) ENIAC ENIAC (Electronic Numerical Integrator And Computer) thiết kế chế tạo trường Đại học Pennsylvania, máy tính điện tử số đa giới Dự án đáp ứng nhu cầu Hoa Kì chiến tranh giới II Phịng thí nghiệm Nghiên cứu đạn đạo Quân đội (BRL), tổ chức chịu trách nhiệm phát triển phạm vi bảng quỹ đạo cho loại vũ khí mới, gặp khó khăn việc đưa bảng quỹ đạo xác khoảng thời gian ngắn Nếu khơng có bảng bắn này, loại vũ khí trở nên vơ dụng với tay súng BRL thuê 200 người sử dụng bàn tính để giải phép tốn cần thiết Một người làm việc riêng lẻ nhiều (thậm chí ngày) để chuẩn bị xong bảng đạn đạo cho vũ khí đơn John Mauchly, giáo sư ngành kỹ thuật điện Đại học Pennsylvania, với sinh viên ông John Eckert đề xuất xây dựng máy tính đa sử dụng đèn ống chân khơng cho tốn BRL Năm 1943, Qn đội chấp nhận đề xuất này, công việc bắt đầu triển khai ENIAC Máy ENIAC to, nặng tới 30 tấn, chiếm 450m2 mặt sàn chứa 18000 đèn chân khơng Khi hoạt động, tiêu thụ 140 kilowatt điện Nó nhanh hẳn so với máy tính điện, có khả thực 5000 phép cộng giây ENIAC máy thập phân máy nhị phân Tức là, số biểu diễn dạng thập phân, phép tính số học thực hệ thập phân Bộ nhớ bao gồm 20 tích luỹ (accumulator), tích luỹ trữ số thập phân 10 chữ số Mỗi chữ số lại biểu diễn vịng gồm 10 đèn ống chân khơng Tại thời điểm, có đèn ống chân không trạng thái ON, thể 10 chữ số Hạn chế lớn ENIAC phải lập trình thủ cơng cách thiết lập công tắc chuyển mạch cắm rút dây cáp ENIAC hoàn thành vào năm 1946, muộn để sử dụng phục vụ chiến tranh Thay vào đó, nhiệm vụ thực loạt phép tính phức tạp để xác định tính khả thi bom hydro Việc sử dụng ENIAC cho mục đích khác với mục đích xây dựng ban đầu chứng minh tính đa máy ENIAC tiếp tục hoạt động quản lý BRL năm 1955 bị tháo rời *) Máy tính Von Neumann Nhiệm vụ nhập thay đổi chương trình cho ENIAC tẻ nhạt Nhưng giả sử có chương trình thể dạng phù hợp để lưu trữ nhớ với liệu Khi đó, máy tính đọc lệnh từ nhớ, chương trình thiết lập thay đổi cách thiết lập giá trị phần nhớ Được gọi chương trình lưu trữ được, thường biết đến ý tưởng nhà thiết kế ENIAC, đặc biệt nhà toán học John von Neumann, chuyên gia tư vấn cho dự án ENIAC Cùng thời điểm Alan Turing phát triển ý tưởng Công bố ý tưởng von Neumann đưa năm 1945 máy tính mới, EDVAC (Electronic Discrete Variable Computer) Năm 1946, von Neumann cộng ông bắt đầu thiết kế máy tính chương trình lưu trữ mới, gọi máy tính IAS, Viện Nghiên cứu cao cấp Princeton Mặc dù năm 1952 không hồn thành, máy tính IAS ghi nhận ngun mẫu tất máy tính đa sau Một nhớ chính, lưu trữ liệu lệnh Một khối số học logic (ALU) có khả xử lý liệu nhị phân Một khối điều khiển (CU), biên dịch lệnh nhớ cho phép lệnh thực Thiết bị vào/ra (I/O) vận hành khối điều khiển Hầu tất máy tính ngày có cấu trúc chức chung giống gọi máy von Neumann Vì vậy, ta mô tả cách ngắn gọn hoạt động máy tính IAS Bộ nhớ IAS bao gồm 1000 vị trí lưu trữ, gọi từ (word), vị trí có 40 chữ số (bit) nhị phân Cả liệu lệnh lưu trữ Số biểu diễn dạng nhị phân, lệnh mã nhị phân Hình 2.2 mơ tả định dạng Mỗi số biểu diễn bit dấu 39 bit giá trị Một từ chứa hai lệnh, lệnh gồm 20 bit Trong 20 bit lệnh, bit dành cho mã lệnh (opcode) định hành động thực 12 bit dành cho địa để xác định từ cụ thể nhớ (đánh số từ đến 999 ) Khối điều khiển vận hành máy IAS cách truy xuất lệnh từ nhớ thực lệnh Hình cho thấy điều khiển ALU chứa vị trí lưu trữ, gọi ghi Để giải thích rõ hơn, ta xét sơ đồ cấu trúc chi tiết hình Hình vẽ cho thấy khối điều khiển khối ALU có vị trí lưu trữ, gọi ghi định nghĩa sau: Thanh ghi đệm liệu (MBR): Chứa từ lưu vào nhớ Lệnh Sub (Subtract): lấy giá trị/nội dung [Toán hạng đich] trừ giá trị/nội dung [Toán hạng nguồn], kết đặt vào lại [Toán hạng đích] Ví dụ 1: Mov Ax, 121 ; đặt giá trị 121 vào ghi Ax Mov Bx, 223 ; đặt giá trị 232 vào ghi Bx Inc Ax ; Ax = Ax + 1: tăng Ax lên đơn vị (Ax = 122) Dec Bx ; Bx = Bx + 1: giảm Bx xuống đơn vị (Bx = 222) Sub Ax, Bx ; Ax = Ax – Bx : Ax = -100 Add Ax, 120 ; Ax = Ax + 120 : Ax = 20 Mov Cx, Ax ; Cx= Ax : Cx = 20 Dãy lệnh trên, đặt giá trị cuối ghi Ax vào ghi Cx (Cx = 20) Ví dụ 2: Inc Spt ; Spt = Spt + 1; tăng giá trị biến Spt lên đơn vị Inc DS:[SI] ; tăng ndung ô nhớ DS:SI lên đơn vị Add Ax, Var1 ; Ax = Ax + Var1; cộng giá trị biến Var1 vào Ax Add Var2, Dx ; Var2 = Var2 + Dx Biến Var2 biến dạng word Add Dx, [SI] ; cộng thêm nội dung ô nhớ SI vào Dx Add [DI], [SI] ; [DI] = [DI] + [SI] : lệnh khơng hợp lệ, vì: khơng thể ; cộng trực tiếp nội dung hai ô nhớ với ; Yêu cầu lệnh viết lại sau: Mov Ax, [SI] ; lưu tạm nội dung ô nhớ SI Ax Mov Bx, [DI] ; lưu tạm nội dung ô nhớ DI Bx Add Bx, Ax ; cộng Ax Bx, kết chứa Bx Mov [DI], Bx ; đặt kết phép cộng vào lại ô nhớ DI Ví dụ 3: Cộng thêm giá trị ghi Ax vào nội dung ô nhớ địa offset 0100 đoạn DS: Mov DI, 0100 ; trỏ DI ô nhớ offset 0100 Mov Bx, DS:[DI] ; lưu tạm ndung ô nhớ DS:DI vào ghi Bx Add Bx, Ax ; cộng thêm Ax vào Bx Mov DS:[DI], Bx ; đặt kết vào lại ô nhớ DS:DI (DS:0100) Trong trường hợp ta sử dụng lệnh Add DS:[DI],Ax Ví dụ 4: Giả sử nhớ 0B80:0100 nhớ có chứa word liệu Hãy tăng nội dung ô nhớ lên đơn vị Mov Ax, 0B80h ; mượn ghi Ax làm trung gian để chuyển Mov ES, Ax ; địa đoạn ô nhớ cần truy xuất vào ES Mov DI, 01 ; đặt địa offset ô nhớ cần truy xuất vào DI ; -; (gọi ngắn gọn: trỏ ES:DI ô nhớ cần truy xuất) Mov Dx, ES:[DI] ; chuyển tạm nội dung ô nhớ cần tăng vào Dx 79 Inc Dx ; tăng giá trị ghi Dx lên đơn vị Mov ES:[DI], Dx ; đặt giá trị Dx tăng vào lại nhớ cần tăng Ví dụ 5: Giả sử địa 0A00:0100 nhớ có chứa byte liệu Hãy chuyển nội dung ô nhớ vào thành ghi AL Mov Ax, 0A00h ; (1); Các lệnh (1), (2), (3) trỏ cặp Mov ES, Ax ; (2); ghi ES:DI ô nhớ có địa 0A00:0100 Mov DI, 0100h ; (3); 0A00 địa Segment ; ; 0100 địa Offset Lệnh (4) chuyển nội Mov Al, ES:[DI] ; (4); dung ô nhớ ES:DI vào Al Ví dụ 6: Giả sử địa 0100:0100 nhớ có chứa word liệu liên tiếp (hai nhớ liên tiếp) Hãy tính tổng nội dung hai word nhớ này, lấy kết ghi vào ô nhớ địa 0100:0120 Mov Ax, 0100 Mov ES, Ax ; trỏ cặp ghi ES:SI đầu vùng nhớ Mov SI, 0100 ; cần truy xuất Mov DI,0120 ; trỏ cặp ghi ES:DI ô nhớ chứa kết ; ; ô nhớ Segment Mov Ax, ES:[SI] ; lưu tạm nội dung ô nhớ vào Ax Add Ax, ES:[SI+2] ; cộng nội dung ô nhớ vào Ax Mov ES:[DI], Ax ; ghi kết vào ô nhớ 0100:0120 Lệnh Add Ax, ES:[SI+2] sử dụng chế độ định địa nhớ gián tiếp, cụ thể định địa chỉ mục (sử dụng ghi mục SI) Qua ví dụ 4, 5, ta rút nguyên tắc truy xuất liệu/nội dung ô nhớ là: Sử dụng cặp ghi thích hợp (DS:DI, DS:SI, ES:DI, ES:SI, ) để chứa địa logic (gồm Segment Offset) ô nhớ cần truy xuất Thao tác thường gọi trỏ nhớ cần truy xuất Sau sử dụng cặp ghi để ghi/đọc nội dung ô nhớ trỏ tới Ngoài ra, truy xuất ô nhớ cần phải xác định liệu/nội dung Byte hay Word truy xuất đọc kết lưu vào đâu (thanh ghi hay ô nhớ) Chú ý 1: Không thể cộng trực tiếp hai ghi đoạn Trong trường hợp phải sử dụng ghi đa làm trung gian Lệnh Add thực phép cộng khơng nhớ Để thực phép cộng có nhớ (cộng thêm giá trị cờ nhớ (CF) vào kết quả) phải sử dụng lệnh ADC (ADD with Carry) [2 - 171] Tương tự với lệnh Sub SBB [2 - 180] Để thực phép cộng số/giá trị BCD (Binary Coded Decimal) ta phải sử dụng lệnh cộng AAA (Ascii Adjust for Addition) DAA (Decimal Adjust for Addition) để điều chỉnh (adjust) kết cuối [2 - 172] Tương tự, với phép trừ số BCD phải sử dụng lệnh AAS DAS [2 - 183] Chú ý 2: Các ghi vi xử lý Intel 8086/8088 16 bít, nên để chứa đại lượng liệu 32 bít phải dùng ghi, thường ghi đa (thanh ghi 80 tích lũy): Ax, Bx, Cx, Dx Cặp ghi Dx:Ax thường sử dụng nhất, Ax chứa 16 bít thấp, Dx chứa 16 bít cao đại lượng 32 bít Để cộng/trừ số 32 bít ta khơng thể sử dụng Add/Sub theo cách thông thường, mà phải thực sau: Cộng/Trừ 16 bít thấp, sau Cộng/Trừ 16 bít cao Nếu phép Cộng/Trừ 16 bít thấp xuất bít nhớ/bít mượn phải tiến hành điều chỉnh kết quả, không kết sẻ sai Sử dụng phép kiểm tra cờ để biết phép Cộng/Trừ có xuất bít nhớ/bít mượn hay khơng [1 - 477] 6.2.2 Các lệnh xuất nhập Mov [Tốn hạng đích], [Tốn hạng nguồn] Trong đó: - [Tốn hạng đích]: Có thể ghi (8 bít hay 16 bít), nhớ (chính xác địa ô nhớ) hay biến [Tốn hạng đích] khơng thể số - [Tốn hạng nguồn]: Có thể số, biến, ghi, nhớ (chính xác địa nhớ) Tác dụng: Lấy nội dung (giá trị) [Toán hạng nguồn] đặt vào [Tốn hạng đích] Nội dung [Tốn hạng nguồn] khơng bị thay đổi Ví dụ 1: Mov Ax, ; Ax ß 5: đặt giá trị vào thành ghi Ax Mov Ax, 5*2 ; Ax ß 5*2: đặt giá trị 10 vào thành ghi Ax Mov Bx, (80*(Dong - 1) + (Cot - 1))*2 ; Dong, Cot biến Mov Dl, ‘A’ ; Dl = 41h: đặt mã ASCII ‘A’ vào ghi Dl Mov Cx, Var1 ; Cx = Var1: đặt giá trị biến Var1 vào ghi Cx Mov Ax, Bx ; Ax = Bx: đặt giá trị ghi Bx vào Ax Mov Ax, Dl ; Ax = Dl: đặt giá trị Dl (8 bít) vào Ax (16 bít) Mov Bl, Dx ; Bl = Dx: khơng hợp lệ, vì: Dx (16 bít) mà Bl (8 bít) Mov Dl, 300 ; Dl = 300: khơng hợp lệ, 300 vượt giới hạn byte Ví dụ 2: Giả sử DI = 100; Ô nhớ địa offset 100 đoạn nhớ Data (được DS) chứa kí tự B Thì : Mov Ax, DI ; (1) đặt giá trị ghi DI vào ghi Ax: Ax = 100 Mov Ax, [DI] ; (2) Ax = Tức là, đặt nội dung ; ô nhớ DI vào ghi Ax: Ax = 41h Hãy phân biệt khác hai lệnh trên: Lệnh (1) sử dụng chế độ địa ghi Lệnh (2) sử dụng chế độ địa gián tiếp ghi Nhớ lại rằng: Trong chế độ địa gián tiếp ghi, ghi BX, DI, SI (địa đoạn chứa DS) hay BP (địa đoạn chứa SS) Như lệnh (2) tương đương với lệnh (3) khác lệnh (4): Mov Ax, DS:[DI] ; (3) Mov Ax, ES:[DI] ; (4) Ví dụ 3: Mov Ax, [SI] ; đặt nội dung ô nhớ SI vào ghi Ax 81 Mov [DI], Bx ; đặt giá trị ghi bx vào ô nhớ DI Mov [DI], [SI] ; [DI] ß [SI] : lệnh khơng hợp lệ, vì: khơng thể chuyển ; nội dung ô nhớ vào ô nhớ cách trực tiếp Mov Var1, Ax ; Var1 ß Ax : đặt giá trị t/ghi Ax vào biến word Var1 Chú ý: Lệnh Mov không làm ảnh hưởng đến cờ Mov DS:[DI], ES:[SI] ; lệnh không hợp lệ, vì: khơng thể chuyển liệu ; trực tiếp hai toán hạng nhớ với Mov DS, ES ; DS ß ES: lệnh khơng hợp lệ, Mov ES, 0100 ; lệnh khơng hợp lệ, vì: khơng thể chuyển ; trực tiếp số vào ghi đoạn Để chuyển giá trị hai ghi đoạn hay nội dung hai nhớ ta mượn ghi đa làm trung gian: Mov Ax, ES ; hai lệnh chuyển nội dung ghi đoạn ES Mov DS, Ax ; vào ghi đoạn DS thông qua ghi Ax Theo cách thơng thường, để hốn đổi giá trị hai ghi đoạn hay nội dung hai ô nhớ người ta thường sử dụng hai ghi đa làm trung gian: Mov Ax, [DI] ; lưu tạm nội dung ô nhớ DI vào Ax Mov Bx, [SI] ; lưu tạm nội dung ô nhớ SI vào Bx Mov [DI], Bx ; chuyển giá trị t/ghi Bx ô nhớ DI Mov [SI], Ax ; chuyển giá trị t/ghi Ax ô nhớ SI Bốn lệnh có tác dụng hốn đổi nội dung hai ô nhớ đoạn Data (DS) DI SI (DI SI chứa địa Offset ô nhớ) Không thể dùng ghi đoạn CS làm [Tốn hạng đích] lệnh Mov 6.3 Các lệnh điều khiển 6.3.1 Các lệnh điều kiện, lặp Cú pháp: Loop Trong đó: nhãn lệnh phải đứng trước lệnh lặp Loop không 126 byte Tác dụng: Khi gặp lệnh chương trình lặp lại việc thực lệnh sau đủ n lần, với n đặt trước ghi CX Sau lần lặp CX tự động giảm đơn vị (Cx = Cx - 1) lệnh lặp dừng Cx = Lệnh Loop thường sử dụng để cài đặt đoạn chương trình lặp với số lần lặp xác định, cho trước ghi Cx (tương tự vịng lặp For ngơn ngữ lập trình bậc cao) Ví dụ 1: Xem đoạn lệnh sau đây: Mov Ax, Mov Cx, ; lặp lại lần Lap: Add Ax, 10 ; cộng thêm 10 vào Ax 82 Loop Lap ; lặp lại việc cộng 10 vào Ax đủ lần Kết thúc đoạn lệnh trên: Ax = 46 (cụ thể: Lần 1: Ax = + 10; Lần 2: Ax = 16 + 10; Lần 3: Ax = 26 + 10; Lần 4: Ax = 36 + 10 = 46) Ví dụ 2: Xem đoạn lệnh sau đây: Mov Ax, Mov Bx, Mov Cx, ; lặp lại lần Lap_TT: Add Ax, Bx ; cộng thêm giá trị ghi Bx vào ghi Ax Inc Bx ; tăng Bx lên đơn vị Loop Lap_TT ; lặp lại lệnh sau nhãn lệnh Lap_TT đủ lần ; ; sau lệnh lặp Ax = 24, Bx = Mov Dx, Ax ; Dx ß Ax Mov Cx, Bx ; Cx = 7, sau Loop Cx = 0, thay Bx = Kết thúc đoạn lệnh trên: Ax = 24 (Lần 1: Ax = + 3;Lần 2: Ax = + 4; Lần 3: Ax = 13 + 5; Lần 4: Ax = 18 + 6) Dx = Ax = 24 Khi gặp lệnh Loop Lap_TT chương trình quay lại (nếu Cx 0) thực lệnh Add Ax, Bx (Lap_TT nhãn lệnh này), tất nhiên phải thực lại lệnh Inc Bx Dó đó, nói lệnh Loop thực vòng lặp cho hai lệnh Add Inc Đó lý mà người ta thường viết nhãn lệnh phải lặp theo kiểu (nhãn lệnh lệnh khơng dịng) Ví dụ 3: Xem đoạn lệnh sau đây: Mov Dx, Mov Cx, ; lặp lại lần TT: Add Dx, Cx ; cộng thêm giá trị ghi Cx vào ghi Dx Loop TT ; lặp lại lệnh sau nhãn lệnh TT đủ lần ; -; Mov Bx, Cx Kết thúc đoạn lệnh Bx = Cx = (khi Cx = vịng lặpLoop TT kết thúc) Dx = 21 (Lần 1: Dx = Dx + Cx = + 5;Lần 2: Dx = Dx + Cx = 11 + 4; Lần 3: Dx = Dx + Cx = 15 + 3; Lần 4: Dx = Dx + Cx = 18 + 2;Lần 5: Dx = Dx + Cx = 20 + = 21) Ví dụ 4: Các lệnh sau thực phép gán: Ax = + + + 100 Mov Ax, Mov Bx, Mov Cx, 50 Lap_TT: Add Ax, Bx Add Bx, Loop Lap_TT 83 Ví dụ 5: Giả sử địa offset 100 đoạn nhớ Data (được ghi đọan DS) có chứa mảng liệu, gồm 100 nhớ, ô byte Hãy cộng thêm 50 đơn vị vào tất ô nhớ mảng Mov DI, 0100 ; trỏ cặp ghi DS:DI ; vùng nhớ cần truy xuất (DS:0100) ; -Mov Cx, 100 ; lặp 100 lần mảng gồm 100 nhớ Lap_TangThem: Mov Dl, DS:[DI] ; lấy nôi dung ô nhớ DS:DI lưu vào DL Add Dl, 50 ; cộng thêm 50 vào Dl Mov DS:[DI], Dl ; đặt giá trị tăng thêm vào lại ô nhớ DS:DI Inc DI ; đến ô nhớ (vì nhớ byte nên tăng 1) Loop Lap_TangThem ; lặp lại đủ 100 lần (duyệt qua đủ 100 ô nhớ) Trong trường hợp ta sử dụng lệnh Add DS:[DI], 50 để tăng trực tiếp nội dung ô nhớ, hợp ngữ cho phép điều Nhưng cách viết thường áp dụng hơn, tính tổng quát Nói chung, nên hạn chế tác động trực tiếp lên nôi dung ô nhớ 6.3.2 Lệnh chuyển hướng chương trình Cú pháp: LEA [Tốn hạng đích],[Tốn hạng nguồn] Trong đó: [Tốn hạng đích]: Là ghi 16 bít [Tốn hạng nguồn]: Là địa vùng nhớ hay tên biến Tác dụng: Lệnh LEA có tác dụng chuyển địa offset [Tốn hạng nguồn] vào [Tốn hạng đích] Lệnh thường sử dụng để lấy địa offset biến khai báo chương trình Thanh ghi sử dụng trường hợp ghi sở (BX) ghi mục (SI DI) Ví dụ 1: Lea Bx, DS:[0100] ; chuyển thành phần địa offset (0100) vào Bx Lea DI, XauKT ; chuyển địa offset biến XauKT vào DI ; thao tác thường gọi trỏ DI đầu ; biến XauKT Khi chương trình nạp vào nhớ để hoạt động biến khai báo chương trình định vị (cấp phát vùng nhớ) địa xác định vùng nhớ Data Từ đây, để thao tác đến liệu biến chương trình chương trình phải xác định địa segment vào offset (hai thành phần địa logic) biến Lệnh LEA lấy địa offset biến, để lấy địa segment ta sử dụng lệnh Mov với tốn tử Seg (tương tự sử dụng lệnh Mov với toán tử Offset để lấy địa offset biến) Ví dụ: Các lệnh sau lấy địa Segment:Offset biến XauKT (hay trỏ DS:SI đầu biến XauKT): Mov Ax, Seg XauKT ; đưa địa Segment biến XauKT Mov DS, Ax ; vào ghi DS Mov SI, Offset XauKT ; đưa địa Offset biến XauKT vào SI Ví dụ 2: Giả sử biến TenGom (là biến kiểu byte) khai báo sau: 84 TenGom DB ‘Nguyen Kim Le Tuan’ Xem lệnh sau (1): Mov Bx, Mov Al, TenGom[Bx] ; Al =‘N’ Add Bx, ; Mov Bl, TenGom[Bx] ; Bl =‘K’ Xem lệnh sau (2): Lea DI, TenGom Mov Al, [DI] ; Al =‘N’ Mov Bl, [DI + 7] ; Bl =‘K’ Ta thấy, nhóm lệnh (1) nhóm lệnh (2) tương đương tác dụng nó, (1): sử dụng trực tiếp tên biến để truy xuất đến phần tử nó; (2): sử dụng ghi mục DI để truy xuất đến phần tử biến Trong trường hợp địa segment mặc định DS, điều phù hợp với việc sử dụng địa gián tiếp ghi mục Ví dụ 3: Giả sử địa 0100:0C00 nhớ có chứa xâu kí tự gồm 50 kí tự (tức là, gồm 50 nhớ, ô byte) Hãy copy xâu kí tự vào biến chương trình Với yêu cầu chương trình phải khai báo biến byte có độ lớn 50 byte: LuuTru DB 50 Dup (‘ ‘) Mov Ax, 0100 Mov DS, Ax ; trỏ cặp ghi DS:SI Mov SI, 0C00 ; đầu vùng nhớ chưa xâu cần copy (0100:0C00) ; -Mov Ax, Seg LuuTru ; trỏ cặp ghi ES:DI Mov ES, Ax ; đầu biến LuuTru Lea DI, LuuTru ; -Mov Cx, 50 Lap_Copy: Mov Bh, DS:[SI] ; mượn Bh để chuyển tường kí tự từ ô nhớ Mov ES:[DI], Bh ; DS:SI sang ô nhớ ES:DI Inc SI ; chuyển đến kí tự Inc DI Loop Lap_Copy ; lặp lại đủ 50 lần (để copy đủ 50 kí tự) Chú ý: Hợp ngữ cịn cung cấp lệnh LDS (Load Pointer use DS) để lấy nội dung tốn hạng nhớ 32 bít đưa vào ghi 16 bít (mặc định 16 bít cao vào ghi đoạn liệu DS); lệnh LES (Load Pointer use DS) tương tự LDS mặc định 16 bít cao vào ghi đoạn liệu (thứ hai) ES [2 - 137] *) Lệnh chuyển liệu qua cổng: IN OUT Cú pháp: • IN AL, 85 • OUT , AL Trong đó: số hiệu cổng (port) mà lệnh nhận nhiệm vụ trao đổi liệu qua Địa cổng ghi trực tiếp dạng số ghi thông qua ghi Dx Tác dụng: - LênhIn (Input): Đọc lượng liệu bít từ cổng đưa vào lưu trữ ghi AL Nếu địa cổng nằm giới hạn từ đến FF (hệ thập lục phân) viết trực tiếp câu lệnh, địa cổng lớn FF ta phải dùng ghi Dx để định địa cổng - LệnhOut (Output): Gởi lượng liệu bít từ ghi AL cổng Tương tự lệnh In, địa cổng viết trực tiếp câu lệnh thông qua ghi Dx Ví dụ 1: In Al, 40h ; Mov Dx, 3B0h ; In Al, Dx ; Ví dụ 2: Out 40h, Al ; Mov Dx, 3B0h ; Out Dx, Al ; Ví dụ 3: Các khai báo hằng: DAT EQU 13h ; POR EQU 7Ch ; Các lệnh: Mov Al, POR ; Mov Bl, DAT ; Out Bl, Al ; 6.4 Ngăn xếp thủ tục 6.4.1 Ngăn xếp Ngăn xếp vùng nhớ đặc biệt chương trình Có thể sử dụng vùng nhớ để lưu trữ liệu giải phóng khơng dùng đến Như vậy, việc sử dụng ngăn xếp cách hợp lý giúp tiết kiệm nhớ Trong hợp ngữ, kích thước ngăn xếp chương trình khai báo sau từ khố Stack: TITLE MODEL STACK DATA CODE 86 Một chương trình bao gồm ba phẩn bản: Mã lệnh, Dữ liệu, Ngăn xếp Khi chương trình nạp vào nhớ thi ba phần nạp vào đoạn nhớ khác nhau: + Đoạn nhớ chứa phần mã lệnh gọi Đoạn mã (Code Segment), địa lưu giữ ghi đoạn cs + Đoạn nhớ chứa phần liệu gọi Đoạn liệu (Data Segment), địa chì cùa lưu giữ ghi đoạn DS + Đoạn nhớ chứa phần ngăn xếp gọi Đoạn ngăn xếp (Stack Segment), địa chi cùa lưu giữ ghi đoạn ss *) Cất liệu vào ngăn xếp Để cất liệu vào ngăn xếp ta sử dụng lệnh Push, cách viết lệnh sau: PUSH : ghi hay biến có kích tlnrớc 16 bít (1 word) Sau lệnh Push giá trị cùa tốn hạng Nguồn giữ nguyên Ví dụ 1: PUSH AX Lệnh cất nội dung ghi AX vào ngăn xếp vi dụ 2: PUSH A Lệnh cất nội dung biến A vào ngăn xếp (A phái biến kiểu Word) *) Lấy liệu khỏi ngăn xếp Để lấy liệu khỏi ngăn xếp ta sử dụng lệnh Pop cách viết lệnh sau: POP : ghi hay biến có kích thước 16 bít (1 word) *) Ứng dụng ngăn xếp Ví dụ 1: Hãy chuyển nội dung ghi đoạn DS vào ghi đoạn ES Giải: Do chuyển trực tiếp nội dung hai ghi đoạn cho (xem lại phần lệnh MOV) nên ta sử dụng ngăn xếp làm trung gian: liệu đuợc chuyển từ DS vào ngăn xếp, sau lấy từ ngăn xếp chuyển vào ES: PUSH DS ;Cất DS vào ngăn xếp POP ES ;Lấy liệu từ ngăn xếp đặt vào ES Ví dụ 2: Viết chng trình nhập kí tự từ bàn phím đầu dòng Giải: TITLE Vi du MODEL SMALL STACK 100H CODE MAIN PROC MOV 87 INT AH, 21h ; Chức số 1: Nhập kí tự PUSH AX ;Cất kí tự vào ngăn xếp MOV AH, ;Đưa trỏ đầu dòng MOV INT DL, 21h 0Dh MOV INT DL, 21h 0Ah POP DX ;Lấy kí tự từ ngăn xếp đặt vào DL INT 21h ;Hiển thị kí tự MOV INT AH, 21h 4Ch ;Kết thúc MAIN ENDP END MAIN Giải thích: Kí tự nhập vào cất ghi AL Để đưa trỏ xuống đầu dịng phải hiển thị hai kí tự có mã ASCII 0Dh (CR: đầu dòng) 0Ah (LF: xuống dòng) *) Cách thức làm việc ngăn xếp a) Kích thước ngăn xếp Kích thước ngăn xếp khai báo đầu chưong trình hợp ngữ sau từ khố Stack Ví dụ: Stack 100h Khi ngăn xếp có kích thước 100h byte (256 byte hay 128 word) Mỗi lệnh Push chiếm dụng word ngăn xếp, ngăn xếp khai báo cho phép cất tối đa 128 lần Người lập trình phải tính tốn để khai báo ngăn xếp có kích thước hợp lý (khơng q thừa hay thiếu) b) Cấu trúc ngăn xếp Dữ liệu lấy khỏi ngăn xếp theo trình tự ngược lại so với cất vào, nghĩa cất vào sau lấy trước (LIFO - Last In First Out) Để tổ chức quản lý liệu vậy, vi xử lý 8086 sử dụng hai ghi chuyên dụng cho thao tác với ngăn xếp SS (Stack Segment) SP (Stack Pointer) SS chứa địa segment SP chứa địa offset ô nhớ ngăn xếp Dữ liệu cất vào ngăn xếp theo trật tự ngược lại so với đoạn nhớ khác (từ địa cao xuống địa thấp) Giả sử khai báo ngăn xếp Stack 100h ngăn xếp bắt đầu địa offset = 0100h kết thúc offset = 0000h Dưới mơ hình ngăn xếp chưa có liệu: Khi ngăn xếp chưa có liệu SP trỏ tới nhớ có địa cao ngăn xếp Sau lệnh Push SP giảm để trỏ tới ô ngăn xếp, liệu cất vào ô nhớ SP trỏ tới Ví dụ: • Cất ba ghi AX, BX, CX vào ngăn xếp: PUSH AX PUSH BX 88 PUSH CX - Sau lệnh PUSH AX: Muốn lấy nội dung ba ghi khỏi ngăn xếp phải tiến hành theo trình tự ngược lại: POP CX POP BX POP AX - Sau lệnh POP CX Dữ liệu ô nhớ SP trỏ tới (offset = 00FAh) đuợc nạp vào ghi CX, sau SP tăng lên để trỏ tới ô cao Ô nhớ chứa CX đuợc giải phóng nên ta khơng cần quan tâm tới nội dung bên - Sau lệnh POP BX: Dữ liệu nhớ có offset = 00FCh đuợc nạp vào ghi BX - Sau lệnh POP AX: Dữ liệu nhớ có offset = 00FEh đuợc nạp vào ghi AX 6.4.2 Chương trình PROC ;Bắt đầu thủ tục Lệnh Lệnh Lệnh RET ;Trở ve chương trình ENDP ;Ket thúc thủ tục Một thủ tục loại phải kết thúc lệnh RET để trở chương trình Lệnh RET thường nằm cuối thủ tục, nằm vị trí khác Ví dụ: Viết thủ tục đưa trỏ hình xuống đầu dịng Giải: Để đưa trỏ xuống đầu dòng cần hiển thị kí tự CR (0Dh) LF (0Ah) Ta đặt tên thủ tục Writeln Writeln PROC MOV AH, ;Chức số ngắt 21h để kí tự MOV DL, 0Dh INT 21h MOV DL, 0Ah INT 21h RET Writeln ENDP 6.3.1 Sử dụng thủ tục Để gọi thủ tục từ chương trình ta sử dụng lệnh Call, cú pháp lệnh sau: CALL 89 • Cấu trúc chương trình hợp ngữ có sử dụng thủ tục sau: TITLE MODEL STACK DATA CODE PROC Lệnh Lệnh Lệnh CALL ;Gọi thủ tục ENDP PROC Lệnh Lệnh Lệnh RET ;Trở ve chương trình ENDP Các thủ tục khác END Ví dụ: Viết chương trình nhập kí tự từ bàn phím đầu dịng (có sử dụng thủ tục) Giải: TITLE Vi du MODEL SMALL STACK 100H CODE MAIN PROC MOV AH, INT 21h ;Nhập kí tự PUSH AX ;Cất kí tự vào ngăn xếp CALL Writeln ;Đưa trỏ đầu dòng POP MOV INT MOV DX AH, 21h AH, 4Ch ;Lấy kí tự từ ngăn xếp đặt vào DL ;Hiển thị kí tự ;Kết thúc INT 21h MAIN ENDP 90 Writeln PROC ;Thủ tục đưa trỏ đầu dòng MOV AH, MOV DL, 0Dh INT 21h MOV DL, 0Ah INT 21h RET Writeln ENDP END MAIN 6.4.3 Truyền tham số chương trình chương trình Khi lệnh Call gọi thủ tục lệnh thủ tục thi hành Vậy làm cách để quay trở chương trình sau thủ tục thi hành xong? Để hiểu trình ta cần nghiên cứu thêm trình tự thực lệnh vi xử lý 8086 Đoạn mã lệnh có địa segment nằm ghi CS, offset lệnh đặt vào ghi trỏ lệnh IP (Instruction Pointer) Như cặp ghi CS:IP chứa địa nhớ lệnh ô nhớ thi hành Khi sử dụng lệnh Call cơng việc sau thực hiện: + Cất địa lệnh đứng sau lệnh Call (trong chưong trình chính) vào ngăn xếp + Nạp địa lệnh thủ tục vào cặp ghi CS:IP (tức thi hành lệnh này) Lần lượt lệnh thủ tục thi hành gặp lệnh RET Lệnh RET lấy địa lệnh từ ngăn xếp (do lệnh Call cất trước đó) nạp vào ghi CS:IP Như quyền điều khiển trả chưong trình (xem so đồ bên dưới) 91 92 TÀI LIỆU THAM KHẢO - Nguyễn Đình Việt (2001); Kiến Trúc Máy Tính; Nhà xuất Đại học quốc gia Hà Nội - Võ Văn Chín, Ths Nguyễn Hồng Vân, KS Phạm Hữu Tài (2003); Giáo trình kiến trúc máy tính; Khoa CNTT, Đại học Cần Thơ 93 ... Một máy tính mini lớp máy tính nhỏ đưa vào giới vào năm 1960 Máy tính mini máy tính có tất tính máy tính kích thước lớn, kích thước nhỏ máy tính Máy tính mini nằm máy tính lớn máy vi tính kích... khác 2.1.1 Định nghĩa kiến trúc máy tính Kiến trúc máy tính bao gồm ba phần: Kiến trúc phần mềm, tổ chức máy tính lắp đặt phần cứng + Kiến trúc phần mềm máy tính chủ yếu kiến trúc phần mềm xử lý,... Chương 2: KIẾN TRÚC PHẦN MỀM BỘ XỬ LÝ 31 2.1 Thành phần máy tính 31 2.1.1 Định nghĩa kiến trúc máy tính 32 2.1.2 Kiến trúc phần mềm 32 2.1.3 Tổ chức máy tính