1. Trang chủ
  2. » Công Nghệ Thông Tin

Tài liệu Đề cương vi xử lý

94 447 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 94
Dung lượng 863,17 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Tài liệu này dành cho sinh viên, giáo viên khối ngành công nghệ thông tin tham khảo và có những bài học bổ ích hơn, bổ trợ cho việc tìm kiếm tài liệu, giáo án, giáo trình, bài giảng các môn học khối ngành công nghệ thông tin

Trang 1

W™X

Gi¸o tr×nh häc phÇn

Vi xö lý (HÖ §¹i häc)

Tµi liÖu lưu hµnh néi bé

Hưng Yªn 2005

Trang 2

Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY http://www.ebook.edu.vn

MỤC LỤC

Chương 1 BỘ VI XỬ LÝ 8086/8088 ……… ………2

1.1 Tổng quan về các bộ vi xử lý của Intel 2

1.2 Cấu trúc bộ vi xử lý 8086 3

1.2.1 Sơ đồ khối 3

1.2.2 Giải thích các thành phần trong sơ đồ 3

1.2.3 Một số khái niệm cơ bản 4

1.3 Tập thanh ghi của bộ vi xử lý 8086 5

1.3.1 Các thanh ghi dữ liệu 5

1.3.2 Các thanh ghi đoạn: CS, DS, ES, SS 6

1.3.3 Các thanh ghi con trỏ và chỉ số: SI, DI, SP, BP 6

1.3.4 Thanh ghi con trỏ lệnh: IP 7

1.3.5 Thanh ghi cờ 7

1.4 Tập lệnh của bộ vi xử lý 7

1.4.1 Sơ lược về tập lệnh của bộ vi xử lý 7

1.4.2 Tập lệnh của CPU 8

1.4.3 Nhóm lệnh di chuyển dữ liệu 8

1.4.4 Nhóm lệnh số học 10

1.4.5 Nhóm lệnh logic 11

1.4.6 Nhóm lệnh dịch chuyển và quay 12

1.4.7 Nhóm lệnh điều khiển rẽ nhánh 13

1.4.8 Nhóm lệnh vào ra cổng 14

1.4.9 Nhóm lệnh điều khiển 14

1.5 Chế độ địa chỉ của bộ vi xử lý 8086 14

1.5.1 Tổng quan 14

1.5.2 Các chế độ địa chỉ dữ liệu 15

1.5.3 Chế độ địa chỉ thanh ghi 15

1.5.4 Chế độ địa chỉ tức thì 15

1.5.5 Chế độ địa chỉ trực tiếp 15

1.5.6 Chế độ địa chỉ gián tiếp thanh ghi 16

1.5.7 Chế độ địa chỉ tương đối cơ sở(Base Relative Addressing) 16

1.5.8 Chế độ địa chỉ tương đối chỉ số(Indexed Relative Addressing) 17

1.5.9 Chế độ địa chỉ tương đối chỉ số cơ sở(Base Indexed Relative) 17

1.5.10 Bảng tóm tắt các chế độ địa chỉ 18

1.6 Phân tích mã lệnh mã máy 18

1.6.1 Khuôn dạng lệnh 18

1.6.2 Một số mã lệnh mã máy 20

1.6.3 Một số ví dụ minh họa 21

1.7 Lập trình và gỡ rối bằng DEBUG 22

1.7.1 Giới thiệu về lệnh của DEBUG 22

1.7.2 Lập trình bằng DEBUG 24

1.7.3 Gỡ rối chương trình bằng DEBUG 25

Chương 2 CÁC BỘ VI XỬ LÝ TIÊN TIẾN CỦA INTEL 26

2.1 Bộ vi xử lý 80286 26

2.1.1 Các thanh ghi 26

2.1.2 Tập lệnh 27

Trang 3

Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY http://www.ebook.edu.vn

2.2 Bộ vi xử lý 80386 28

2.2.1 Sơ đồ khối của 80386 28

2.2.2 Các thanh ghi 28

2.2.3 Quản lý bộ nhớ 30

2.2.4 Tập lệnh 32

2.3 Bộ vi xử lý 80486 32

2.3.1 Các phần tử xử lý CISC và RISC 32

2.3.2 Vi xử lý 80486 33

2.4 Các bộ vi xử lý Intel Pentium 35

2.4.1 Đặc điểm chung 35

2.4.2 Cấu trúc và tính năng 35

2.5 Bộ đồng xử lý toán 80x87 39

2.5.1 Sơ lược về các số thực 39

2.5.2 Cấu trúc của 8087 39

2.5.3 Tập lệnh của 8087 39

2.6 Cấu trúc và chức năng của 8087 39

2.6.1 Sơ đồ khối bên trong của 8087 39

2.6.2 Nối 8087 với CPU 42

2.7 Đồng xử lý 80287 42

Chương 3 CẤU TRÚC LẬP TRÌNH ASSEMBLY 43

3.1 Tổng quan về ngôn ngữ lập trình ASSEMBLY 43

3.1.1 Khái niệm 43

3.1.2 So sánh hợp ngữ với các ngôn ngữ bậc cao 43

3.2 Các đoạn trong một chương trình 44

3.3 Cấu trúc chung của một lệnh ASSEMBLY 44

3.4 Khai báo dữ liệu và kiểu dữ liệu 45

3.4.1 Biến byte 45

3.4.2 Biến Word 46

3.4.3 Biến mảng 46

3.4.4 Biến chuỗi 47

3.5 Khung của một chương trình ASSEMBLY 47

3.5.1 Cấu trúc chương trình để dịch ra tệp *.EXE 47

3.5.2 Cấu trúc chương trình để dịch ra tệp *.COM 50

3.6 Cách tạo một chương trình hợp ngữ 52

Chương 4 CÁC CẤU TRÚC LẬP TRÌNH 55

4.1 Tổng quan 55

4.1.1 Các lệnh chuyển điều khiển 55

4.2 Cấu trúc tuần tự 56

4.3 Cấu trúc rẽ nhánh 57

4.3.1 Cấu trúc IF…THEN… 57

4.3.2 Cấu trúc IF THEN…ELSE 58

4.3.3 Cấu trúc rẽ nhánh CASE…OF… 59

4.3.4 Cấu trúc rẽ nhánh với điều kiện kép 60

4.4 Cấu trúc lặp 61

4.4.1 Cấu trúc FOR…TO…DO… 61

4.4.2 Cấu trúc WHILE…DO… 62

Trang 4

Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY http://www.ebook.edu.vn

4.4.3 Cấu trúc REPEAT…UNTIL… 63

4.5 Cấu trúc chương trình con 63

4.5.1 Cấu trúc của chương trình con 64

4.5.2 Cách gọi và thực hiện một chương trình con 66

4.6 MACRO 67

4.6.1 Định nghĩa MACRO 67

4.6.2 Gọi MACRO trong chương trình 68

4.6.3 Gọi MACRO từ đoạn chương trình khác 70

Chương 5 MỘT SỐ VẤN ĐỀ NÂNG CAO 72

5.1 Lập trình xử lý số nguyên 72

5.2 Cấu trúc dữ liệu mảng 72

5.2.1 Khai báo mảng 72

5.2.2 Sử dụng mảng 73

5.3 Cấu trúc dữ liệu xâu ký tự 75

5.3.1 Cờ định hướng 75

5.3.2 Lệnh chuyển đổi một chuỗi 76

5.3.3 Lệnh lưu chuỗi 77

5.3.4 Lệnh nạp chuỗi 77

5.4 Lập trình xử lý số thực 80

5.5 Lập trình cho các bộ vi xử lý tiên tiến 80

Chương 6 LIÊN KẾT ASSEMBLY VỚI CÁC NGÔN NGỮ BẬC CAO 80

6.1 Lập trình mã lệnh mã máy 80

6.1.1 Cú pháp 81

6.1.2 Thực hiện 81

6.1.3 Một số chú ý 81

6.1.4 Ví dụ 81

6.2 Lập trình mã lệnh gợi nhớ 83

6.2.1 Chèn khối lệnh ASSEMBLY 83

6.3 Ngắt và lập trình ngắt trong ngôn ngữ bậc cao 85

6.3.1 Khái niệm về ngắt 85

6.3.2 Phân loại ngắt 86

6.3.3 Giới thiệu về một số ngắt 86

Trang 5

Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 2

Phần I

BỘ VI XỬ LÝ

Chương 1 BỘ VI XỬ LÝ 8086/8088

1.1 Tổng quan về các bộ vi xử lý của Intel

Một hệ vi xử lý được gọi là một hệ thống trong đó bao gồm:

- Đơn vị nhập xuất: Được sử dụng để nhập và xuất số liệu, dữ liệu

- Đơn vị xử lý: Xử lý các dữ liệu nhập vào, sau đó xuất ra các thiết bị ra

- Bộ nhớ: Lưu trữ thông tin, dữ liệu trong quá trình xử lý

Tất cả các thiết bị có các chức năng như vậy đều có thể được gọi là một hệ vi xử lý Máy

vi tính là một hệ thống vi xử lý Một thành phần quan trọng trong hệ thống máy vi tính,

đó là bộ vi xử lý

Trên thực tế, có rất nhiều hãng chế tạo bộ vi xử lý cho các máy vi tính như: IBM, Intel,

Cyrix, AMD, Motorola Nhưng thông dụng nhất vẫn là bộ vi xử lý của Intel

Các bộ vi xử lý của Intel được phát triển qua các thời kỳ như sau:

o Năm 1971, Intel đưa ra bộ vi xử lý 4004 với 4 bit dữ liệu, 12 bit địa chỉ; 0,8MHz

o Năm 1972, bộ vi xử lý Intel 8080 ra đời với 8bit dữ liệu, 12 bit địa chỉ; tốc độ xử

o Năm 1993, bộ vi xử lý Pentium ra đời với 64 bit dữ liệu, tốc độ xử lý 100MHz

Sau đó là các bộ vi xử lý Pentium Pro, Pentium II, Pentium III, Celeron, Pentium 4,

Trang 6

Bộ mụn Kỹ thuật mỏy tớnh – Khoa CNTT – ĐHSPKT_HY Trang 3

1.2 Cấu trỳc bộ vi xử lý 8086

1.2.1 Sơ đồ khối

1.2.2 Giải thớch cỏc thành phần trong sơ đồ

Khối phối ghộp Bus (Bus Interface Unit - BIU)

Khối thực hiện lệnh (Execution Unit - EU)

EU

Logic điều khiển Bus

Đệm lệnh (hμng đợi lệnh) (6 byte cho 8086)

Bus ngoμi

∑ Bus dữ liệu

(8 bit)

Bus trong của CPU

8 bit dữ liệu

20 bit

địa chỉ

Bus địa chỉ (20 bit)

Các thanh ghi

đoạn

vμ con trỏ lệnh

Accumulator Base

Count Data Stack pointer Base pointer Source index

Destination index

Code segment Data segment Stack segmentExtra segment

Intruction pointer

Bus dữ liệu ALU (16 bit)

Hình 1.1 : Sơ đồ cấu trúc bên trong bộ vi xử lý 8086/8088

Trang 7

Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 4

Đơn vị EU của 8086 và 8088 là giống nhau nó bao gồm ALU, các thanh ghi cờ,

thanh ghi đệm và các thanh ghi đa năng Các kênh truyền dữ liệu bên trong EU đều là 16

bit

EU không nối trực tiếp với thế giới bên ngoài, nó lấy lệnh từ hàng đợi lệnh của

BIU Nếu lệnh cần truy xuất bộ nhớ hoặc cổng vào/ra (là nơi liên hệ với thiết bị ngoại vi )

thì EU yêu cầu BIU nhận hoặc gửi dữ liệu Tất cả các địa chỉ mà BIU thao tác đều là 16

bit, khi gửi sang cho BIU sẽ sắp đặt lại để tạo thành địa chỉ vật lý 20 bit phát ra các chân

ra địa chỉ của chip

Đơn vị BIU

Đơn vị BIU thực hiện tất cả các thao tác với Bus mà BIU yêu cầu, ngoài ra khi

BIU đang thực hiện một lệnh, thì BIU có thể lấy lệnh từ bộ nhớ về đặt trong hàng đợi

lệnh Hàng đợi lệnh của 8086 dài 6 byte, của 8088 dài 4 byte Việc lấy lệnh về của BIU

và việc thực hiện lệnh của BIU thực hiện song song với nhau (trừ một số trường hợp

ngoại lệ) làm cho hiệu năng của vi xử lý tăng lên

1.2.3 Một số khái niệm cơ bản

* Pipelining: Là một phương pháp xử lý lệnh trên một đường ống lệnh, có thể xử lý nhiều

lệnh đồng thời trong cùng một khoảng thời gian Trong khi lệnh này đang được xử lý thì

lệnh tiếp sau nó đã được nhận vào

Chúng ta có thể so sánh phương pháp xử lý bằng pipeline và phương pháp xử lý

dòng lệnh tuần tự như hai hình dưới đây:

Hình 1.2 So sánh pipeline và tuần tự a) Xử lý tuần tự b) Xử lý bằng Pipeline

* CISC, RISC và VLIW

CISC – Complex Instruction Set Computer (Máy tính với tập lệnh đầy đủ)

RISC – Reduced Instruction Set Computer (Máy tính với tập lệnh rút gọn)

VLIW – Very Long Instruction Word (Máy tính với từ lệnh cực dài)

Về cơ bản, công nghệ hiện nay vẫn dựa trên cơ sở bộ vi xử lý CISC và RISC Chúng ta

có thể so sánh sơ bộ về hai công nghệ này:

Trang 8

Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 5

RISC CISC Cấu thành từ một vài lệnh đơn

Kích thước và thời gian thực hiện của các lệnh khác nhau

1.3 Tập thanh ghi của bộ vi xử lý 8086

1.3.1 Các thanh ghi dữ liệu

Mặc dù bộ vi xử lý có thể thao tác với dữ liệu bộ nhớ nhưng một lệnh như vậy sẽ

được thực hiện nhanh hơn (cần ít chu kỳ đồng hồ hơn), nếu dữ liệu được lưu trong các

thanh ghi Đó cũng là nguyên nhân tại sao ngày nay các bộ vi xử lý được sản xuất với xu

hướng có nhiều thanh ghi hơn

Với các thanh ghi dữ liệu các byte thấp và byte cao có thể được truy nhập một

cách riêng biệt, sử dụng từng 8 bit một cách riêng rẽ Byte cao của thanh ghi AX được

gọi là AH và các byte thấp được gọi là AL Tương tự cho các thanh ghi BX, CX, DX có

BH, BL, CH, CL, DH, DL

Chức năng chuyên biệt của từng thanh ghi dữ liệu :

1 Thanh ghi AX (thanh ghi chứa- Accumulator register)

AX là thanh ghi được sử dụng nhiều nhất trong các lệnh số học, logic, và chuyển dữ

liệu bởi vì việc sử dụng chúng tạo ra mã máy ngắn nhất

Trong các phép toán nhân chia một trong các số hạng tham gia phải được chứa trong

thanh ghi AX (nếu là 16 bit) và AL (nếu là 8 bit) Các thao tác vào ra cũng sử dụng thanh

ghi AX hoặc AL

2 Thanh ghi BX (thanh ghi cơ sở- Base register)

Thanh ghi này ngoài việc thao tác dữ liệu nó thường chứa địa chỉ cơ sở của một bảng

dùng cho lệnh XLAT.(dịch AL thành 1 giá trị trong bảng BX)

3 Thanh ghi CX (thanh ghi đếm- Count register)

Việc xây dựng một chương trình lặp được thực hiện dễ dàng bằng cách

sử dụng thanh ghi CX, trong đó CX đóng vai trò bộ đếm số vòng lặp (REP, LOOP) CL

được dùng làm bộ đếm trong các lệnh dịch và quay bit

4 Thanh ghi DX (thanh ghi dữ liệu - Data register)

DX và AX cùng được sử dụng trong các thao tác của phép nhân hoặc

chia các số 16 bit DX còn được sử dụng để chứa địa chỉ của các cổng trong các

lệnh vào ra dữ liệu trực tiếp (In/Out)

Trang 9

Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 6

1.3.2 Các thanh ghi đoạn: CS, DS, ES, SS

Khối BIU đưa ra trên Bus địa chỉ 20 bit địa chỉ, như vậy 8088 có khả năng phân

biệt được 220= 1 048 576 = 1 Mbyte ô nhớ Nói cách khác không gian địa chỉ của 8088

là 1 Mbyte Trong không gian 1 Mbyte bộ nhớ này cần chia thành nhiều đoạn khác nhau :

- Đoạn chứa chương trình

- Đoạn chứa dữ liệu và kết quả trung gian của chương trình

- Tạo ra vùng nhớ đặc biệt gọi là ngăn xếp

Trong thực tế bộ vi xử lý 8088 có các thanh ghi 16 bit liên quan đến địa chỉ đầu của các

đoạn trên và chúng được gọi là các thanh ghi đoạn (Segment Registers): CS, DS, SS, ES

Các thanh ghi đoạn này chỉ ra địa chỉ đầu của 4 đoạn trong bộ nhớ dung lượng lớn

nhất của 4 đoạn này là 64 Kbyte Các đoạn có thể nằm cách nhau hoặc trùm lên nhau

Nội dung của thanh ghi sẽ xác định địa chỉ của ô nhớ đầu tiên của đoạn, địa chỉ

này gọi là địa chỉ cơ sở Địa chỉ của các ô nhớ khác trong cùng đoạn được tính bằng cách

cộng thêm vào địa chỉ cơ sở một giá trị gọi là địa chỉ lệch hay độ lệch (offset)

Địa chỉ vật lý (20 bit) của một ô nhớ được xác định như sau :

Điạ chỉ vật lý = Điạ chỉ đoạn *10h+ thanh ghi lệch (hay offset)

và điạ chỉ logic trong máy tính luôn được biểu diễn dưới dạng : Segment:Offset

Tại mọi thời điểm thì chỉ những ô nhớ được định địa chỉ bởi 4 đoạn trên mới được truy

cập

1.3.3 Các thanh ghi con trỏ và chỉ số: SI, DI, SP, BP

Trong 8088 có 3 thanh ghi con trỏ và 2 thanh ghi chỉ số 16 bit Các thanh ghi này

(trừ IP), đều có thể được dùng như các thanh ghi đa năng, nhưng ứng dụng chính của mỗi

thanh ghi là chúng được gầm định như là thanh ghi lệch cho các đoạn tương ứng Cụ thể

như sau :

1 Thanh ghi BP : (con trỏ cơ sở - Base Pointer)

BP luôn trỏ vào một dữ liệu nằm trong đoạn ngăn xếp SS Địa chỉ cụ thể SS:BP được

xác định như trên

2 Thanh ghi SP(con trỏ ngăn xếp - Stack Pointer)

Được sử dụng kết hợp với SS để truy nhập vào đoạn ngăn xếp SP luôn trỏ vào đỉnh

hiện thời của ngăn xếp trong đoạn ngăn xếp SS Địa chỉ cụ thể SS:SP

3 Thanh ghi SI(chỉ số nguồn - Source Index)

SI chỉ vào dữ liệu trong đoạn dữ liệu DS mà địa chỉ cụ thể tương ứng với DS:SI

Bằng cách tăng nội dung của SI chúng ta có thể truy nhập dễ dàng đến các ô nhớ liên

tiếp

4 Thanh ghi DI (chỉ số đích - Destination Index)

Trang 10

Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 7

SI chỉ vào dữ liệu trong đoạn dữ liệu DS mà địa chỉ cụ thể tương ứng với DS:DI Có

một số lệnh gọi là các thao tác chuỗi sử dụng DI để truy nhập đến các ô nhớ được định

địa chỉ bởi ES

1.3.4 Thanh ghi con trỏ lệnh: IP

Các thanh ghi bộ nhớ chúng ta vừa trình bày dùng để truy cập dữ liệu, để truy

nhập đến các lệnh, 8088 sử dụng các thanh ghi CS và IP Thanh ghi CS chứa điạ chỉ của

lệnh tiếp theo còn IP chứa địa chỉ offset của lệnh đó Thanh ghi IP được cập nhập mỗi

khi có một lệnh được thực hiện

1.3.5 Thanh ghi cờ

Đây là thanh ghi 16 bit, mỗi bit được sử dụng để thể hiện một trạng thái của bộ vi

xử lý tại một thời điểm nhất định trong quá trình thực hiện chương trình Mới chỉ có 9 bit

được sử dụng và người ta gọi mỗi bit là một cờ

* Các cờ trạng thái

CF (Carry Flag): được thiết lập khi phép toán thực hiện có nhớ hoặc có vay mượn

PF(Parity Flag): được thiết lập khi kết quả của phép toán có tổng số bit có giá trị 1

là một số chẵn (ở phần thấp của kết quả)

AF (Auxiliary Flag): được thiết lập khi có nhớ từ "bit có trọng số lớn nhất ở phần

thấp" sang "bit có trọng số thấp nhất ở phần cao"

ZF (Zero Flag) : Được thiết lập khi tất cả các bit của kết quả có giá trị 0

SF ( Sign Flag): được thiết lập khi bit MSB của kết quả có giá trị 1

OF (Overflow Flag): được thiết lập khi kết quả nằm ngoài giới hạn cho phép

DF (Direction Flag): Nếu bit này có giá trị 1 thì bộ vi xử lý cho phép duyệt chuỗi

từ phải sang trái hoặc từ địa chỉ cao đến địa chỉ thấp

1.4 Tập lệnh của bộ vi xử lý

1.4.1 Sơ lược về tập lệnh của bộ vi xử lý

Tập lệnh của bộ vi xử lý là thành phần cơ bản nhất để máy tính có thể thực hiện

các yêu cầu của người sử dụng Tất cả các thao tác, các chương trình do người dùng lập

ra đều được bộ vi xử lý thực hiện bằng việc ánh xạ chúng dưới dạng mã máy, mã lệnh

riêng của bộ vi xử lý

Trang 11

Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 8

Thông thường, với các lập trình viên, các lệnh của bộ vi xử lý được hiểu dưới góc

độ là các lệnh gợi nhớ (Mnemonic) Với mã lệnh gợi nhớ thì một lệnh của bộ vi xử lý bao

Nếu là các lệnh thật thì đây chính là các toán hạng của lệnh Với bộ vi xử lý

8086/8088, các toán hạng này có thể là 0,1 hoặc 2

Ví dụ:

ADD AL,[BX]

ADD là lệnh thực hiện phép cộng; AL và [BX] là hai toán hạng với qui định nếu tên

thanh ghi hoặc một giá trị hằng nằm trong dấu [] thì đó là địa chỉ OFFSET của ô nhớ

chứa dữ liệu cần thao tác

1.4.2 Tập lệnh của CPU

Trong tập lệnh của vi xử lý 8086 có rất nhiều lệnh, mỗi lệnh thực hiện một nhiệm

vụ cụ thể nào đó Song, trong giới hạn nhất định, chúng ta có thể nghiên cứu một

Di chuyển nội dung của toán hạng nguồn vào toán hạng đích Hai toán hạng phải có

cùng độ lớn và không được đồng thời là 2 thanh ghi đoạn hoặc hai ô nhớ Toán hạng

đích phải là thanh ghi hay ô nhớ Giá trị của toán hạng nguồn không bị thay đổi, sau

khi thực hiện lệnh

Ví dụ :

Trang 12

Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 9

- Không thể chuyển trực tiếp một giá trị byte vào một toán hạng đích là một từ và

ngược lại Nếu cần, có thể sử dụng các toán tử PTR BYTE hoặc PTR WORD

- Không thể chuyển trực tiếp một hằng số vào một thanh ghi đoạn Trong trường hợp

cần thiết, có thể chuyển tạm thời qua một thanh ghi khác

Ví dụ: Muốn chuyển giá trị 100 vào thanh ghi DS, ta có thể sử dụng hai lệnh sau

MOV AX,100

MOV DS,AX

MOVSB/MOVSW chuỗi đích, chuỗi nguồn

là hai lệnh dùng để chuyển các phần tử của một chuỗi nguồn sang một chuỗi đích

MOVSB : MOVe String Byte

MOVSW : MOVe String Word

b) XCHG : eXCHanGe 2 operands ( tráo đổi nội dung của hai toán hạng)

- Cả hai toán hạng không thể là hằng số

- Không thể tráo đổi hai toán hạng khác kiểu Nếu cần, có thể sử dụng các toán tử

PTR BYTE hoặc PTR WORD

- Không được phép là 2 thanh ghi đoạn

- Không được phép là hai ô nhớ

c) PUSH : PUSH Word On the Stack (Đẩy vào ngăn xếp)

PUSH toán hạng

Đẩy nội dung của toán hạng vào ngăn xếp, nội dung của toán hạng không bị thay

Trang 13

Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 10

đổi (copy nội dung)

Toán hạng nhất thiết phải là thanh ghi (đối với 8086/8088)

Ví dụ:

PUSH AX

Đẩy nội dung của thanh ghi AX vào ngăn xếp

d) POP : POP Word from Top of Stack (lấy ra từ đỉnh ngăn xếp)

POP đích

Toán hạng nhất thiết phải là thanh ghi (đối với 8086/8088), trừ thanh ghi CS

1.4.4 Nhóm lệnh số học

Trong nhóm này ta quam tâm đến các lệnh cơ bản sau : ADD, ADC, INC, SUB,

SBB, DEC MUL(IMUL), DIV(IDIV)

a) ADD :Addition (cộng hai toán hạng)

ADD đích, nguồn

Cộng toán hạng đích với toán hạng nguồn Kết quả được chứa trong toán hạng đích

đích=đích+nguồn Điều kiện: hai toán hạng phải cùng độ dài, không được là hai thanh ghi đoạn

c) MUL : Multiplexing - Multiply Unsigned Byte or Word (nhân số không dấu)

Nhân toán hạng với nội dung chứa trong thanh ghi AX Tức là nhân hai toán hạng với

nhau nhưng 1 toán hạng phải được chứa trong AX Hoặc là trong DX và AX

MUL gốc

Tuỳ vào độ dài của toán hạng gốc mà xác định kết quả :

- gốc : 8 bit thì số bị nhân trong AL -> kết quả trong AX

- gốc : 16 bit thì số bị nhân trong AX -> kết quả trong DX:AX

Ví dụ :

MOV AL,10h

MOV BL,5h

Trang 14

Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 11

MUL BL

Vì toán hạng nguồn là thanh ghi BL, nên kết quả sẽ được lấy ra trong AX AX=50h

Trong trường hợp muốn nhân số có dấu, ta có thể sử dụng lệnh IMUL có dạng lệnh

như lệnh MUL

d) DIV : Unsigned Divide (chia hai số không dấu)

DIV nguồn

- nguồn là số 8 bit : AX/nguồn số bị chia phải là số không dấu 16 bit trong AX

sau khi chia AL chứa thương còn AH chứa số dư

- nguồn là số 16 bit : DX:AX/nguồn số bị chia phải là số không dấu và đặt trong

cặp DX:AX sau khi chia; AX chứa thương còn DX chứa số dư

nguồn =0 (chia cho 0) hoặc kết quả lớn hơn FFH, FFFFh thì gọi ngắt INT 0

Trong trường hợp muốn chia số có dấu, ta có thể sử dụng lệnh IDIV có dạng lệnh như

lệnh DIV

1.4.5 Nhóm lệnh logic

Trong nhóm này ta quan tâm đến các lệnh sau: AND, OR, XOR, NOT

a) AND : và hai toán hạng

AND đích,nguồn

Đích, nguồn phải có điều kiện :

- cùng độ dài

- không phải đồng là 2 ô nhớ, 2 thanh ghi đoạn

thường dùng để che đi hay giữ lại một vài bit nào đó của toán hạng đích

- không phải đồng là 2 ô nhớ, 2 thanh ghi đoạn

thường dùng để lập một vai bit nào đó của toán hạng đích= cách cộng logic toán hạng

đó với toán hạng tức thời mà các bit 1 có vị trí tương ứng với bit cần lập

Ví dụ : OR AL,BL

OR AL,0Fh

c) NOT : lấy phủ định - đảo bit NOT toánhạng

Dùng để đảo bit của một toán hạng (lấy bù 1)

d) XOR : hoặc loại trừ toán hạng

Dùng để xoá về 0 một thanh ghi nào đó

Trang 15

Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 12

Ví dụ: XOR AX,AX ; Xoá thanh ghi AX về 0

1.4.6 Nhóm lệnh dịch chuyển và quay

Các lệnh cần quan tâm : SHL, SHR, ROL, ROR

a) SHL : Shift Left - dịch trái

SHL đích,1

SHL đích,CL

Dịch các bit của toán hạng đích sang trái một vị trí hoặc CL vị trí Một giá trị 0 được

đưa vào bên phải của toán hạng đích, còn bit MSB được đưa vào CF

Thực hiện phép nhân bằng cách dịch trái

b) SHR : Shift Right ; Dịch phải

SHR đích,CL

Dịch các bit của toán hạng đích sang phải 1 hoặc CL vị trí

Giá trị 0 được đưa vào bit MSB còn gía trị của bit LSB được chuyển vào cờ CF

Dùng lệnh dịch phải thực hiện phép chia

c) ROL :Rotation Left- quay trái

CF

Lệnh ROL

Trang 16

Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 13

Nếu điều kiện nhảy được thoả thì sẽ nhảy đến nhãn_đích và thi lệnh này nhãn có thể

trước hoặc sau Trước không quá 126 byte, sau không quá 127 byte

Bảng các lệnh nhảy

Nhảy có dấu

nhảy

Jg/jnle Nhảy nếu lớn hơn

Nhảy nếu không nhỏ hơn hay bằng

Zf=0, sf=of

Jge/jnl Nhảy nếu lớn hơn hay bằng

Nhảy nếu không nhỏ hơn

Sf=0f

Jl/jnge Nhảy nếu nhỏ hơn

Nhảy nếu không lớn hơn hay bằng

Sf<>of

Jle/jng Nhảy nêu nhỏ hơn hay bằng

Nhảy nếu không lớn hơn

Zf=1 hay sf=of

Nhảy không dấu

Ja/jnbe Nhảy nếu lớn hơn

Nhảy nếu không nhỏ hơn hay bằng

Cf=0 và zf=0

Jae/jnb Nhảy nếu lớn hơn hay bằng

Nhảy nếu không nhỏ hơn

Cf=0 Jb/jnae Nhảy nếu nhỏ hơn Cf=1

CF

Lệnh ROR

015

Trang 17

Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 14

Nhảy nếu không lớn hơn hay bằng

Nhảy điều kiện đơn

Je/jz Nhảy nếu bằng

Nhảy nếu bằng 0

Zf=1

Jne/jnz Nhảy nếu không bằng

Nhảy nếu không bằng 0

Nếu thanh chứa là AL thì dữ liệu 8 bit được đưa vào có giá trị là điạ chỉ cổng

Nếu thanh chứa là AX thì dữ liệu 16 được đưa vào từ cổng có giá trị là điạ chỉ cổng +1

Điạ chỉ cổng trong khoảng 00h - FFh

b) OUT :xuất ra cổng 1 byte hay 1 word

OUT điạchỉcổng, Acc

1.4.9 Nhóm lệnh điều khiển

a) CALL chương_trình_con

Gọi một chương trình con có tên gọi: chương_trình_con

b) INT số_hiệu_ngắt

Lệnh gọi ngắt với số_hiệu_ngắt

c) HLT Lệnh treo máy dừng chương trình

d) NOP : No Operation không thực hiện lệnh nào cả

1.5 Chế độ địa chỉ của bộ vi xử lý 8086

1.5.1 Tổng quan

Các chế độ địa chỉ chính là phương pháp để xác định toán hạng hoặc kiểu toán

hạng trong các câu lệnh Bộ vi xử lý 8086/8088 có tổng số trên 20 chế độ địa chỉ cho các

thành phần khác nhau như mã lệnh, dữ liệu, ngăn xếp Nhưng trên thực tế, việc lập trình,

phân tích lệnh, người ta chỉ qua tâm đến việc dữ liệu của lệnh được xử lý ra sao Vì vậy,

chúng ta cũng chỉ nghiên cứu về các chế độ địa chỉ dữ liệu của lệnh

Trong bộ vi xử lý 8086 qui định có 7 chế độ địa chỉ cho toán hạng của lệnh Cụ thể

bao gồm các chế độ sau:

- Chế độ địa chỉ thanh ghi

Trang 18

Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 15

- Chế độ địa chỉ tức thì

- Chế độ địa chỉ trực tiếp

- Chế độ địa chỉ gián tiếp thanh ghi

- Chế độ địa chỉ tương đối cơ sở

- Chế độ địa chỉ tương đối chỉ số

- Chế độ địa chỉ tương đối chỉ số cơ sở

1.5.2 Các chế độ địa chỉ dữ liệu

1.5.3 Chế độ địa chỉ thanh ghi

Trong chế độ này việc trao đổi thông tin diễn ra trực tiếp giữa các thanh ghi Toán

tử chỉ hoàn toàn là các thanh ghi Loại địa chỉ thanh ghi không cần truy nhập bộ nhớ nên

rất nhanh

Ví dụ: MOV AX, BX ;Sao chép nội dung thanh ghi BX sang thanh ghi AX

MOV AL,CL ; Sao chép nội dung thang ghi CL sang thanh ghi AL

ADD AL, CL ; Cộng nội dung thanh ghi Clvới thanh ghi AL

1.5.4 Chế độ địa chỉ tức thì

Trong chế độ này toán hạng đích là một thanh ghi hoặc ô nhớ, còn toán hạng

nguồn là một hằng số Ta có thể dùng chế độ này để nạp dữ liệu vào bất kỳ thanh ghi nào,

trừ thanh ghi đoạn và thanh ghi cờ

Ví dụ: MOV CL, 5Fh; chuyển 5Fh vào thanh ghi CL

MOV AX, 0FF0h; Chuyển 0FF0h vào trong thanh ghi AX

MOV DS, AX; Chuyển nội dung thanh ghi AX vào DS

MOV [BX], 10; Chuyển 10 vào ô nhớ tại địa chỉ DS:BXX

1.5.5 Chế độ địa chỉ trực tiếp

Trong chế độ này, một toán hạng chứa địa chỉ lệch của ô nhớ dùng chứa dữ liệu,

Mã lệnh Tên các thanh ghi TËp c¸c thanh

Trang 19

Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 16

còn toán hạng kia chỉ có thể là thanh ghi

Ví dụ: MOV Al, [1053] ; Chuyển nội dung ô nhớ địa chỉ DS:1053h vào AL

MOV [5307h], CX ; Chuyển nội dung CX vào 2 ô nhớ liên tiếp có địa

; chỉ DS:5307h và DS:5308h ADD [5307h], AL ; Cộng nội dung AL vào ô nhớ có địa chỉ DS:5307h

1.5.6 Chế độ địa chỉ gián tiếp thanh ghi

Trong chế độ này, một toán hạng là một thanh ghi được sử dụng để chứa địa chỉ

lệch (Offset) của ô nhớ chứa dữ liệu, còn toán hạng kia chỉ có thể là thanh ghi mà không

được là ô nhớ

Ví dụ: MOV AL, [BX] ; Chuyển nội dung ô nhớ có đ/c DS:BX vào AL

MOV [SI], CL ; Chuyển nội dung CL vào ô nhớ có đ/c DS:SI MOV [DI], AX ; Chuyển nội dung AX vào 2 ô nhớ liên tiếp có

; địa chỉ DS:DI và DS:DI+1

1.5.7 Chế độ địa chỉ tương đối cơ sở(Base Relative Addressing)

Trong chế độ này, các thanh ghi cơ sở BX và BP là các hằng số biểu diễn các giá

trị dịch chuyển (Displacement Values), kết hợp với DS và SS để tính địa chỉ hiệu dụng

của toán hạng các vùng nhớ Sự có mặt của các giá trị dịch chuyển xác định tính tương

đối (so với cơ sở) của địa chỉ

Ví dụ 1: MOV CX, [BX]+10 ; Chuyển nội dung 2 ô nhớ liên tiếp có địa chỉ

MOV CX, [BX+10] ; DS:(BX+10) và DS:(BX+11) vào CX

MOV CL, [BP]+5 ; Chuyển nội dung ô nhớ SS:(BP+5) vào AL

Chú ý: Trong các ví dụ trên, các giá trị 10 và3 được gọi là các giá trị dịch chuyển

- (BX+10) hoặc (BP+5) gọi là địac chỉ hiệu dụng (Effective Address – EA)

Mã lệnh [Thanh ghi] Tập các thanh ghi Bộ nhớ

Mã lệnh Địa chỉ thanh ghi

Tập các thanh ghi

BX,BP

Bộ nhớGiá trị cụ thể

Trang 20

Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 17

- DS:(BX+10) hoặc SS:(BP+5) chính là địa chỉ logic tương ứng với 1 PA

1.5.8 Chế độ địa chỉ tương đối chỉ số(Indexed Relative Addressing)

Trong chế độ này, các thanh ghi chỉ số DI và SI và các hằng số biểu diễn giá trị

dịch chuyển, được dùng để tính địa chỉ của toán hạng trong vùng nhớ DS

Ví dụ: MOV AX,[SI]+10 ; Chuyển nội dung 2 ô nhớ liên tiếp có địa chỉ

; DS:(SI+10) và DS:(SI+11) vào AX MOV AX,[SI+10] ; Tương tự như trên

MOV AL, [DI+5]; chuyển nội dung ô nhớ DS:(DI+5) vào CL

1.5.9 Chế độ địa chỉ tương đối chỉ số cơ sở(Base Indexed Relative)

Là sự kết hợp của 2 chế độ địa chỉ, đó là chế độ địa chỉ tương đối chỉ số và chế độ

địa chỉ tương đối cơ sở Trong chế độ này dùng cả 2 thanh ghi cơ sở và 2 thanh ghi chỉ số

để tính địa chỉ của toán hạng Chế độ này rất phù hợp với việc địa chỉ hoá các mảng 2

chiều

Ví dụ: MOV AX, [BX]+[SI]+8 ;chuyển nội dung 2 ô nhớ liên tiếp có địa chỉ

MOV AX, [BX+SI] + 8 ; DS:(BX+SI+8) và DS:(BX+SI+9) vào AX MOV AX, [BX + SI + 8] ;

MOV CL, [BP][DI]+5 ; chuyển nội dung ô nhớ có địa chỉ

; DS:(BP+DI+5) vào CL

Chú ý: Trong các chế độ địa chỉ trên, các thanh ghi đoạn và các thanh ghi lệch

được ngầm định đi kèm với nhau Muốn loại bỏ sự ngầm định đó thì ta có thể viết

tường minh địa chỉ của đoạn

Mã lệnh Địa chỉ thanh ghi

Tập các thanh ghi

DI, SI

Bộ nhớ Giá trị cụ thể

Mã lệnh Thanh ghi

Bộ nhớ

Giá trị cụ thể

Tập các thanh ghi BX,BP

Thanh ghi

Tập các thanh ghi

SI,DI

Trang 21

Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 18

Ví dụ: MOV AL, [BX] ; ngầm định là DS:BX

Muốn bỏ ngầm định là DS ta phải viết

MOV AL, SS:[BX]; chuyển thành SS:BX

1.5.10 Bảng tóm tắt các chế độ địa chỉ

DS

DS

SS

SS

Các cặp thanh ghi đoạn và thanh ghi lệch ngầm định

1.6 Phân tích mã lệnh mã máy

1.6.1 Khuôn dạng lệnh

Mã lệnh dành cho vi xử lý được viết dưới dạng nhị phân Nhưng để người lập

trình có thể hiểu và lập trình được thì các lệnh của vi xử lý được biểu diễn dưới dạng mã

lệnh gợi nhớ (Mnemonic) Song, về cơ bản chúng ta cũng cầm phải biết về mã lệnh mã

máy của bộ vi xử lý để có thể hiểu rằng một lệnh được bộ vi xử lý thực hiện ra sao và cấu

trúc của các lệnh đó như thế nào

Vấn đề ta cần phải hiểu là một lệnh của bộ vi xử lý 8086 có độ dài lệnh tối đa là 6

byte Cấu trúc chung của một mã lệnh đó bao gồm:

Trang 22

Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 19

Opcode (Operation Code) - Phân biệt lệnh đó là lệnh gì Ví dụ, lệnh MOV=100010

D (Direction) chỉ hướng hành động của lệnh D=0 từ thanh ghi, D=1 tới thanh ghi

W (Word) chỉ độ dài của toán hạng W=1 toán hạng 2 byte, W=0 toán hạng 1 byte

mode chỉ chế độ địa chỉ của toán hạng Ví dụ, chế độ thanh ghi mode=11

reg (Register) chỉ mã của thanh ghi trong lệnh (nếu lệnh có toán hạng là thanh ghi)

M/R (Memory/Register) Chỉ mã của thanh ghi hoặc ô nhớ theo chế độ địa chỉ

Disp (Displacement) đoạn dịch chuyển hoặc là toán hạng tức thì

Bảng xác định chế độ địa chỉ toán hạng bằng các trường MOD và R/M:

Trang 23

Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 20

Từ thanh ghi đến ô nhớ: 1010001w addr_low addr_high

Từ ô nhớ đến thanh ghi: 1010000w addr_low addr_high

Từ ô nhớ hay thanh ghi đến thanh ghi đoạn: 10001110 mod 0 seg r/m

Từ thanh ghi đoạn đến ô nhớ hay thanh ghi: 10001110 mod 0 seg r/m

Từ ô nhớ hay thanh ghi đến thanh ghi/ từ thanh ghi vào ô nhớ:

100010d1 mod seg r/m (addr_low addr_high)

Từ dữ liệu trực tiếp vào thanh ghi: 1011w reg data (data_High)

Từ dữ liệu trực tiếp vào thanh ghi hay ô nhớ:

1100011w mod 000 r/m data (data_High)

b/ Lệnh PUSH

Toán hạng nguồn là thanh ghi công dụng chung: 01010 reg

Thanh ghi đoạn: 000 seg 110

Ô nhớ hoặc thanh ghi: 11111111 mod 110 r/m

c/ Lệnh POP

Toán hạng đích là thanh ghi công dụng chung: 01011 reg

Thanh ghi đoạn: 000 seg 111

Ô nhớ hoặc thanh ghi: 10001111 mod 000 r/m

d/ Lệnh ADD

Cộng ô nhớ hay thanh ghi đến thanh ghi: 000000dw mod reg r/m

Trang 24

Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 21

Cộng trực tiếp số hạng vào thanh ghi: 0000010w data

Cộng trực tiếp ô nhớ hay thanh ghi cho toán hạng trực tiếp:

100000sw mod 000 r/m data

(Trong đó s được thiết lập nếu 1 byte số liệu được cộng vào ô nhớ hay thanh ghi 16bit)

e/ Lệnh SUB

Trừ ô nhớ hay thanh ghi vào thanh ghi: 100010dw mode reg r/m

Trừ thanh ghi cho toán hạng trực tiếp: 0010110w data

Trừ ô nhớ hay thanh ghi cho toán hạng trực tiếp: 100000sw mod 101 r/m data

(Trong đó s được thiết lập nếu 1 byte số liệu được cộng vào ô nhớ hay thanh ghi 16bit)

f/ Lệnh AND

Và ô nhớ hay thanh ghi với thanh ghi: 001000dw mod reg r/m

Và trực tiếp với thanh ghi: 0010010w data

Và trực tiếp với ô nhớ hay thanh ghi: 1000000w mod 100 r/m data

g/ Lệnh OR

Hoặc ô nhớ hay thanh ghi với thanh ghi: 000010dw mod reg r/m

Hoặc dữ liệu trực tiếp với thanh ghi: 0000110w data

Hoặc trực tiếp với ô nhớ hay thanh ghi: 1000000w mod 001 r/m data

h/ Lệnh XOR

XOR ô nhớ hay thanh ghi với thanh ghi: 001100dw mod reg r/m

XOR toán hạng trực tiếp với thanh ghi: 0011010w data

XOR toán hạng trực tiếp với ô nhớ hay thanh ghi: 1000000w mod 110 r/m data

1.6.3 Một số ví dụ minh họa

Phân tích mã lệnh mã máy của các lệnh sau:

- MOV SP,BX ; sao chép nội dung trong thanh ghi BX sang thanh ghi SP

opcode=100010

D=1 gửi tới thanh ghi

w=1 chuyển một từ

MOD=11 thanh ghi tới thanh ghi

REG=100 thanh ghi SP

R/M=011 thanh ghi BX

==> Mã lệnh mã máy của lệnh này là: 1000101111100011b = 8BE3h

- MOV CL,[BX] ; sao chép nội dung từ ô nhớ DS:BX sang thanh ghi CL

Opcode=100010

D=1 tới thanh ghi

W=0 toán hạng 8 bit

Trang 25

Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 22

MOD=00 ô nhớ không dịch chuyển

REG=001 thanh ghi CL

R/M = 111 toán hạng là ô nhớ DS:BX

==> Mã lệnh mã máy của lệnh này là: 1000101000001111b = 8A0Fh

- MOV 43h[SI], DH; chuyển nội dung thanh ghi DH sang ô nhớ DS:(SI+43h)

Opcode=100010

D=0 từ thanh ghi

W=0 chuyển Byte

MOD=01 ô nhớ, dịch chuyển 1 byte

REG=110 thanh ghi DH

R/M=100 ô nhớ DS:SI

disp=01000011 độ dịch chuyển là 43h

==> Mã lệnh mã máy của lệnh này là: 100010000111010001000011b = 887443h

1.7 Lập trình và gỡ rối bằng DEBUG

Máy tính trước đây là các máy có kích thước tương đối lớn, được chế tạo từ các đèn điện

tử chân không, vì vậy, các con rệp (BUGS) có thể chui vào đó và làm hỏng máy móc, dẫn

đến việc máy móc có thể xử lý sai Trước tình thế đó, người ta đưa ra một yêu cầu bắt các

con rệp phá hoại này và được gọi là DEBUG (Bắt rệp)

Từ đó đến nay, công việc xử lý làm cho chương trình máy tính được thực hiện chính xác,

tránh gây ra lỗi được gọi là DEBUG Các chương trình thực hiện nhiệm vụ này được gọi

là các trình gỡ rối

Hiện nay, có rất nhiều trình gỡ rối được sử dụng để sửa lỗi cho các trình ứng dụng như:

DEBUG.EXE (trong DOS), Debugging (trong WINDOWS)

Để thực hiện được trình DEBUG trong môi trường DOS, ta có thể thực hiện theo cú pháp

sau:

DEBUG {ENTER}

DEBUG <tên tệp cần gỡ rối> {ENTER}

1.7.1 Giới thiệu về lệnh của DEBUG

Sau khi chạy trình DEBUG, dấu nhắc lệnh của DEBUG sẽ hiện lên với dấu (-) Tại đây ta

có thể gõ vào các lệnh của DEBUG Cụ thể:

A - Assemble - Hợp ngữ: được sử dụng để sửa các lệnh của chương trình

Cú pháp: A <địa chỉ offset của lệnh cần sửa>

Trang 26

Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 23

Cú pháp: D [Address]

In nội dung một vùng nhớ 128 byte bắt đầu từ địa chỉ Address

hoặc D [range] - In nội dung vùng nhớ trong dải range ra màn hình

Ví dụ: - D 100 In nội dung của 128 byte nhớ bắt đầu từ địa chỉ DS:100

D CS:200 220 In nội dung vùng nhớ từ CS:200 đến CS:220

D 0A00:0100 L10 In nội dung 16 byte nhớ từ địa chỉ 0A00:0100

G - Go - Thực hiện hay chạy cả chương trình nạp trong bộ nhớ

Cú pháp: G [=address] [điểm dừng]

Thực hiện đoạn chương trình bắt đầu từ địa chỉ address đến địa chỉ điểm dừng

Ví dụ: - G =100 Thực hiện chương trình từ địa chỉ 100 đến hết chương trình

G =100 200 Thực hiện chương trình từ địa chỉ CS:100 đến CS:200

H - Hexadecimal - Thực hiện các phép cộng, trừ các số thập lục phân

Cú pháp: H <số thứ nhất> <số thứ hai> cộng, trừ số thứ nhất với số thứ hai

Ví dụ: H 035F 01E5

Kết quả sẽ hiện lên trên màn hình là: 0544 017A

I - Input - Nhập một Byte dữ liệu từ cổng và hiển thị trên màn hình

Cú pháp: I <#cổng> Nhập một byte từ cổng có địa chỉ là #cổng

Ví dụ: I 2F8 đọc giá trị từ cổng 2F8 và hiển thị

N - Name - Đặt tên cho tệp để chuẩn bị ghi dữ liệu lên

Cú pháp: N <Tên tệp> Đặt tên và phần mở rộng cho tệp

Ví dụ: N vanban.txt

N ctrinh.com

O - Output - Xuất dữ liệu 8 bit ra một cổng

Cú pháp: O <#cổng>

Ví dụ: O 70 đưa dữ liệu 8 bit ra cổng có địa chỉ là 70h

Q - Quit - Thoát khỏi DEBUG

R - Register - Hiển thị và sửa nội dung một thanh ghi

Cú pháp: R <tên thanh ghi>

Ví dụ: Nạp giá trị 43h vào thanh ghi CX

R CX

:43

U - Unassemble - Dịch ngược lệnh của CPU

Cú pháp: U [range]

Trong đó range có thể là: - Địa chỉ bắt đầu của đoạn lệnh

- Địa chỉ đầu và chiều dài đoạn lệnh

Trang 27

Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 24

Ví dụ: U 100 Xem nội dung các lệnh của đoạn chương trình từ địa chỉ CS:0100h

U CS:100 110 Xem đoạn lệnh từ địa chỉ CS:100 đến CS:110

U 200 L20 Xem đoạn lệnh 32 byte bắt đầu từ địa chỉ CS:0200h

W - Write - Ghi nội dung đoạn lệnh bắt đầu từ địa chỉ CS:0100h với độ dài phụ thuộc

vào giá trị của thanh ghi CX vào một tệp đã được đặt tên bởi lệnh N

? - Help - Hiển thị đầy đủ các lệnh, cú pháp lệnh của DEBUG

1.7.2 Lập trình bằng DEBUG

DEBUG là một trình gỡ rối có thể được sử dụng để lập trình các chương trình đơn giản

có phần mở rộng là *.COM Vì vậy, trong phần này chúng ta sẽ nghiên cứu về cách viết

một chương trình bằng DEBUG thông qua các bước sau

Bước 1: Chạy trình DEBUG Tại dấu nhắc lệnh của DOS ta gõ: DEBUG {ENTER}

Bước 2: Tại dấu nhắc của DEBUG gõ lệnh

-A 100 Địa chỉ bắt đầu của một chương trình được bắt đầu từ CS:100h

Bước 3: Gõ vào các lệnh của chương trình với qui định

+ Các lệnh này phải là các lệnh của vi xử lý (lệnh thật) dưới dạng mã lệnh gợi nhớ

+ Các số liệu đưa vào là các số ở dạng thập lục phân và không được có chữ h ở cuối số đó

Riêng lệnh INT vẫn được chấp nhận tồn tại chữ h Ví dụ: số 65d sẽ phải đưa vào là 41

+ Các lệnh nhảy, lệnh lặp, lệnh gọi chương trình con thì các toán hạng lệnh phải là địa

chỉ bộ nhớ tại vị trí của lệnh đầu tiên

Ví dụ: JMP 120 Nhảy tới địa chỉ CS:120h

+ Trong tất cả các lệnh chỉ tồn tại hai trường là: mã lệnh và toán hạng Không được có

lời chú thích

Ví dụ: MOV AH,1 ;gán cho AH giá trị 1

Đây được coi là một lệnh sai vì lời giải thích này không được DEBUG chấp nhận

+ Một chương chương phải được kết thúc bằng một lệnh INT 20 hoặc INT 20h

+ Sau lệnh INT 20, ta không đưa lệnh khác nữa thì tại địa chỉ của lệnh tiếp theo ta nhấn

ENTER Địa chỉ này cũng chính là địa chỉ cuối của chương trình

Bước 4: Xác định số byte của chương trình

độ dài chương trình = địa chỉ cuối - 100

Sau đó gõ lệnh: R CX

và nạp vào độ dài của chương trình cho CX

Bước 5: Đặt tên cho File chứa chương trình bằng lệnh N

Ví dụ: N vidu1.com

Bước 6: gõ lệnh W để ghi nội dung chương trình vào tệp đã đặt tên ở bước 5

Sau khi tạo xong một chương trình, ta có thể thoát về DOS để chạy thử hoặc có thể sử

dụng lệnh G để chạy trực tiếp từ DEBUG

Trang 28

Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 25

Ví dụ: Viết một chương trình thực hiện nhập vào một chữ cái thường, sau đó đổi nó sang

thành chữ cái hoa (Với giả thiết không kiểm tra dữ liệu nhập vào)

Sau khi viết xong chương trình, ta có thể chạy nó để kiểm tra kết quả bằng cách

Như vậy, với chương trình đơn giản trên đây, ta thấy: Nếu lập trình bằng DEBUG thì

kích thước của tệp rất nhỏ Chương trình vừa viết có kích thước là 0Eh=14byte

1.7.3 Gỡ rối chương trình bằng DEBUG

Để gỡ rối cho một chương trình, ta có thể thực hiện qua các bước sau:

Bước 1: Khởi động DEBUG và gọi tệp cần sửa bằng lệnh

DEBUG <Tên tệp cần sửa> {ENTER}

Bước 2: Xác định lệnh gây ra lỗi (lỗi do thuật toán) bằng lệnh U Các lệnh chỉ hiển thị

trong khoảng 32 byte Nếu muốn xem tiếp lệnh ở vị trí sau 32 byte đó thì ta có thể gõ tiếp

lệnh U Và cứ như vậy cho đến khi kết thúc chương trình (gặp lệnh INT 20)

Bước 3: Sử dụng lệnh A <địa chỉ offset của lệnh sai> để bắt đầu sửa

Bước 4: Gõ lệnh cần thay thế

+ Nếu lệnh thay thế có kích thước bằng lệnh đang sửa thì tại vị trí của lệnh sau lệnh vừa

gõ ta nhấn ENTER

+ Nếu lệnh thay thế có kích thước khác lệnh đang sửa thì ta phải gõ lại toàn bộ đoạn

chương trình từ vị trí sửa đến hết chương trình Vì, các lệnh gõ vào sau sẽ đè lên các lệnh

trước đó Nếu lệnh sau khi sửa lớn hơn lệnh trước khi sửa thì lệnh tiếp theo của nó sẽ bị

mất đi một số bit Khi đó, cấu trúc chương trình sẽ bị sai lệch hoàn toàn

Bước 5: Nếu kích thước chương trình khác với kích thước ban đầu thì ta cần phải sử

dụng lệnh R để thay đổi thanh ghi CX sao cho CX chứa giá trị độ lớn của chương trình

sau khi sửa Sau đó, ta sử dụng lệnh W để ghi lại nội dung của chương trình mới vào tệp

Cần phải gõ lệnh DEBUG với tham số Xem đoạn chương trình có lỗi không Lệnh gây lỗi

Cần phải sửa lại Sau đóghi lại Địa chỉ của lệnh sai

Trang 29

Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 26

Ví dụ: Chương trình trên bị lỗi tại vị trí lệnh SUB Ta cần sửa lại như sau:

Chương 2 CÁC BỘ VI XỬ LÝ TIÊN TIẾN CỦA INTEL

2.1 Bộ vi xử lý 80286

Về cơ bản, bộ vi xử lý 80286 có cấu trúc giống như 8086, nhưng có một số đặc

điểm khác biệt như sau:

2.1.1 Các thanh ghi

Bộ vi xử lý 80286 có thêm một số thanh ghi

- Thanh ghi từ trạng thái (MSW - Machine Status Word)

15 4 3 2 1 0

TS - Task Switch: chuyển nhiệm vụ

EM - Emulation: cho phép mô phỏng bộ đồng xử lý

MP - Math Present: Cho biết có bộ đồng xử lý

PE - Protection Enable: Cho phép chế độ bảo vệ

- Thanh ghi nhiệm vụ (TR - Task Register)

- Thanh ghi bảng mô tả cục bộ (LDTR - Local Descriptor Table Register)

- Thanh ghi bảng mô tả toàn cục (GDTR - Global Descriptor Table Register)

- Thanh ghi bảng mô tả ngắt (IDTR - Interrupt Descriptor Table Register)

Cần phải gõ lệnh DEBUG với tham số Xem đoạn chương trình có lỗi không

Lệnh gây lỗi

Cần phải sửa lại Sau đó ghi lại Địa chỉ của lệnh sai

Trang 30

Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 27

15 Bộ chọn 0 23 Địa chỉ cơ sở 0 15 Độ dài 0

- Các thanh ghi đoạn: bao gồm 2 phần

Phần hở: gồm 16 bit có thể nạp được bằng chương trình gọi là bộ chọn

Phần kín: gồm 48bit do CPU tự nạp

+ 8bit quyền truy nhập (Access Right)

+ 24bit địa chỉ cơ sở (Base Address)

+ 16bit độ dài đoạn (Limit)

- LGDT: Nạp thanh ghi GDTR, địa chỉ cơ sở 24bit, độ dài 16bit

- LIDT: Nạp thanh ghi IDTR, địa chỉ cơ sở 24bit, độ dài 16bit

- LLDT: Nạp phần chọn của thanh ghi LDTR, độ dài 16bit

- LTR: Nạp phần chọn của thanh ghi TR, độ dài 16bit

- LMSW: Nạp từ trạng thái máy

- CLTS: xoá bit TS (task Switch)

- HALT: Dừng hoạt động của CPU

Trang 31

Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 28

2.2 Bộ vi xử lý 80386

2.2.1 Sơ đồ khối của 80386

2.2.2 Các thanh ghi

a/ Các thanh ghi đa năng, thanh ghi cờ và con trỏ lệnh

Các thanh ghi của bộ vi xử lý 80386 có độ dài 32 bit, song vẫn giữ nguyên phần 16bit

đầu được truy nhập tương tự như các thanh ghi tương tự trong 8086

EFlags Flags b/ Các thanh ghi đoạn

Bao gồm 2 phần

Các thanh ghi ALU

Các thanh ghi đoạn

Bộ chuyển đổi đoạn

Bộ đệm chuyển hóa riêng

Bộ chuyển hóa trang

Bộ giải mã lệnh

Hàng nhận lệnh đã giải

Hàng nhận lệnh

Bộ nhận lệnh

Bộ ghép nối BUS

Đơn vị thực hiện

Đơn vị quản lý theo đoạn nhớ

Đơn vị quản lý theo bộ nhớ

Đơn vị BUS

Đơn vị giải mã lệnh Đơn vị nhận lệnh

Trang 32

Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 29

Phần hở: gồm 16 bit có thể nạp được bằng chương trình gọi là bộ chọn

Phần kín: gồm 64 bit do CPU tự nạp

+ 12 bit quyền truy nhập (Access Right)

+ 32 bit địa chỉ cơ sở (Base Address)

+ 20 bit độ dài đoạn (Limit)

c/ Các thanh ghi điều khiển

Có 4 thanh ghi điều khiển 32 bit được đặt là: CR0, CR1, CR2, CR3

Dự trữ Địa chỉ tuyến tính trang có lỗi Địa chỉ cơ sở của thư mục trang 12 bit dự trữ

PG - Paging (Trang)

r - reversed (dự trữ)

TS - Task Switch: chuyển nhiệm vụ

EM - Emulation: cho phép mô phỏng bộ đồng xử lý

MP - Math Present: Cho biết có bộ đồng xử lý

PE - Protection Enable: Cho phép chế độ bảo vệ

d/ Các thanh ghi hệ thống

- Thanh ghi nhiệm vụ (TR - Task Register)

- Thanh ghi bảng mô tả cục bộ (LDTR - Local Descriptor Table Register)

- Thanh ghi bảng mô tả toàn cục (GDTR - Global Descriptor Table Register)

- Thanh ghi bảng mô tả ngắt (IDTR - Interrupt Descriptor Table Register)

Trang 33

Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 30

15 Bộ chọn 0 31 Địa chỉ cơ sở 0 15 Độ dài 0

LDTR và TR có hai phần: phần chọn đoạn hệ thống (thanh ghi chọn đoạn hệ thống) và

phần chứa bộ mô tả quy chiếu đoạn này (thanh ghi mô tả đoạn hệ thống) LDTR chứa bộ

chọn 16 bit trỏ đến bộ mô tả của LDT và TSS sẽ được sao sang phần kín của các thanh

ghi LDTR và TR Mỗi một nhiệm vụ có một LDT và TSS riêng

e/ Các thanh ghi kiểm tra và gỡ rối

DR1 Địa chỉ tuyến tính của điểm dừng

DR6 Từ trạng thái của các điểm dừng

DR7 Từ điều khiển của các điểm dừng

TR6 Từ điều khiển kiểm tra Các thanh

ghi kiểm tra

TR7 Từ trạng thái kiểm tra

2.2.3 Quản lý bộ nhớ

2.2.3.1 Không gian nhớ và nhiệm vụ nhớ

Không gian nhớ và nhiệm vụ nhớ của 80386 cũng giống 80286, có điều khác là

80386 hoạt động với môt trường với 32 bit Do vậy bộ nhớ trong hệ thống 80386 có thể

được tổ chức theo byte (8 bit), theo từ (16 bit) hay từ kép (32 bit) Từ được xếp như 2

Trang 34

Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 31

byte liên tiếp, byte thấp có địa chỉ thấp, byte có địa chỉ cao, địa chỉ của từ là địa chỉ của

byte thấp Từ kép cũng được lưu trữ 4 byte theo cách như vậy

Ngoài quản lí bộ nhớ theo đoạn (đoạn có thể có độ dài khác nhau và có thể trao

đổi với bộ nhớ ngoài hay phân chia giữa các chương trình) 80386 còn có thể quản lí bộ

nhớ theo trang (page) có độ dài 4 Kbyte mỗi trang

2.2.3.2 Các địa chỉ logic, tuyến tính, vật lí và quản lý bộ nhớ theo trang

Trong 80386 có 3 loại địa chỉ cần được phân biệt: địa chỉ lôgic, tuyến tính, vật lí và quản

lí bộ nhớ theo trang

Mỗi nhiệm vụ có nhiều nhất 214= 16k bộ chọn, offset có thể là 232= 4 Gbyte, như vậy

một nhiệm vụ có cực đại 264= 64 tetrabyte Nói cách khác, không gian địa chỉ lôgic là

264= 64 tetrabyte, trong khi không gian địa chỉ vật lí chỉ rông 4 Gbyet vì 80386 có 32 dây

địa chỉ Tổ hợp của các địa chỉ cơ sở đoạn và offset bên trong các đoạn đó tạo nên thang

địa chỉ tuyến tính, có nghĩa rằng ta có thể tìm thấy các địa chỉ tuyến tính lớn hơn chỉ tới

một đoạn lôgic nằm ở vùng địa chỉ thấp Địa chỉ tuyến tính 32 bit bằng 32 bit địa chỉ cơ

sở cộng với 32 bit offset Việc sử dụng địa chỉ đoạn lôgic có vài đièu bất tiện (ví dụ như

trong việc trao đổi, swapping, các đoạn nhớ với đĩa từ) nên 80386 được tran bị thêm cách

quản lí bộ nhớ theo trang sẽ được trình bày trong các phần sau

1 Định địa chỉ ở chế độ thực

Sau khi bật nguồn hay reset, 80386 ở chế độ thực Cơ chế địa chỉ hoá và kích thước bộ

nhớ 80286 ( Kích thước cực đại là Mbyte ), vì vậy chỉ có các dây địa chỉ A2-A19 và BE0

-BE3 là tích cực ở chế độ này bộ nhớ theo trang không được phép, do vậy địa chỉ tuyến

tính cũng giống địa chỉ vật lí Cách tính địa chỉ vật lí giống như ở 80386

2 Định địa chỉ ở chế độ bảo vệ

Lúc này địa chỉ lôgic được xác định bởi hai phần :

- Bộ chọn là nội dung các thanh ghi chọn đoạn 16Bit trong đó chỉ số để xác định địa chỉ

cỏ sở 32 Bit của bộ mô tả đoạn

- Offset đựoc tạo nên bởi 3 thành phần : Địa chỉ có cơ sở đoạn nhớ(base), chỉ số(index)

và độ dịch chuyển (displacement)

Việc chuyển từ chế độ thực sang chế độ bảo vệ được thực hiện bằng cách đặt bit PE trong

thanh ghi CR0 bằng 1 và được nghi lại từ chế độ bảo vệ chế độ thực bằng cách xoá bit PE

bằng 0

Đơn vị quản lí đoạn sẽ chuyển địa chỉ lôgic thành địa chỉ tuyến tính 32 bit Nếu đơn vị

quản lí trang không được phép làm việc thì 32bit địa chỉ tuyến tính sẽ tương ứng với các

địa chỉ vật lí

3 Khởi động và chuyển sang chế độ bảo vệ

Ngay sau khi khởi động, 80386 làm việc ở chế độ thực Để chuyển sang chế độ bảo vệ

phải đặt bit PE của thanh ghi điều khiển CR0 bằng lệnh move CR0, R/M

Trang 35

Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 32

Sau khi chuyển sang chế độ bảo vệ, lệnh nhảy giữa các đoạn sẽ được thực hiện để xếp lại

hàng nhận lệnh trước PQ Tiếp theo các đoạn số liệu được nạp vào bằng các bộ chọn với

giá trị khởi đầu

Một cách khác để chuyển vào chế độ bảo vệ trong các hệ điều hành đa nhiệm là sử dụng

phép chuyển nhiệm vụ đã nạp các thanh ghi Lúc này trong GDTM ngoài các bộ mô tả

đoạn số liệu và đoạn lệnh còn có hai bộ mô tả TSS Lệnh JMP đầu tiên trong chế độ bảo

vệ sẽ gây ra phép chuyển nhiệm vụ và nạp tất cả các thanh ghi các giá trị chứa trong TSS

Thanh ghi TR được khởi động để trỏ tới một bộ mô tả TSS, vì khi chuyển nhiệm vụ,

thạng thái của nhiệm vụ đang thực hiện sẽ được cất vào TSS

2.2.4 Tập lệnh

2.3 Bộ vi xử lý 80486

2.3.1 Các phần tử xử lý CISC và RISC

Họ 80x86 của Intel thường hoạt động theo nguyên tắc dùng vi xử lí có tập lệnh

phức tạp CISC (Complex Instruction Set Computer) Đặc điểm là nó có số lượng lệnh lớn

(thường hơn 300 lệnh), có khả năng định địa chỉ phức tạp, các lệnh được vi lệnh hoá có

nghĩa là CPU hoạt động bằng vi chương trình

Nghiên cứu điều tra thống kê đã chỉ ra những kết luận sau:

- Trong nhiều chương trình điển hình được xử lí bằng bộ vi xử lí CISC như nói

trên thì đến 80% thời gian chạy chương trình được thực hiện bởi 20% số lệnh trong tập

lệnh

- Có những trường hợp, để đạt được cùng một kết quả thì việc chạy một chuỗi lệnh

đơn giản sẽ nhanh hơ là chạy một lệnh phức tạp

Những kết luận này là tiền đề để một loại vi xử lí khác ra đời; nó hoạt động theo phương

pháp sử dụng tập lệnh ngắn gọn RISC (Reduced Instruction Set computer), thí dụ như

i860 của Intel Tập lệnh ở đây được hạn chế vào các lệnh chính yếu cần thiết trong số

Cách tính địa chỉ hiệu dụng offset

Chỉ số Địa chỉ cơ sở Độ dịch chuyển

Bộ chọn Đơn vị quản lý

theo đoạn

Đơn vị quản lý theo trang

Bộ nhớ vật lý

offset 32bit Chỉ số tới

bộ mô tả

Địa chỉ tuyến tính Địa chỉ

vật lý Thanh ghi

chọn đoạn

Trang 36

Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 33

20% lệnh nói trên và phần cứng được thiết kế sao cho phần tử RISC này hiểu ngay được

lệnh máy do trương trình cung cấp Do đó các lệnh loại này không cần chuyển cho bộ

giải mã vi lệnh nữa mà được thực hiện ngay Như bên phải hình 59, các lệnh máy trong

hàng nhận lệnh trước PQ được trực tiếp chạy ngay mà không cần phải được giải mã

thành một chuỗi các vi lệnh Rõ ràng thời gian để thực hiện một lệnh ở đây được rút ngắn

đi nhiều so với trường hợp ở bộ vi xử lí CISC

2.3.2 Vi xử lý 80486

2.3.2.1 Đặc điểm chung

Chip i486 có mật độ tích hợp rất cao gồm bên trong một vi xử lí i386 đã cải tiến,

một bộ đồng xử lí toán 80387, một bộ điều khiển cache và một bộ nhớ cache 8 kbyte

(Cache là một loại bộ nhớ RAM tĩnh có dung lượng nhỏ nhưng tốc độ truy cập nhanh

hơn so với bộ nhớ chính là các RAM động, sẽ được đề cập tới trong các phàn sau) Giống

như i386, bus số liệu và bus địa chỉ ở đây cũng rộng 32 bit, tốc đọ truyền tải dữ liệu có

thể lên tới 160 Mbyte/s

Đây là thiết kế dựa trên kết quả của việc tích hợp hai loại phần tử xử lí CISC và

RISC trong cùng một chip CPU Trong i486, các lệnh mac máy thường xuyên được sử

dụng sẽ được cài đặt sẵn và có thể được thực hiện ngay, trong khi các lệnh phức tạp nhất

và ít được sử dụng sẽ thông qua bộ giải mã vi lệnh Theo phương thức này, hầu như tất cả

các lệnh có thể được thực hiện gọn trong một chu kì xung nhịp đồng hồ

Vi xử lí i486 hoàn toàn tương tích với i386 về tập lệnh và các loại số liệu Nó cũng

có thể chạy trong các chế đọ thực, bảo vệ cũng như phân loại và phân trang Vì đơn vị

đồng sử lí toán (đơn vị dấu phảy động) được tích hợp ngay trong cùng một chip với CPU

nên tốc độ trao đổi dữ liệu cũng nhanh hơn so với hệ i386 và i387 tách rời

2.3.2.2 Cấu trúc bên trong i486

Bởi vì có đến 3 đơn vị xử lí cùng được tích hợp trong một chip (CPU, bộ đồng xử

lí toán, bộ điều khiển cache và bộ nhớ cache) nên cấu trúc của i486 phức tạp hơn i386

nhiều Sơ đồ khối bên trong của nó được chỉ ra trên hình 60

8 KB Cache

Khèi ph©n trang

Khối phân đoạn

ALU và thanh ghi

PQ 32byte

Khèi gi¶i m·

Khối điều khiển

Bộ đồng xử

lý toán

Khối ghép nối BUS

BUS dữ liệu 32 bit BUS địa chỉ 32 bit

Trang 37

Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 34

Các bus số liệu, địa chỉ và số liệu được nối với bên ngoài qua khối ghép nối bus,

khối này được nối trực tiếp với bộ nhớ cache bên trong vi xử lí (được gọi là cache cấp

một, để phân biệt với bộ nhớ cache cấp hai nằm trên bản mạch chính ở bên ngoài vi xử

lí) Bộ nhớ cache nội 8 byte này được dùng làm bộ đệm cho số liệu và lệnh đến từ bộ nhớ

chính trước khi chúng được chuyển tới các thanh ghi, ALU, bộ đồng xử lí toán hoặc hàng

nhận lệnh trước PQ dài 32 byte

Khác với chu kì thâm nhập bộ nhớ cache cấp hai phải mất hai nhịp đồng hồ, việc

thâm nhập cache cấp một này chỉ mất một chu kì nhịp đồng hồ Do vậy, mặc dù dung

lượng nhớ của cache nội chỉ có 8 kbyte nhưng nó vẫn cải thiện đáng kể chỉ tiêu của hệ

thông Trong trường hợp các số liệu hoặc lệnh từ bộ nhớ chính không được nạp qua

cache thì chúng sẽ được đưa trực tiếp tới các thanh ghi hoặc hàng nhận lệnh trước PQ qua

khối ghép nối bus Điều này xảy ra khi i486 xử lí các số liệu rất phân tán hoặc trong

trường hợp thực hiện các lệnh nhảy tới một địa chỉ xa

Sau bộ nhớ cache, các đường lệnh và số liệu được phân tách ra Các byte số liệu

được chuyển tới các thanh ghi hoặc bộ đồng xử lí toán Các byte lệnh được đưa vào hàng

nhận lệnh trước, hàng này dài 32 byte Đơn vị giải mã sẽ giải mã các lệnh và truyền

chúng tới khối điều khiển để điều khiển các thanh ghi, khối tính số học và lôgic ALU,

khối phân đoạn và bộ đồng xử lí toán Một số lệnh không cần giải mã mà có thể chạy

ngay lập tức do i486 có tích hợp cả công nghệ RISC

Nếu các toán hạng tức thời hoặc độ dịch chuyển hiện diện trong dòng lệnh thì

hàng nhận lệnh trước sẽ phân tách chúng và truyền chúng tới ALU hoặc khối phân đoạn

Các byte số liệu được cấp tới khối phân đoạn, các thanh ghi, ALU hoặc bộ đồng xử lí

toán và được xử lí tại những nới đó Hai bus dữ liệu 32 bit hình thành nên một bus dữ

liệu 64 bit dùng cho việc truyền tải dữ liệu giữa CPU tương ứng với i386 và bộ đồng xử

lí toán tương ứng với i387 Khác với tổ hợp i386/ 1387 thông thường, quá trình trao đổi

số liệu và mã lệnh ở đây không cần chu kì bus vào/ra vì cả hai khối đã được tích hợp cả

trên những chip rồi Hơn nữa, do bề rộng dữ liệu bên trong chip lại là 64 bit khi sử dụng

bộ đồng xử lí toán nên các lệnh ESC ở đây sẽ chạy nhanh hơn nhiều so với máy tính

dùng i386 và 387

Giống như các vi xử lí họ 80x86, ở đây cũng dùng các thanh ghi đoạn và thanh ghi

offset Trong khối phân đoạn, nội dung của hai thanh ghi này được kết hợp lại thành địa

chỉ tuyến tính Trong chế độ bảo vệ, khối phân đoạn sẽ thực hiện các kiểm tra cần thiết để

bảo vệ các nhiệm vụ riêng biệt và bảo vệ hệ thống Nếu chế độ trang không được kích

hoạt thì địa chỉ tuyến tính này chính là địa chỉ vật lí Nếu chế độ trang được kích hoạt thì

địa chỉ tuyến tính được chuyển thành địa chỉ vật lí bởi khối phân trang

Vì những lí do trên, CPU i486 có hiệu suất cao gấp hai đến ba lần so với các CPU

trước nếu hoạt động ở cùng một tần số Tần số hoạt động của bộ vi xử lí cũng chính là tần

Trang 38

Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 35

số của mạch tạo xung nhịp Để thi hành đa xử lí (multiprocessing), nhiều lệnh mới đã

được trang bị để dễ dàng trao đổi dữ liệu giữa các bộ vi xử lí

Với vi xử lí 486 DX2 hoặc DX4, tần số nhịp được cấp cho CPU sẽ được nhân 2

hoặc 3 ở bên trong chip cho phép có thể tăng tốc độ của vi xử lí mà không đòi hỏi bản

mạch chính cũng phải có cùng tốc độ đó Điều này làm giảm nhẹ việc thiết kế chế tạo các

bản mạch chính phải chạy ở tần số cao, do đó giá thành sản phẩm cũng được giảm theo

Thí dụ, vi xử lí i486 DX2/50MHz chỉ cần chạy với bản mạch chính 25 MHz,

DX2/66MHz hay DX4/100MHz với bản mạch chính 33MHz Theo phương án này, nhìn

chung máy vi tính phải chịu thiệt về hiệu suất, vì CPU tiến hành xử lí số liệu nhanh gấp

hai hoặc ba lần so với các bộ phận trên bản mạch chính, do đó có thể phải xen vào một

vài chu kì đợi (wait cycle) Để giải quyết vấn đề này, một bộ nhớ cache ngoài đủ rộng để

giữ tạm các lệnh và dữ liệu mà bộ vi xử lí phải đợi Nếu được thiết kế hợp lí, hệ thống

như vậy có thể đạt tới hiệu suất 80% so với các hệ thống có tốc độ xung nhịp trên bản

mạch chính bằng tốc độ xung nhịp ở trong CPU

Sự khác biệt duy nhất giữa loại 486DX và 486SX chỉ là trong 486SX không có bộ

đồng xử lí toán

2.4 Các bộ vi xử lý Intel Pentium

2.4.1 Đặc điểm chung

Bộ vi xử lí pentium ra đời làm cho kĩ thuật của máy PC lại thay đổi Về phần

mềm, pentium vẫn có tập lệnh, thanh ghi, các chế độ định địa chỉ và các chế độ hoạt động

hoàn toàn tương thích với các CPU trước nó Nhưng về phần cứng, pentiumcó những cải

tiến đáng kể Phiên bản đầu tiên ra đời năm 1993 được chế tạo theo công nghệ 0,8 micron

BiCMOS, đó là công nghệ cho phép tạo ra các vi mạch có những phần tử tích cực trong

đó có kích thước nhỏ nhất cỡ 0,8 phần triệu mét Với công nghệ này các chip điện tử sẽ

có kích thước bé hơn, tiêu thụ ita năng lượng hơn và cái chính là hiệu suất cao hơn vì các

tín hiệu di chuyển trong nội bộ chip với quãng đường ngắn hơn Với 3,1 triệu linh kiện

bán dẫn trong cấu trúc gọi là superscalar xây dựng trên hai hay nhiều đường ống

(pipeline), loại pentium có đặc trưng 100MIPS (Million Instruction Per Second), tức là có

thể thực hiện hàng triệu lệnh trong một giây với tốc độ đồng hồ là 66 MHz Do đó nó

hoạt động nhanh gấp hai lần chip 486DX2/66 về các phép tính số nguyên và ba đến bảy

lầnvới các phép tính số học có dấu phảy động Mặc dù có bus dữ liệu rộng 64 bit nhưng

pentium vẫn được thiết kế để làm việc với bus dữ liệu ngoài 32 bit tương thích với các

thế hệ vi xử lí i386/i486 trước đó

2.4.2 Cấu trúc và tính năng

Sơ đồ khối của vi xử lí pentium có thể được trình bày như sau:

- Pentium có hai bộ nhớ cache 8 kbyte rieng biệt, một dành cho lệnh một dành cho số

liệu

Trang 39

Bộ mụn Kỹ thuật mỏy tớnh – Khoa CNTT – ĐHSPKT_HY Trang 36

- Cú hai hàng nhận lệnh trước 32 bit và hai bộ tớnh số học và lụgic ALU được cung cấp

lệnh và dữ liệu trờn hai đường ống song song U và V (superscalr) cho phộp thi hành hai

lệnh mỏy trong một chu kỡ

- Bộ xử lớ vẫn làm việc với cỏc thanh ghi 32 bit và bus địa chỉ 32 bit nhưng cú thể nối với

bus số liệu ngoài là 64 bit

- Bus nội bộ là 64 bit và 128 bit, bus từ bộ nhớ cache nội nối với cỏc vựng đệm của cỏc

ALU rộng 256 bit Điều này cho phộp tăng tốc độ trao đổi dữ liệu trong nội bộ vi xử lớ

lờn rất cao

- Cú một vựng nhớ gọi là vựng đờm đớch rẽ nhỏnh BTB (branch target buffer) của lệnh

đối với 256 lệnh rẽ mới đõy nhất

- Cú một bộ đọc xử lớ với hiệu xuất cao hơn nhiều lần cỏc thế hệ trước nhờ cỏc giải thuật

(algorthm) nhanh hơn, cỏch xắp sếp bố trớ lệnh cũng như cú thể thực hiện đồng thời hai

lệnh

Một vài đặc trưng khỏc làm cho pentium phõn biệt được với cỏc vi xử lớ trước là:

- Kớch thước trang của bộ nhớ trong chế độ bảo vệ và ảo khụng chỉ hạn chế ở 4 kbyte mà

cú thể lờn đến 2 Mbyte hay 4Mbyte

- Khả năng tự tỡm kiếm cỏc lỗi phức tạp và gỡ rối (debugging) bằng cỏc mạch phần cứng

lắp thờm

- Cú thể tự đỏnh giỏ được hiệu suất thi hành chương trỡnh

Mặc dự một số vi xử lớ được xõy dựng trờn nguyờn tắc CISC nhưng pentium đó ứng dụng

nhiều cụng nghệ mới giống như cỏc loại vi xử lớ RISC tốc độ cao, thớ dụ như việc sử

Vựng đệm đớch

rẽ nhỏnh

Cache lệnh 8KB Hàng nhận lệnh trước

Bộ xử lý dấu phảy động Cỏc thanh ghi

Đường ống U của ALU Cỏc thanh ghi

Đơn vị BUS

Đường ống V của ALU

Cache

Dữ liệu 8KB

Bus dữ liệu 64bit

Bus địa chỉ 32bit

Trang 40

Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 37

dụng các cấu trúc đường ống, cấu trúc superscalar và dự đoán rẽ nhánh Điều này làm

cho nó có hiệu suất cao như các vi xử lí RISC thực sự Các lệnh chạy trong pentium được

thực hiện trên cấu trúc superscalar với hai đường ống song song U và V, các cache nội bộ

và vùng đệm đích rẽ nhánh BTB Xét qua các cấu trúc này sẽ cho phép giải thích tại sao

pentium lại có hiệu suất cao hơn so với các vi xử lí trước đó:

Cấu trúc superscalar với hai đường ống song song

Việc thi hành lệnh trong các vi xử lí 80x86 và pentium được diễn ra qua 5 công đoạn:

1 Nhận lệnh trước từ bộ nhớ (Prefetch): lện máy được lấy từ bộ nhớ chuyển vào CPU

2 Giải mã lệnh 1 (Decode 1): giải mã, phân tích để xác định loại lệnh

3 Giải mã lệnh 2 (Decode 2): xác định địa chỉ ô nhớ cần truy nhập

4 Thực hiện lệnh (Execute)

5 Viết các kết quả dữ liệu vào các thanh ghi và bộ nhớ (Writeback)

Nếu như mỗi công đoạn đòi hỏi tối thiểu một chu kì nhịp đồng hồ thì khi thi hành tuần tự

các công đoạn này cho mỗi lệnh, thông thường phải mất tổng cộng năm chu kì nhịp

Nhưng với một cấu trúc đường ống có thể thực hiện đồng thời song song những công

đoạn trên, pentium tạo ra một phương thức làm việc như sau: khi lệnh thứ (n) vừa chuyển

sang công đoạn thứ hai thì một lệnh mới thứ (n+1) được đưa ngay vào công đoạn thứ

nhất v.v… Nhờ đó cả thảy có 5 lệnh sẽ cùng được xử lí đồng thời trên một đường ống và

có thể coi mỗi lệnh chỉ được xử lí trong một chu kì nhịp đông hồ

Hơn thế nữa, Pentium lại có đến hai đường ống gọi tên là U và V được chế tạo hoạt động

song song với nhau Về mặt lí thuyết, nó sẽ có khả năng thi hành cùng một lúc hai lệnh

Tuy nhiên, thực tế không phải lúc nào cũng thực hiện được điều đó vì hai lệnh kế tiếp

nhau thường phụ thuộc vào nhau và lúc này chỉ có thể xử lí chúgn một cách tuần tự Một

mạch đặc biệt sẽ kiểm tra tính phụ thuộc dữ liệu đó xem chúng có yêu cầu phải liên kết

trong quá trình xử lí hay không Nếu không phụ thuộc, hai lệnh sẽ được gửi tới hai đường

ống theo đúng thứ tự Quá trình có thể dẫn giải như sau:trong công đoạn

một, lệnh hiện tại sẽ đưa vaod đơn vị giải mã của đường ống U, lệnh kế tiếp vào đơn vị

giải mã của đường ống V Nếu trong công đoạn hai, mạch đặc biệt nói trên xác định có

thể thực hiện đồng thời hai lệnh thì mỗi lệnh sẽ trải qua các công đoạn còn lại trong mỗi

đường ống của nó, ngược lại thì lệnh trong ống U sẽ trải qua công đoạn kế tiếp như bình

thường còn lệnh kế tiếp trong ống V sẽ được chuyển qua thi hành trong ống U như là

lệnh theo sau lệnh hiện tại

Bộ nhớ cache nội bộ 16 kbyte (cache cấp một)

Pentium có hai bộ nhớ cache rieng biệt, một dành cho số liệu và một dành cho lệnh Do

tốc độ nhanh lại được tích hợp ngay trong chip vi xử lí nên các lệnh và dữ liệu ở đây có

thể được truy cập rất nhanh Mỗi cache có dung lượng 8kbyete gồm hai tuyến, 128 hàng

Ngày đăng: 23/10/2014, 13:47

HÌNH ẢNH LIÊN QUAN

Hình 1.1 :  Sơ đồ cấu trúc bên trong bộ vi xử lý 8086/8088 - Tài liệu Đề cương vi xử lý
Hình 1.1 Sơ đồ cấu trúc bên trong bộ vi xử lý 8086/8088 (Trang 6)
Hình 1.2. So sánh pipeline và tuần tự  a) Xử lý tuần tự    b) Xử lý bằng Pipeline - Tài liệu Đề cương vi xử lý
Hình 1.2. So sánh pipeline và tuần tự a) Xử lý tuần tự b) Xử lý bằng Pipeline (Trang 7)
1.5.10. Bảng tóm tắt các chế độ địa chỉ - Tài liệu Đề cương vi xử lý
1.5.10. Bảng tóm tắt các chế độ địa chỉ (Trang 21)
Bảng xác định chế độ địa chỉ toán hạng bằng các trường MOD và R/M: - Tài liệu Đề cương vi xử lý
Bảng x ác định chế độ địa chỉ toán hạng bằng các trường MOD và R/M: (Trang 22)
Bảng Mã hoá các thanh ghi: - Tài liệu Đề cương vi xử lý
ng Mã hoá các thanh ghi: (Trang 22)
Bảng mã hoá các thanh ghi đoạn: - Tài liệu Đề cương vi xử lý
Bảng m ã hoá các thanh ghi đoạn: (Trang 23)
Hình 2.1:  Vị trí của hợp ngữ trong các máy tính IBM-PC - Tài liệu Đề cương vi xử lý
Hình 2.1 Vị trí của hợp ngữ trong các máy tính IBM-PC (Trang 46)
Hình ảnh của chương trình được thể hiện trong bộ nhớ được thể hiện như trong hình vẽ  sau: - Tài liệu Đề cương vi xử lý
nh ảnh của chương trình được thể hiện trong bộ nhớ được thể hiện như trong hình vẽ sau: (Trang 54)
Hình 3: Phân loại các ngắt. - Tài liệu Đề cương vi xử lý
Hình 3 Phân loại các ngắt (Trang 89)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w