88
1 | Page

Đề tài VXL assembly

Embed Size (px)

DESCRIPTION

Phân tích về vi xử lý 8086

Citation preview

Page 1: Đề tài VXL assembly

1 | P a g e

Page 2: Đề tài VXL assembly

2 | P a g e

Page 3: Đề tài VXL assembly

MỤC LỤC

Trang

Chương 1. Tổng quan về VXL Intel 3

1.1 VXL Intel 32 bit 3

1.2 Lịch sử phát triển vi xử lý Intel 3

Chương 2. Kiến trúc IA-32 (x86) 13

2.1 Khái niệm 13

2.2 Chức năng của IA-32 13

Chương 3. Kiến trúc và nguyên lý làm việc của VXL 80386 14

3.1 Đặc điểm chung của vi xử lý 80386 14

3.2 VXL 80386 có 20 chân tín hiệu 17

3.3 Các tín hiệu ngắt 17

3.3.1 Các tín hiệu xác định chu kỳ bus 17

3.3.2 Các tín hiệu điều khiển bus 18

3.3.3 Các tín hiệu trọng tài bus 18

3.4 Các thanh ghi đa năng, thanh ghi trỏ, thanh ghi cờ 19

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

3.4.2 Các thanh ghi đoạn 20

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

3.5 Tổ chức bộ nhớ của 80386 22

3.5.1 Tổ chức phân đoạn 22

3.5.2 Tổ chức phân trang 22

3 | P a g e

Page 4: Đề tài VXL assembly

3.6 Không gian nhớ 23

3.7 Chế độ thực của 80386 23

3.8 Chế độ bảo vệ phân đoạn 24

3.8.1 Các khái niệm cơ bản 24

3.8.2 Bảng các mô tả đoạn 26

3.8.3 Các mô tả và bộ chọn đoạn nhớ 29

3.8.3.1 Các bộ mô tả đoạn 29

3.8.3.2 Bộ chọn đoạn 32

3.8.3.3 Bảo vệ bộ nhớ 32

3.8.3.4 Chế độ phân trang bộ nhớ 33

3.8.3.4.1 Thư mục trang, bảng trang và trang 33

3.8.3.4.2 Tính địa chỉ vật lý trong chế độ trang 34

3.8.3.4.3 Vai trò của hệ điều hành trong quản lý trang 36

3.9 Chế độ 8086 ảo 37

3.10 Chế độ thực của 80386 39

3.11 Các thay đổi chính ở 80386 39

3.12 Các thanh ghi đa năng làm con tró 40

Chương 4. Kiến trúc Pentium 43

4.1 Thanh ghi (registers) 43

4.2 Truy nhập bộ nhớ (Accessing Memory) 44

4.3 Kiến trúc pentum pro và sau đó 45

4 | P a g e

Page 5: Đề tài VXL assembly

Chương 5. Tập lệnh VXL 80386 50

Chương 6. Tập lệnh VXL 32bit MIPS 58

Danh mục hình

Hình 1. VXL Intel 4004 8

Hình 2. VXL Intel 8008 9

Hình 3. VXL Intel 80286 10

Hình 4. VXL 80386 11

Hình 5. VXL 80486 12

Hình 6. VXL Pentium 13

Hình 7. VXL Pentium II 14

Hình 8. VXL Pentium III 15

Hình 9. VXL Pentium IV 15

Hình 10. Sơ đồ khối 80386 20

Hình 11. Cách tổ chức hệ phân cấp đặc quyền 29

Hình 12. Mối liên hệ giữa các thanh ghi và các bộ mô tả đoạn 32

Hình 13. Tính địa chỉ vật lý trong chế độ phân trang 39s

5 | P a g e

Page 6: Đề tài VXL assembly

6 | P a g e

Page 7: Đề tài VXL assembly

Chương 1. Tổng quan về VXL Intel

1.1 VXL Intel 32 bit.

Kiến trúc VXL 32 bit Intel phổ biến có 80386/80486, Pentium, Pentium Pro, Pentium II,

Pentium III, Pentium IV, Pentium M, Core, Celeron M, Celeron D.

1.2 Lịch sử phát triển vi xử lý Intel.

Khi công nghệ được cải thiện trong những năm qua, phát triển một cuộc chạy đua để có

được những bộ vi xử lý đầu tiên (có thể sử dụng được) trên một mạch tích hợp duy nhất.

Khi có thể đặt khoảng 10000 bóng bán dẫn (transistors) trên một vi mạch duy nhất (IC),

sau đó chúng ta phải có đủ mạch (circuitry) để đặt một bộ xử lý đơn giản (simple

processor) trên một IC đơn giản đó.

Năm 1970, Intel cho ra đời chip vi xử lý đầu tiên 4004:

- Độ dài từ xử lý 4 bit.

- Bus dữ liệu 4 bit, bus địa chỉ 12 bit (dùng chung với bus dữ liệu).

- Kích thước 22mm2, 16 chân, chứa 2250 transitors.

7 | P a g e

Page 8: Đề tài VXL assembly

Hinh 1 VXL intel 4004

Năm 1972, Intel cho ra đời chip vi xử lý 8008.

- Độ dài từ xử lý: 8 bit.

- Bus dữ liệu 8 bit, bus địa chỉ 14 bit (dùng chung với bus dữ liệu).

- Tần số làm việc 300Khz, 18 chân, chứa 3300 transitors.

8 | P a g e

Page 9: Đề tài VXL assembly

Hình 2 VXL intel 8008

Năm 1976, Zilog cho ra đời chip vi xử lý Z80:

- Độ dài từ xử lý: 8 bit.

- Bus dữ liệu 8 bit, bus địa chỉ 16 bit (dùng chung với bus dữ liệu).

- Tần số làm việc 2.5, 4, 6, 8 và 10 Mhz; 40 chân.

Năm 1982, Intel cho ra đời chip vi xử lý 80286.

- Độ dài từ xử lý: 16 bit.

- Bus dữ liệu 16 bit, bus địa chỉ 24 bit (dùng chung với bus dữ liệu).

- Bộ nhớ max: 16MB.

- Tần số làm việc 6-25Mhz.

9 | P a g e

Page 10: Đề tài VXL assembly

Hình 3 VXL intel 80286

Năm 1985, Intel cho ra đời chip vi xử lý 80386:

- Độ dài từ xử lý: 32 bit.

- Bus dữ liệu 32 bit, bus địa chỉ 32 bit (dùng chung với bus dữ liệu).

- Bộ nhớ max: 4GB.

- Tần số làm việc: 16-33Mhz.

10 | P a g e

Page 11: Đề tài VXL assembly

Hình 4 VXL intel 80386

Năm 1989, Intel cho ra đời chip vi xử lý 80486:

- Độ dài từ xử lý: 32 bit.

- Bus dữ liệu 32 bit, bus địa chỉ 32 bit (dùng chung với bus dữ liệu).

- Bộ nhớ max: 4GB.

- Tần số làm việc: 25-100Mhz.

- Tích hợp cache L1 8K.

- Tích hợp đồng xử lý số thực 80487.

11 | P a g e

Page 12: Đề tài VXL assembly

Hình 5 VXL intel 80486

Năm 1993, Intel cho ra đời chip vi xử lý Pentium:

- Độ dài từ xử lý: 32 bit.

- Bus dữ liệu 32 bit, bus địa chỉ 32 bit (dùng chung với bus dữ liệu).

- Bộ nhớ max: 4GB.

- Tần số làm việc 60, 75, 90, 120Mhz.

- Tích hợp cache I-L1 8K và D-L1 8K.

- Hỗ trợ tập lệnh xử lý multimedia MMX.

12 | P a g e

Page 13: Đề tài VXL assembly

Hình 6 VXL intel pentium

Năm 1997, Intel cho ra đời chip vi xử lý Pentium II.

- Tần số làm việc 233-450 Mhz.

- Tích hợp cache I-L1 16-32K và D-L1 16-32K.

- Tích hợp cache L2 256-512K.

- Sử dụng khe cắm kiểu slot I.

13 | P a g e

Page 14: Đề tài VXL assembly

Hình 7 VXL intel pentium II

Năm 1999, Intel cho ra lò chip vi xử lý Pentium III.

- Tần số làm việc 450Mhz-1.4Ghz

- Tích hợp cache L1, L2.

- Giới thiệu tập lệnh SSE (Streaming SIMD Extensions).

14 | P a g e

Page 15: Đề tài VXL assembly

Hình 8 VXL intel pentium III

Năm 2000, Intel cho ra đời chip vi xử lý Pentitum IV.

- Tần số làm việc 1.5-3.8 Ghz, công nghệ 180-130nm.

- Hỗ trợ các tập lệnh tiên tiến SSE, SSE2, SSE3.

- Một số phiên bản mới nhất hỗ trợ công nghệ siêu phân luồng và ảo hóa.

Hình 9 VXL pentium IV

15 | P a g e

Page 16: Đề tài VXL assembly

Năm 2003, Intel cho ra đời chip vi xử lý Pentium M.

- Công nghệ 130-90nm.

- Tần số làm việc 900Mhz – 2.26Ghz.

- Thiết kế dành riêng cho máy xách tay.

- Cache L1 32K, L2 đến 2MB.

- Hỗ trợ các tập lệnh tiên tiến MMX, SSE, SSE2.

- Công nghệ quản lý nguồn tiên tiến Intel Speedstep.

16 | P a g e

Page 17: Đề tài VXL assembly

Chương 2. Kiến trúc x86

2.1 Khái niệm

IA-32 (Intel Architecture, 32 bit) còn được gọi là x86, x86-32 hay i386 là một kiến

trúc tập lệnh của intel ứng dụng rất thành công trong mảng vi xử lý. kiến trúc này xuất

hiện đầu tiên trong vi xử lý nổi tiếng của Intel, 80386, giờ đây kiến trúc này được thiết

lập cho hầu hết các họ vi xử lý trên thế giới.

2.2 Chức năng của IA-32

IA-32 có khả năng tương thích ngược đầy đủ và hỗ trợ (mở rộng) những xử lý 64 bit,

được gọi là Intel 64 của Intel hay AMD64 của AMD (còn được gọi là x86-64 và không

liên quan gì đến kiến trúc IA-64 được áp dụng trong những dòng Itanium ( vi xử lý cho

máy chủ của Intel)). Chính do tính tương thích ngược rất tốt và sự hỗ trợ mở rộng xử lý

64 bit mà kiến trúc IA-32 vẫn được duy trì và sử dụng rộng rãi.

- Các thanh ghi bên trong có độ rộng 32 bit.

- Xử lý các phép toán số nguyên với 32 bit.

- Có 3 cơ chế làm việc.

- Chế độ 8086 thực: làm việc như một bộ xử lý 8086 đơn nhiệm 16 bit.

- Chế độ ảo: làm việc như nhiều bộ vi xử lý 8086 đa nhiệm 16 bit.

- Chế độ bảo vệ là việc đa nhiệm 32 bit.

- Xử lý các phép toán số dấu chấm động.

17 | P a g e

Page 18: Đề tài VXL assembly

Chương 3. Kiến trúc và nguyên lý làm việc của VXL 80386

3.1 Đặc điểm chung của VXL 80386

i386 là viết tắt của Intel 80386 hay thậm chí còn viết tắt là 386, là dòng vi xử lý xuất hiện

từ năm 1986 của Intel dựa trên kiến trúc vi xử lý 32bit.

Các i386 đã được đưa ra trong tháng mười 1985, nhưng đầy đủ chức năng thì được đưa ra

đầu tiên vào năm 1986.Tháng 5 năm 2006 Intel công bố rằng sản phẩm của 386 sẽ chấm

dứt vào cuối tháng chín năm 2007. Và đến bây giờ chúng ta thấy các CPU của Intel và

các hãng khác đa số là dòng 64bit. Tuy nhiên do các phần mềm ứng dụng trên nền tảng

32bit vẫn đang còn quá thịnh hành và phần mềm vẫn chưa khai thác hết được các tính

năng nổi trội của 64bit.

Từ vi xử lý 80386 là khởi đầu của các vi xử lý 32 bít .Tức là chúng có cả các bus số liệu

và bus địa chỉ đều có độ rộng 32 bít .các vi xử ly này hỗ trợ rất mạnh cho các hệ điều

hành đa nhiệm 80386 được dung cho các máy IBM PS/2 80 đầu tiên và nhiều máy nhái

khác.chúng ta có thể liệt kê vài đặc điểm chính của vi xử lý 80386 như sau:

- Bus dữ liệu rộng 32 bít nên có thể truy xuất 4 byte số liệu một lúc

- Bus địa chỉ rộng 32 bít nên có thể quản lý được đến 232=4 Gbyte nhớ vật lý .

Với trên 275.000 transistor và tốc độ xung đồng hồ 33 MHz, 80386 có tốc độ

11MIPS,tức là với 11 triệu lệnh trong 1 giây (million instructions per second), cho phép

hỗ trợ các chức năng cơ bản như 80286 bao gồm quản lý bộ và bảo vệ bộ nhớ nên dùng

tốt cho các hệ điều hành đa nhiệm .Vì có mạch tính số học –logic ALU 32 bít nên nó có

thể làm việc trực tiếp vơi từ dữ liệu dài 32 bít .Bộ nhớ của 80386 có thể lên tới 4 Gbyte

18 | P a g e

Page 19: Đề tài VXL assembly

và một chương trình có thể có tới 16.384 đoạn nên không gian địa chỉ ảo là 16.384 .4

Gbyte = 64 Tbyte nhớ .Sơ đồ các nhóm chân tín hiệu và các sơ đồ khối hình sau:

19 | P a g e

Page 20: Đề tài VXL assembly

20 | P a g e

Page 21: Đề tài VXL assembly

3.2 Vi xử lý 80386 có 20 chân tín hiệu :D0-D31,A0-A31,A31-A3…

80386 dùng điện thế Vss V.cc=5.0v tiêu thụ dòng trung bình 550mA-phiên bản tần

số 25 MHZ,500 mA-phiên bản tần số 25MHZ,600Ma-phiên bản 20MHZ…

-D0-D31 là 32 bít số liệu .Tùy theo mức tín hiệu NA trên bus điều khiển ,thông tin

truyền qua bus số liệu có thể là 32 bít hay 16.

-A0-A31 là 32 bít địa chỉ .các tin hiệu BEO-BE3 cho biết byte số liệu nào được

truyền .Để số liệu dài 32 bít thì cả 4 tín hiệu này phải ở mức tích cực thấp.

-CLK2 là lối vào xung nhịp cấp cho vi xử lý , nó được chia 2 bên trong thành PCLK

để đồng bộ quá trình thực hiện lệnh .

3.3 Các tín hiệu ngắt :INTR và NMI.

-RESET :đưa vi xử lý vào trạng thái khởi động lại .Chân này phải ở mức tích cực ít

nhất 15 chu kì CLK2, nó nhạy với mức xung và phải đồng bộ với CLK2.

3.3.1Các tín hiệu xác định chu kì bus :đây là tín hiệu ra 3 trạng thái ,xác định các loại

chu kì bus W/R phân biệt giữa chu kì ghi và đọc .D/C phân biệt giữa chu kì số liệu va chu

kì điều khiển .M/IO phân biệt giữa chu kì nhớ và cổng vào ra .Bảng sau chỉ ra các chu kì

bus tương ứng với các tín hiệu trạng thái .

M/IO D/C W/R Chu kì bus LOCK?

0 0 0 Trả lời ngắt có

0 1 1 Không xảy ra-

0 0 0 Đọc vào ra Không

0 1 1 Viết vào ra Không

21 | P a g e

Page 22: Đề tài VXL assembly

1 0 0 Đọc mã lệnh Không

1 0 1 Dừng Không

1 1 0 Đọc bộ nhớ Có một số chu kì

1 1 1 Viết bộ nhớ Có một số chu kì

3.3.2 Các tín hiệu điều khiển bus :

+ ADS là tín hiệu ra 3 trạng thái , cho biết chu kì bus bắt đầu và các tín hiệu W/R, D/C,

M/IO, BEO-BE3 ,A2-A31 được đưa ra các chân xử lý

+ REALY là tín hiệu vào , cho biết chu kì bus đã kết thúc .

+ NA (next address) là tín hiệu vào dùng cho phương pháp định địa chỉ đường

ống .mức tích cực thấp báo cho CPU biết là hệ thống đã sẵn sàng , nhận giá trị mới của

các tín hiệu W/R, D/C, M/IO, BEO-BE3,A2-A31, mặc dù chu kì bus hiện hành chưa

được trả lời bằng tín hiệu REALY=0.

+BS16 là tín hiệu vào , cho phép vi xử lý nối với bus số liệu 32 hoặc 16 bít .Khi

BS16=0, làm cho chu kì hiện hành chỉ sử dụng 16 bít thấp của bus số liệu D0-D15

(tương ứng với BEO-BE1) .Nếu trong chu kì hiện tại BEO=0 và BE1=0 thì đưa tín hiệu

BS16=0 không ảnh hưởng .Nhưng nếu BE2=0 mà đưa tín hiệu BS16=0 thì CPU sẽ tự

động thích nghi để chuyển các byte này sang D0-D15.Tín hiệu BS16 không đươc ở mức

tích cực trong chu kì làm việc với bộ đồng xử lý .

3.3.3 Các tin hiệu trọng tài bus :

+ HOLD là tín hiệu vào do một thiết bị chủ khác đưa đến yêu cầu làm chủ bus .Nếu

đồng thời có cả tín hiệu RESET thì tín hiệu đó sẽ có độ ưu tiên lớn hơn .

22 | P a g e

Page 23: Đề tài VXL assembly

+ HLDA 80386 đưa ra tín hiệu này để trả lời tín hiệu HOLD và chuyển về trạng thái

‘trả lời HOLD” .Ở trạng thái này vi xử lý chỉ điều khiển tín hiệu HLDA còn tất cả các tín

hiệu ra 2 chiều khác đều ở trạng thái trở kháng cao.

80386 cũng có 2 chế độ hoạt động ,chế độ thực và chế độ bảo vệ .Ngoài ra còn có một

chế độ hoạt động 8086 ảo cho phep dễ dàng chuyển qua lại giữa các nhiệm vụ trong chế

độ bảo vệ và chế độ thực .Các thanh ghi trong 80386 vì dài 32 bít nên được kí hiệu them

chữ E (extended) ở đầu , ví dụ EAX, EBX… Một đặc điểm mới là 80386 có các thanh

ghi gỡ rối .Một bộ phận gỡ rối mềm có thể nạp các địa chỉ điểm dừng trong chúng để hỗ

trợ cho việc gỡ rối .80386 có thể được ra lệnh “dừng” khi đơn vị địa chỉ trong bộ xử lý

tính toán một địa chỉ tuyến tính trùng hợp với một trong các địa chỉ ở các thanh ghi gỡ

rối.

3.4 Các thanh ghi đa năng, thanh ghi trỏ, thanh ghi cờ.

-Các thanh ghi nay rộng 32 bít , phần 16 bít thấp cung các byte cao và thấp trong các

thanh ghi mở rộng vẫn giữ như cũ là AH và AL số bít cờ trong thanh ghi cờ cũng nhiều

hơn.

EAX AH AL

EBX BH BL

ECX CH CL

EDX DH DL

ESI SI

EDI DI

EBP BP

23 | P a g e

Page 24: Đề tài VXL assembly

ESP SP

EIP IP

EFLAGS FLAG

VM:Chế độ ảo TF:Cờ bẫy

RF:Cờ hồi phục SF:Cờ dấu

NT:Cờ lồng nhiệm vụ ZF:Cờ zero

I/O PL:Mức đăc quyền AF:Cờ nhớ phụ

OF:Cờ tràn PF:Cờ chẵn lẻ

DF:Cờ hướng CF:Cờ nhớ

IF:Cờ ngắt

3.4.1 Các thanh ghi điều khiển là thanh ghi điều khiển 32 bít như các thanh ghi khác

của vi xử lý 32 bít này .Gồm các bộ phận :CR0, CR1, CR2 , CR3 .Trong đó

+ CR0 :TS .EM , MP ,PE

+ CR1: có nhiệm vụ dự trữ

+ CR2: địa chỉ tuyến tính trang nhớ có lỗi

+ CR3 : 20 bít địa chỉ cơ sở thư mục trang nhớ và 11 bít dự trữ

3.4.2 Các thanh ghi đoạn

Phần hở 16 bít Phần kín

24 | P a g e

Page 25: Đề tài VXL assembly

(được nạp bởi chương trình) (được vi xử lý nạp tự động)

Bộ chọn quyền truy nhập địa chỉ cơ sở độ dài đoạn

16 bít 12 bít 32 bít 28 bít

CS

DS

SS

ES

FS

GS

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

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

DR1 Địa chỉ tuyến tính của điểm dừng 1 Các thanh ghi gỡ rối

DR2 Địa chỉ tuyến tính của điểm dưng 2

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

DR4 Dự trữ

DR5 Dự trữ

TR6 Từ điều khiển kiểm tra Thanh ghi kiểm tra

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

25 | P a g e

Page 26: Đề tài VXL assembly

16 bít thấp của thanh ghi điều khiển CR0 là từ trạng thái máy MSW .Vi xử lý 80386 cũng

chuyển sang chế độ bảo vệ bằng việc đặt bít LSB của thanh ghi này tới 1 .Thanh ghi CR1

được dự trữ và thanh ghi CR2 và CR3 được dùng cho chế độ bảo vệ trang.

-Thanh ghi quản lý bộ nhớ : gồm có các thanh ghi GDTR, LDTR, IDTR, TR, có chức

năng giống như bộ vi xử lý 80286 chỉ khác ở chỗ :đại chỉ cơ sở 32 bít và giá tri giới hạn

là 20 bít

-Thanh ghi trạng thái SR và thanh ghi điếm chương trình :cũng được nâng lên 32 bít gồm

16 bít thấp như trong VXL 80286 và 16 bít cao.

3.5 Tổ chức bộ nhớ của 80386.

-Bộ nhớ của 80386 được tổ chức theo byte (8 bit) và ( 16 bit) hay từ kép (32 bít). Ngoài

chế độ thực , cũng có những chế độ bảo vệ như sau :

3.5.1 Tổ chức phân đoạn , chia bộ nhớ thành từng đoạn riêng biệt dành cho mã lệnh , số

liệu và ngăn xếp .Điều này cho phép nhiều chương trình chạy cùng lúc mà không ảnh

hưởng lẫn nhau . Tổ chức phân đoạn rất tiện lợi cho việc lập trình mô-dun , là công cụ

hữu dụng cho người lập trình ứng dụng.

3.5.2 Tổ chức phân trang , sử dụng bộ nhớ ảo gồm nhiều trang có kích thước nhỏ và cố

định .Do đó chỉ một phần chương trình đang chạy được đặt vào bộ nhớ khi cần thiết.Điều

này cho phép tách biệt các nhiệm vụ đang cùng chạy một lúc .Tổ chức theo trang thì

thuận lợi cho việc lập trình hệ thống khi cần quản lý bộ nhớ vật lý.

-Quản lý bộ nhớ trong 80386 còn cho phép tạo một chế độ 8086 ảo là một nhiệm vụ đặc

biệt chạy trong chế độ bảo vệ .Lúc này bộ VXL mô phỏng hoàn toàn vi xử lý 8086 và

như vậy cho phép nhiều chương trình 8086 ảo có thể chạy song song đồng thời .Do các

thế hệ vi xử lý 486 và pentium tiếp theo cũng làm việc trên nguyên tắc này nên chế độ

bảo vệ và quản lý bộ nhớ của VXL 80386 được tìm hiểu chi tiết là một việc làm cần thiết.

26 | P a g e

Page 27: Đề tài VXL assembly

3.6 Không gian nhớ :

80386 có 3 loại địa chỉ :

+ Địa chỉ lôgic hay còn được gọi là địa chỉ ảo :địa chỉ logic co 2 phần là bộ chọn và

độ lệch offset.Bộ chọn là nội dung của các thanh ghi đoạn .Offset được tạo nên từ tổng

thể của 3 thành phần : địa chỉ cơ sở , chi số và độ dịch chuyển (base , index và

displasement).Mỗi nhiệm vụ có nhiều nhất 214=16 k bộ chọn .Offset là một só 32 bít có

thể lớn đến 232 =4 Gbyte .Như vậy ,một nhiệm vụ có cực đại 214 x 232 =246 = 64

Gbyte.Trong khi không gian địa chỉ vật lý của 80386 là 4Gbyte thì không gian địa chỉ

logic là 64Gbyte.

+ Đơn vị quản lý đoạn chuyển đỉa chỉ logic thành 32 bít địa chỉ tuyến tính .Nếu đơn

vị quản lý trang không được phép thì 32 bít địa chỉ tuyến tính này tương ứng với các địa

chỉ vật lý xuất hiện ở các chân địa chỉ của 80386 .Nếu đơn vị quản lý trang được phép thì

nó sẽ chuyển 32 bít địa chỉ tuyến tính thành các địa chỉ trang.

3.7 Chế độ thực của 80386

Sau khi khởi động máy tính , 80386 cũng nhảy ngay vào chế độ thực .Tại đây nó có

cấu trúc như 8086 nhưng có thể xâm nhập vào thanh ghi 32 bít .Cơ chế định địa chỉ cung

như kích thước bộ nhớ cũng như chế độ thực trong 80266 .Kich thước cực đại của bộ nhớ

là 1 Mbyte ,vì vậy chỉ có các dây địa chỉ từ A2 đến A 19 và BEO đến BE3 là tích cực .địa

chỉ vật lý được tính bằng cách dịch trái nội dung thanh ghi đoạn 4 bit rồi cộng với địa chỉ

hiệu dụng.Như vậy ở chế độ thực ,bộ nhớ có địa chỉ từ 0000 0000 đến 0010

FFFFh .Việc dich trái thanh ghi đoạn thanh 4 bít ngầm định rằng các đoạn nhớ bắt đầu ở

các địa chỉ khác nhau 16 byte .Độ dài của một đoạn ở chế độ thực là 64 kbyte .Các đoạn

có thể gối lên nhau cho phép người lập trình tối thiểu hóa dung lương bộ nhớ cần cho

chương

27 | P a g e

Page 28: Đề tài VXL assembly

Chế độ bảo vệ

Khi muốn chuyển sang chế đọ bảo vệ phải đặt bit thấp nhất PE trong thanh ghi điêu

khiển CR0 lên 1 .Chế độ bảo vệ trong 386 có 2 loại : bảo vệ phân đoạn và bảo vệ phân

trang .Sự khác nhau giữa chế độ thực và chế độ bảo vệ là cách tính địa cơ sở .Ở chế độ

bảo vệ ,vi xử lý dùng bộ chọn để xác định địa chỉ số nhằm tìm tới bộ mô tả đoạn .Trong

bộ mô tả đoạn chứa 32 bít địa chỉ cơ sở .Sau đó địa chỉ tuyến tính , chính là địa chỉ vật

lý ,cũng được tính bằng địa chỉ cơ sở và ofset .Phân chia thành trang là một cơ chế chỉ chi

phép trong chế độ bảo vệ .Đơn vị quản lý theo trang sẽ biến đổi 32 bít tuyến tính đã tìm

được nhờ mô tả đoạn thành các địa chỉ trang vật lý.

3.8 Chế độ bảo vệ phân đoạn trong 80386

3.8.1 Các khái niệm cơ bản

-Đoạn nhớ và các mức đặc quyền: chế độ bảo vệ phân đoạn trong 80386 cũng giống như

trong 80286. Một trong những xuất phát điểm của việc phân đoạn bộ nhớ là do yêu cầu

bảo vệ các nhiệm vụ khác nhau trong các chương trình. Giải pháp tổng quát cho bộ nhớ

lúc này là định nghĩa nhiều không gian địa chỉ hoàn thành độc lập gọi là các đoạn nhớ

cho mỗi nhiệm vụ. mỗi giai đoạn gồm các địa chỉ tuyến tính kế tiếp nhau từ 0 đến giá trị

tối đa. Như vậy mỗi đoạn có độ dài xác định, chiều dài này có thể thay đổi trong thời gian

thực thi chương trình.

28 | P a g e

Page 29: Đề tài VXL assembly

Hình 11 Cách tổ chức hệ phân cấp đặc quyền

Giống như trong 80286, mỡi đoạn nhớ cũng được gán cho một trong bốn mức đặc

quyền được đánh số từ 0-3 với mức đặc quyền giảm dần như chỉ ra trên hình

2.23.mức đặc quyền gán cho một chương trình cho biết một chương trình có thẩm

quyền là những gì khi nó được thực hiện một nhiệm vụ.

Mức 0 là mức đặc quyền cao nhất gồm các chương trình quản lý tài nguyên hệ

thống và bộ nhớ.Lõi phải gọn, có khả năng vận hành tốt, không bị hỏng do phần

mềm khác. Các chương trình con trong BIOS thuộc loại này.

Mức một gồm các phần mềm liên quan đến các phần mềm hệ thống quản lý thiết

bị và các cổng vào ra, thiết lập múc ưu tiên giữa các nhiệm vụ, làm thuận toán tráo

đổi (swapping) và các trình điều khiển thiết bị.

Mức 2 bao gồm các chương trình quản lý tập tin, các thư viện. các chương trình hệ

điều hành thuộc mức này.

Mức 3 dàn cho các chương trình ứng dụng là mức thấp nhất.

29 | P a g e

Page 30: Đề tài VXL assembly

Hệ phân cấp này quy định chương trình có thể thâm nhập vào bất cứ nhiệm vụ nào

có mức đặc quyền thấp hơn nhưng để nhẩy vào một nhiệm vụ có mức đặc quyền

cao hơn thì chương trình phải qua bộ mô tả cửa nếu không sễ xẩy ra ngoại lệ.

Hệ thống phân biệt trạng tháy các mức đặc quyền như sau:

Mức đặc quyền yêu cần RPL là giá trị các bít RPL được lưu giữ tại thanh ghi đoạn

(bột chọn)

Mức đặc quyền hiện tại CPL của một nhiệm vụ đang thực hiện, có giá trị bằng

mức đặc quyền của đoạn lệnh đang chạy.nó chính là các bít RPL của bộ chọn đoạn

đang chạy. Bộ sử lý có thể thay đổi CPL nếu điều khiển chương trình được chuyển

cho một đoạn mã lệnh có mức đặc quyền khác.

Mức đặc quyền bộ mô tả DPL là mức đặc quyền thấp nhất, cần có để nhiệm vụ có

thể thâm nhập vào bộ mô tả.là giá trị lưu giữ tại trường DPL trong bộ mô tả đoạn.

đó là mức đặc quyền của đoạn nhớ cần thâm nhập.

Mức đặc quyền hiệu dụng EPL là mức đặc quyền thấp nhất trong thông số RPL và

DPL.

3.8.2 Bảng các bộ mô tả đoạn: giống như trong 80286, bảng các bộ mô tả chứa tất cả

thông tin về các đoạn nhớ bằng các bộ mô tả đoạn. có 3 loại bảng: bảng các bộ mô tả toàn

cụ GDT, bảng các bộ mô tả cụ bộ LDT và bảng các bộ mô tả ngắt IDT. Tất cả các bảng

có độ dài từ 8 byte đến 64 kbyte.

- Bảng GDT dài 64 kbyte (8byte x 213=216 byte) có thể quản lý được 213 đoạn nhớ

trong không gian nhớ toàn cục.không gian này lưu trữ các mã lệnh hệ điều hành và

dữ lieuj hệ điều hành,… trừ bộ mô tả ngắt, bảng này chứa tất cả các bộ mô tả mà

tất cả nhiệm vụ của hệ thống đều thâm thập được. GDT là một bảng duy nhất, địa

chỉ cơ sở và độ dài GDT được chứa trong thanh ghi hệ thống GDTR ( thanh ghi

bảng các bộ mô tả toàn cục).

- Bảng LDT được dành riêng cho các mã lệnh, dữ liệu, ngăn xếp,…của từng

nhiệm vụ, chương trình ứng dụng. Mỗi nhiệm vụ có một bảng bộ mô tả LDT riêng

của nó và do đó chúng không thể truy nhập được vùng nhớ của nhau. Như vậy có

nhiều bảng LDT và mỗi bảng LDT được xác định bằng một bộ mô tả đoạn LDT

30 | P a g e

Page 31: Đề tài VXL assembly

trong bảng GDT.Bộ mô tả đoạn LDT chứa địa chỉ cơ sở và độ dài đoạn

LDT.Thông tin này của nhiệm vụ đang thực hiện cũng được chứa trong thanh ghi

hệ thống LDTR (thanh ghi bảng các bộ mô tả cục bộ).mỗi LDT có thể chứa các bộ

mô tả đoạn lệnh, đoạn số liệu, đoạn ngăn xếp và các cửa giao dịch kiểu CALL.

Một nhiệm vụ chỉ có thể thâm nhập vào đoạn mà bộ mô tả của nó được chứa trong

bảng LDT đang dùng hay GDT. Như vậy, các bảng GDT và LDT cho phếp cách

ly giữa các đoạn nhớ thuộc từng nhiệm vụ, nhưng đồng thời cũng có thể phân chia

nhiệm vụ cho từng dữ liệu chung cho từng nhiệm vụ.

Bảng IDT được dùng để mô tả địa chỉ của 256 ngắt trong chế độ bảo vệ của bộ sử

lý thay cho bảng vécto ngắt trong chế dộ thực thông thường.địa chỉ cơ sở và độ dài

đoạn được chứa trong thanh ghi hệ thống IDTR ( thanh ghi bảng mô tả ngắt).

31 | P a g e

Page 32: Đề tài VXL assembly

Hình mô tả mối liên hệ giữa các thanh ghi GDTR, LDTR và các bảng GDT, LDT.

Các lệnh LGDT, LLDT và LIDT nạp địa chỉ cơ sở và độ dài của các bảng GDT,

LDT và IDT vào các thanh ghi tương ứng.các lệnh SGDT và SIDT cấp giứ các giá

32 | P a g e

Page 33: Đề tài VXL assembly

trị của địa chỉ cơ sở và độ dài của các thanh ghi vào bộ nhớ. Chỉ có hệ điều hành

thao tác với các thanh ghi trên, vì vậy các lệnh nạp và cất giữ các thanh ghi đó còn

gọi là các lệnh đặc quyền.các lệnh LMSW (nạp từ trạng thái máy), LTR (nạp phần

chọn của thanh ghi TR), CLTS ( xóa bít chuyển nhiệm vụ TS), HALT ( dừng hoạt

động của bộ vi sử lý) cũng thộc về lệnh đặc quyền.

Riêng lệnh LLDT được dùng để nạp thanh ghi LDTRR có thể được chạy chỉ bởi

các chương trình đang chạy ở mức đặc quyền cao nhất.do đó trừ khi một nhiệm vụ

đang hoạt động ở mức đặc quyền cao nhất, còn thì nó không thể thâm nhập bảng

bộ mô tả cục bộ của nhiệm vụ khác được. sự chuyển nhiệm vụ thường được điều

khiển bởi phần lõi của hệ điều hành, phần này hoạt động ở mức ưu tiên cao nhất.

3.8.3 Các bộ mô tả và bộ chọn đoạn nhớ

3.8.3.1 Các bộ mô tả đoạn: mỗi đoạn nhớ có các thông số đặc chưng cho nó được lưu

trữ trong một vùng nhớ 8 byte gọi là bộ mô tả đoạn có dạng tổng quát gồm các trường 32

bít địa chỉ cơ sở, 20 bít độ dài đoạn và trường thuộc tính của các loại như sau:

- Độ dài đoạn: gồm 20 bít biểu thị cho độ dài theo 2 cách tùy thuộc vào giá trị của bít

G.

- Nếu G=0, độ dài đoạn nằm giữa 1 byte và 220 = 1 Mbyte tính theo đơn vị byte.

- Nếu G=1, độ dài đoạn ngằm giữa 4 byte tới 232= 4 Gbyte tính theo đơn vị 4 Kbyte =

1 trang. Nếu chương trình có ý định thâm nhập vùng nhớ ngoài giứ hạn độ dài này

thì sễ xẩy ra ngoại lệ.

- Địa chỉ cơ sở đoạn: gồm 32 bít xác định địa chỉ thấp nhất của byte nhớ trong đoạn

nằm trong không gian địa chỉ tuyến tính 4 Gbyte.

- Các mức đặc quyền DPL: được dùng để kiểm tra quyền thâm nhập tương ứng với

mức đặc quyền của nhiệm vụ ấy. như vậy trường dài 2 bít này có 4 giá trị từ 00 2 đến

112.

- TYPE: xác định dạng của đoạn hoặc cửa giao dịch, xác định kiểu truy nhập và

hướng dãng nở của đoạn.

- D: xác định chiều dài của toán hạng. nếu DB=1, địa chỉ toán hạng sẽ dài 32 bít. Nếu

DB=0, đại chỉ toán hạng dài 16 bít.

33 | P a g e

Page 34: Đề tài VXL assembly

- P: cho phếp xác định đoạn có tồn tại trong bộ nhớ thực hay không. Nếu P =1, đoạn

có trong bộ nhớ vật lý. Nếu P = 0, đoạn không tồn tại và một ngoại lệ sẽ xẩy ra.

- S: các định loại mô tả. nếu DT=1, đó là loại bộ mô tả đoạn giữ liệu, nếu DT=0 là bộ

mô tả đoạn hệ thống.

- Các bít còn lại r, vs là dự trữ cho người dùng hoặc cho hệ điều hành.

- Giống 80286, vi xử lý 80386 cũng có 4 loại bộ mô tả đoạn:

- Bộ mô tả đoạn số liệu: tương tự như dạng tổng quát, chỉ có byte quyền thâm nhập

có giá trị riêng như sau:

- Bit S=1 để phân biệt với đoạn hệ thống.

- Bit E=1 để phân biệt với đoạn lệnh,

- ED để chỉ chiều phát triển của số liệu. nếu ED=1, thường chỉ đoạn ngăn xếp. nếu

ED=0, chỉ đoạn số liệu thông thường.

- W=0, đoạn số liệu chỉ đọc được. W=1, có thể cả đọc và viết.

- Bộ mô tả đoạn lệnh: so với đoạn tổng quát có một số điểm khác sau:

- S=1.

- E=1.

- C=1, chỉ bằng chương trình có mức đặc quyền(PL>=DPL) thì có thể gọi đoạn lệnh

có bộ mô tả này.

- R=0, đoạn lệnh không được phép đọc, R=1, đoạn lệnh có thể đọc.

- Bộ mô tả đoạn hệ thống: mô tả các thông tin về các bảng của hệ điều hành, về các

nhiệm vụ và về các cửa giao dịch. Trường bit TYPE trong dạng tổng quát được xác

định như sau:

Kiểu Định nghĩa Kiểu Định nghĩa

0 0000 Không dùng 8 1000 Không dùng

1 0001 Đoạn TSS của 286 sẵn sàng 9 1001 Đoạn TSS 386 sẵn sàng

2 0010 LDT 10 1010 Dự trữ

3 0011 Đoạn TSS của 286 bận 11 1011 Đoạn TSS 386 bận

4 0100 Cửa giao dịch CALL của 286 12 1100 Cửa giao dịch CALL 386

5 0101 Cửa giao dịch nhiệm vụ 13 1101 Dự trữ

34 | P a g e

Page 35: Đề tài VXL assembly

6 0110 Cửa giao dịch ngắt 286 14 1110 Cửa giao dịch ngắt 386

7 0111 Cửa giao dịch bẫy 286 15 1111 Cửa giao dịch bẫy 386

- Bộ mô tả bảng LDT(s=0, TYPE=2) chứa các thông tin về bảng các bộ mô tả cục bộ

LDT. Mỗi nhiệm vụ có một bảng LDT. Vì lệnh nạp thanh ghi LDTR chỉ được phép ở

mức đặc quyền 0 nên các bít DPL của bộ mô tả của LDT không có tác dụng. bộ mô tả

của LDT chỉ được chứa trong bảng các bộ mô tả toàn cục GDT.

- Bộ mô tả TSS(S=0, TYPE =1, 3, 9, B): đoạn trạng thái nhiệm vụ của TSS chứa các

trạng thái của một nhiệm vụ. bộ mô tả TSS cho thông tin về vị trí, độ dài và mức đặc

quyền của TSS. Các bit TYPE cho biết TSS sẵn sàng hay bận và TSS thuộc 80286 hay

80386. Thanh ghi TR chứa bọ chọn trỏ tới TSS đang chạy.

-Các cửa giao dịch(S=0, TYPE=4 đến 7, C, F): các cửa giao dịch dùng để diều khiển

việc thâm nhập tới các điểm vào của một đoạn lệnh. Có 4 loại cửa giao dịch: cửa giao

dịch kiểu CALL, cửa giao dịch kiểu ngắt, cửa giao dịch kiểu bẫy và cửa giao dịch nhiệm

vụ. các cửa giao dịch cung cấp phương tiện cho việc chuyển giao điều khiển một cách

gián tiếp giữa chương trình nguồn và chương trình đích. Sự chuyển giao này cho phép vi

xử lý thực hiện kiểm tra việc bảo vệ một cách tự động. nó cũng cho phép người thiết kế

hệ thống kiểm soát các điểm vào của hệ điều hành. Dạng tổng quát của bộ giao dịch như

sau:

+Cửa giao dịch kiểu CALL thường dùng để chuyển điều khiển chương trình tới mức

đặc quyền cao hơn.Bộ mô tả cửa CALL có 3 trường thâm nhập đoạn ,bộ chọn trỏ tới bộ

mô tả đoạn lệnh đích và offset để xác định vị trí trong đoạn đính đó. Trong bộ mô tả cũng

chứa 5 bit bộ đém từ cho biết số thông số cần sao từ ngăn xếp của chương trình gọi sang

chương trình được gọi. chỉ có bộ mô tả CALL mới có bộ đếm từ.

+ Cửa giao dịch kiểu ngắt và kiểu bẫy cung cấp bộ chọn trỏ tới bộ mô tả lệnh xử lí ngắt

và offset để xác định vị trí bên trong của đoạn lệnh đó. Sự khác nhau giưa cửa giao dịch

kiểu ngắt và kiểu bẫy là ở chỗ: cửa kiểu ngắt cho phép xóa bit cho kiểu ngắt IF trong

thanh ghi CF còn kiểu bẫy thì không.

35 | P a g e

Page 36: Đề tài VXL assembly

+ Cửa giao dịch nhiệmvụ được sử dụng khi có thay đôi nhiệm vụ. vì cửa giao dịch

nhiệm vụ chỉ quy chiếu dến bảng TSS nên chỉ có bộ chọn tác dụng, còn offset không

dùng. Bộ chọn trỏ tới bộ mô tả TSS.

Byte quyền thâm nhập của cả 4 loại cửa giao dịch là giống nhau.

3.8.3.2 Bộ chọn đoạn là nội dung chứa trong phần hở 16 bit của thanh ghi đoạn được

nạp bởi chương trình. Phần kín 64 bit có nội dung được vi xử lý tự động sao chép từ bộ

mô tả đoạn sang gồm 32 bit địa chỉ cơ sở, 20 bit độ dài đoạn và 12 bit quyền thâm nhập.

Giống như trong 80286, 16 bit của bộ chọn được chia thành 3 trường như sau:

Trường mức đặc quyền: gồm 2 bit RPL với 4 mức đặc quyền từ 0 đén 3 của đoạn nhớ.

Trường chọn bảng các bộ mô tả TI, nếu TI=0 bộ mô tả nằm trong bảng GDT, nếu TI=1

bộ mô tả nằm ở bảng LDT.

Trường chỉ số(INDEX) gồm 13 bit trỏ tới một bộ mô tả đoạn trong GDT hoặc LDT. Tức

là cũng có thể có tới chừng ấy các đoạn nhớ với các địa chỉ cơ sở đoạn 32 bit khác nhau.

Địa hcir một ô nhớ trong đoạn sẽ là tổng của địa chỉ cơ sở 32 bit này và địa chỉ lệch

offset 32 bit do chương trình cung cấp. do đó mặc dù không gian nhớ vật lý của 80386

chỉ có 232=4 Gbyte nhưng không gian nhớ ảo có thể lên tới 214x232=64 tetrabyte. Tổ hợp

của các địa chỉ cơ sơ đoạn và đọ lệch bên trong các đoạn đó tạo nên thang địa chỉ tuyến

tính trong đoạn, có nghĩa rằng ta có thể tìm thấy các địa chỉ lớn hơn trong các vùng cao

hơn của bộ nhớ.

3.8.3.3 Bảo vệ bộ nhớ

-Các quy tắc về mức đặc quyền: nếu chương trình đang chạy tìm cách truy nhập một đoạn

hay cửa, bộ xử lý sẽ so sánh DPL với CPL để kiểm tra quyền truy nhạp vào một đoạn.

thường giá trị của CPL bằng giá trị mức đặc quyền của đoạn mã lệnh lưu trữ chương trình

đang chạy. chương trình đang chạy có thể thâm nhập tự do vào các đoạn lệnh và đoạn dữ

liệu có cùng mức đặc quyền với chương trình. Khi điều khiển vượt ra khỏi mức đặc

quyền của chương trình thì phải tuân theo các quy tắc về các mức đặc quyền như sau:

- số liệu lưu trữ trong đoạn nhớ với mức đặc quyền P nào đó chỉ có thể được thâm nhập

bằng các lệnh có thể thâm nhập ở mức đặc quyền, ít nhất cũng phải bằng P. nếu CPL là

36 | P a g e

Page 37: Đề tài VXL assembly

mức đặc quyền của đoạn lệnh đang chạy còn DPL là mức đặc quyền của đoạn lệnh đang

chạy còn DPL là mức đặc quyền của đoạn dữ liệu thì điều kiện thâm nhập là:

CPL<=DPL

-đoạn lệnh (chương trình con) có mức đặc quyền P chỉ bị gọi bởi nhiệm vụ đang thực

hiện ở mức đặc quyền bằng hay thấp hơn P. nếu CPL là mức đặc quyền của đoạn lệnh

thì:

CPL>=DPL

3.8.4 Chế độ bảo vệ phân trang bộ nhớ

3.8.4.1 Thư mục trang, bảng trang và trang

Trong phương pháp này, không gian địa chỉ ảo được tách ra thành nhiều trang có kích

thước bằng nhau.Thường kích thước trang bằng lũy thừa của 2.VD 212= 4KB. Không gian

địa chỉ vật lý được tách thành nhiều mảng theo cách tương tự, mỗi mảnh có kích thước

bằng kích thước trang sao cho mỗi mảng của bộ nhớ chính có khả năng lưu giữ đúng một

trang. Khi một nhiệm vụ yêu cầu truy cập một địa chỉ logic, bộ xử lý chuyển địa chỉ logic

này thành địa chỉ tuyến tính và trong chế độ phân đoạn địa chỉ này cũng chính là địa chỉ

vật lý.Nếu trang chứa địa chỉ tuyến tính không tồn tại trong bộ nhớ vật lý thì một ngoại lệ

sẽ xảy ra. Nếu chế độ trang được phép, bộ xử lý sẽ chuyển dần địa chỉ tuyến tính sang địa

chỉ vật lý tương ứng với các trang. Thông tin mà bộ xử lý dùng để ánh xạ địa chỉ tuyến

tính vào không gian địa chỉ vật lý được lưu trữ vào các vùng nhớ gọi là thư mục trang và

bảng các trang.

Thư mục trang (page directory) có 210= 1024 điểm vào 32-bit (4 bytes).Mỗi điểm vào trỏ

tới một trong 1024 bảng trang. Như vậy thư mục trang dài 4KB. Có một thanh ghi điều

khiển đặc biệt 32-bit CR3 chứa địa chỉ cơ sở của thư mục trang. Chỉ có 20 bit cao của địa

chỉ cơ sở được ghi trong CR3 còn 12 bit thấp được mặc định bằng không vì địa chỉ thư

mục trang phải được phân theo đơn vị nhỏ nhất của trang là 4KB.Nội dung của mỗi điểm

vào thư mục trang như sau.

37 | P a g e

Page 38: Đề tài VXL assembly

31 12 11 10 9 8 7 6 5 4 3 2 1 0

20bit địa chỉ cơ sở bảng trang OS G PS 0 A PCD PWT U/S R/W P

Bảng các trang (page table) cũng có 210=1024 điểm vào 32-bit (4 byte).Mỗi điểm vào trỏ

tới một trong 1024 trang (còn gọi là khung trang).Như vậy bảng các trang cũng dài 4KB.

Nội dung của mỗi điểm vào bảng trang như sau.

31 12 11 10 9 8 7 6 5 4 3 2 1 0

20 bit địa chỉ cơ sở trang OS G 0 D A PCD PWT U/S R/W P

3.8.4.2 Tính địa chỉ vật lý trong chế độ trang

Nếu chế độ trang được phép thì 32 bit địa chỉ tuyến tính nhận được khi phân đoạn sẽ

được dùng để xác định địa chỉ vật lý của các byte nhớ trong các trang.

Như trên đã nói, địa chỉ cơ sở của thư mục trang này được giữ trong thanh ghi điều khiển

CR3. Thanh ghi này được gọi là thanh ghi cơ sở thư mục trang PDBR (page directory

base register) và cần được nạp khi khởi động máy tính. Nội dung của nó có thể được thay

đổi tự động khi thay đổi nhiệm vụ hay bằng lệnh MOV 32 bit địa chỉ tuyến tính lúc này

được phân thành 3 phần.

38 | P a g e

Page 39: Đề tài VXL assembly

39 | P a g e

Page 40: Đề tài VXL assembly

10 bit cao nhất trong trường DIR là một trong 1024 điểm vào của thư mục trang, mỗi

điểm vào này cho phép trỏ tới một trong 1024 bảng trang.

10 bit tiếp theo trong trường TABLE là một trong 1024 điểm vào, mỗi điểm vào trỏ tới

địa chỉ của một trong 1024 trang thuộc bảng.

12 bit còn lại trong trường OFFSET chứa địa chỉ lệnh của ô nhớ cần truy nhập trong số

4KB của một trang. Các bit này cộng với địa chỉ cơ sở từ một điểm vào bảng trang để tạo

ra địa chỉ vật lý cần truy xuất ở bộ nhớ.

Như vậy dung lượng cực đại của bộ nhớ trong cấu trúc này là:

1024 bảng trang x 1024 trang/một bảng trang x 4KB/trang= 4GB.

3.8.4.3 Vai trò của hệ điều hành trong quản lý trang.

Bộ xử lý thực hiện quá trính chuyển hóa địa chỉ trang để giảm bớt gánh nặng cho hệ điều

hành.Hệ điều hành (HĐH) có trách nhiệm nạp các giá trị khởi đầu vào bảng các trang và

xử lý lỗi của trang.Hệ điều hành cũng làm cho TBL mất hiệu lực, khi có bất cứ sự thay

đổi nào xảy ra ở bất cứ điểm vào nào của bảng các trang.HĐH phải nạp lại thanh ghi CR3

để làm cô TBL được sắp xếp lại.

Thiết lập các địa chỉ trong trang được khởi đầu bằng việc nạp thanh ghi CR3 địa chỉ của

thư mục trang và cấp phát không gian nhớ cho các thư mục và bảng các trang. Trách

nhiệm chính của hệ điều hành là thực hiện các thuật toán hoán đổi giữa bộ nhớ và đĩa từ

và xử lý các lỗi về trang.

Hệ điều hành đảm bảo để thông tin trong bộ đệm chuyển hóa riêng (TBL) trùng hợp với

thông tin trong bảng các trang. Bất cứ khi nào nếu hệ điều hành xóa bit P trong điểm vào

của bảng các trang (P=0) đều phải sắp xếp lại TBL. Hệ điều hành cũng có thể lưu trữ

trong CR3 một phần của TSS để cung cấp cho một nhiệm vụ hay một nhóm nhiệm vụ

một tập bảng các trang riêng.Cuối cùng, có thể so sánh 2 cách phân đoạn và phân trang

như bảng dưới.

40 | P a g e

Page 41: Đề tài VXL assembly

So sánh sự phân đoạn và phân trang.

Phân đoạn Phân trang

Người lập trình có cần biết kỹ

thuật này đang được sử dụng

hay không?

Có Không

Có bao nhiêu không gian địa chỉ

tuyến tính?

Nhiều 1

Không gian địa chỉ tổng cộng có

thể vượt quá kích thước bộ nhớ

vật lý?

Có Có

Các thủ tục và dữ liệu có thể

được phân biệt và được bảo vệ

riêng rẽ?

Có Không

Tại sao kỹ thuật này được phát

triển?

Để cho phép các dữ liệu

được chia ra thành nhiều

không gian địa chỉ logic

độc lập và có thể bảo vệ

được.

Để có một không gian

địa chỉ tuyến tính lớn

mà không cần phải mua

nhiều bộ nhớ vật lý.

3.9 Chế độ 8086 ảo

41 | P a g e

Page 42: Đề tài VXL assembly

Một khó khăn chính là khi thiết kế 386 là làm thế nào vừa nâng cao khả năng của 386 lại

vừa tương thích với các phần mền 8088/86 xây dựng trên cơ sở MS DOS ở chế độ bảo

vệ. Để giải quyết vấn đề này ,người ta bổ cho 80386 .Ở chế độ ảo 8086 ,386 phân chia

bộ nhớ thành từng phần 1Mb ,mổi phần được gắn với nhiệm vụ .Từng nhiêm vụ được

chạy nếu đó là một chương trình 8086 của bộ vi xử lý 386 cho phép bất cứ chương trình

nào được viết cho DOS đều chạy được không phải thay đổi của từng nhiệm vụ mà nhiệm

vụ đó có riêng 1 Mb bộ nhớ .Điều đó có nghĩa là ở chế độ ảo 8086 ,386 sử dụng khái

niệm SEG:OFFSET ở bộ vi xử lý 8086/386.

Cả hai hệ điều hành , MS WINDOWS 3x và IBM OS /2 2.0 đều sử dụng chế độ ảo

8086 của 80386 .Các hệ điều hành sử dụng chế độ ảo 8086 của 386 để chạy nhiều

chương trình được viết cho 8088/86 .Điểm khác nhau giửa chúng là với MS

WINDOWS ,tại một thời điểm chỉ có một nhiệm vụ được kích hoạt và tất cả các nhiệm

vụ khác nghỉ ,còn ở OS /2 2.0 mổi nhiệm vụ đều chiếm một phần thời gian của CPU và

nhiều nhiệm vụ có thể được kích hoạt đồng thời .Ví dụ , trong khi đang thực hiện xử lý

văn bản thì FAX/Modem vẫn nhận và gửi dử liệu , một chương trình bảng tính như

LOTUS 123 vẩn tiến hành một số phép toán ,đồng thời đĩa mền củng đang được định

dạng .Tất nhiên, do chỉ có một bộ vi xử lý nên công việc của hệ điều hành OS /2 2.0 lấy

một phần thời gian của CPU cho từng nhiện vụ theo phương thức quay vòng .Nếu có quá

nhiều nhiệm vụ và tất cả đều cùng được kích hoạt thì sẽ làm các chương trình chạy chậm

lại bởi vì mổi nhiệm vụ có được ít thời gian của CPU hơn .Tất nhiên có giải pháp khắc

phục việc chương trình bị chạy chậm là sử dụng các CPU hơn .Tất nhiên có giải pháp

khắc phục chương trình bị chảy chậm là sử dụng các CPU có tốc độ cao 60 – 80 MHz

như Pentium chẳng hạn . Chú ý rằng ,trong khi OS/2 2.0 sử dụng khả năng đa nhiệm độc

lập thì Windows 3.x lại sử dụng khả năng đa nhiệm phối hợp , hai hoặc nhiều ứng dụng

phối hợp với từng ứng dụng khác đương chạy để tận dụng CPU xen kẽ . Nếu có một ứng

dụng bị bỏ qua thì có thể gây ra toàn hệ thống bị xung đột.

42 | P a g e

Page 43: Đề tài VXL assembly

Ở chế độ đa nhiệm riêng rẽ ,mổi nhiệm vụ có thể được chương trình khác ngắt riêng tai

một điểm bất kỳ .Nếu một nhiệm vụ bị một chương trình khác ngắt thì trang thai hiện

hành sẽ được hệ điều hành lưu lại và nó lại tiếp tục được phục vụ sau khi nhiệm vụ mới

được trao quyền sử dụng cho CPU.

80386 chuyển tới chế độ 8086 ảo để chạy trong một khoảng thời gian dành cho chương

trình loại 8086 và rồi dễ dàng quay về chế độ bảo vệ để chạy trong khoảng thời gian dành

cho nhiệm vụ hoạt động trong chế độ bảo vệ. Điều này có nghĩa rằng một vài người dùng

trong hệ thống đa người dùng có thể chạy các chương trình trong chế độ bảo vệ trng khi

các người dùng khác có thể đang chạy các chương trình DOS trong chế độ thực. Khi 386

đang chạy trong chế độ bảo vệ thực hiện chuyển nhiệm vụ, nó kiểm tra bit VM trong

thanh ghi cờ. Nếu bit này được đặt lên 1, 386 sẽ nhảy vào chế độ 8086 ảo để thực thi

nhiệm vụ mới.

Dưới đây tóm tắt tiến trình chuyển sang chế độ 8086 ảo trong các trường hợp:

- Chuyển nhiệm vụ và đặt cờ VM= 1 cuả EFLAGS được lưu trữ trong TSS. Chuyển

nhiệm vụ được thực hiện theo 2 cách: dùng lệnh CALL hay JMP, dùng lệnh IRET

khi cờ NT của EFLAGS lưu trữ trong TSS bằng 1.

- Quay lại từ một chương trình xử lý ngắt hay ngoại lệ và đặt cờ VM= 1

3.10 Chế độ thực của 80386 (real mode)

Trước hết chúng ta sẽ xem xét bộ vi xử lý Inteln 80186 và các đặc điểm của chúng theo

khía cạnh lập trình chế độ thực.

3.11 Các thay đổi chính ở 80386.

Bộ vi xử lý 80386 đã khởi đầu cho một khuynh hướng mới củ họ 80x86. Bộ vi xử lý này

tương thích với 8088/86 và 286, song cấu trúc bên trong có nhiều thay đổi. Dưới đây sẽ

nêu một số nét chính của 80386.

43 | P a g e

Page 44: Đề tài VXL assembly

1. Bus dữ liệu tang từ 16 bit lên 32 bit cả bên trong và bên ngoài.

2. Tất cả các thanh ghi đều mở rộng tới 32 bit vì thế 80386 là bộ vi xử lý 32 bit.

3. Bus địa chỉ được tăng lên 32 bit do đó có khả năng nâng bộ nhớ vật lý nên 4GB.

4. Bổ sung cơ chế bộ nhớ ảo phân trang. Như vậy 386 vừa có chế độ phân trang vừa

có chế độ phân đoạn.

5. Bổ sung thêm chế độ địa chỉ mới gọi là chỉ số tỷ lệ (scale index).

6. Nhiều lệnh thao tác bit mới được bổ sung. Các lệnh này làm việc được ở cả chế độ

thực và chế độ bảo vệ.

7. 386 có thể chuyển từ chế độ bảo vệ sang chế độ thực bằng phần mềm. Đây là một

phát triển so với 286 (286 phải thực hiện bằng phần cứng dùng RESET).

Để giảm giá thành thiết kế board mạch, hãng Intel đã sản xuất bộ vi xử lý 80386SX có

bus dữ liệu ngoài 16 bit, bus nội bộ 32 bit và tương thích 100% với 80386. Về tốc độ

386SX chậm hơn so với 386 bởi vì nó cần đến 2 chu trình nhớ (mỗi chu trình cần 2 nhịp

đồng hồ) để đánh địa chỉ 32 bit chứ không phải là một chu trình nhớ như trong trường

hợp 80386.

Ở chế độ thực, 80386 sử dụng các chân địa chỉ A19-A0 và có thể truy nhập tối đa 1MB.

Tuy nhiên, trong chế độ bảo vệ 386 có thể truy nhập tới 4GB bộ nhớ thông qua bus địa

chỉ 32bit.

3.12 Các thanh ghi đa năng làm con trỏ.

Một thay đổi khác ở 80386 là sử dụng các thanh ghi đa năng như EAX, ECX, EDX làm

con trỏ. 8088/86/286 chỉ sử dụng các thanh ghi BX, SI và DI làm con trỏ để chỉ các đoạn

dữ liệu. Nhưng bắt đầu từ 386, tất cả các thanh ghi đa năng 32 bit đều có thể sử dụng làm

con trỏ trỏ đến đoạn dữ liệu. Ta xem các lệnh hợp lệ và không hợp lê sau.

MOV BX, WORD PTR[EAX] ;đúng

MOV BX, WORD PTR[AX] ;sai, AX không làm con trỏ được

MOV EAX, DWORD PTR[ECX] ;đúng

44 | P a g e

Page 45: Đề tài VXL assembly

MOV EBX, DWORD PTR[CX] ;sai, CX không làm con trỏ được.

386 cũng cho phép cộng thêm độ dời vào các thanh ghi 32 bit để làm con trỏ.

MOV AL, [ECX+100] ;đúng.

Tất nhiên ở 386 có thể sử dụng tất cả các chế độ địa chỉ của 8086/286.Bảng dưới đây giới

thiệu một số chế độ địa chỉ có thể áp dụng được ở 386.

Bảng: Các chế độ địa chỉ của 80386.

Chế độ địa chỉ Toán hạng Đoạn ngầm định

Thanh ghi (Register) Thanh ghi (Register) None

Tức thì (Immediate) Dữ liệu (Data) None

Trực tiếp (Direct) Độ dời ([OFFSET]) DS

Thanh ghi gián tiếp

(Register indirect)

[BX]

[SI]

[DI]

[EAX]

[EBX]

[ECX]

[EDX]

[ESI]

[EDI]

DS

DS

DS

DS

DS

DS

DS

DS

DS

Quan hệ cơ sở

(Based relative)

[BX]+disp

[BP]+disp

[EAX]+disp

[EBX]+disp

[ECX]+disp

[EDX]+disp

[EBP]+disp

DS

SS

DS

DS

DS

DS

SS

45 | P a g e

Page 46: Đề tài VXL assembly

Quan hệ chỉ số (Indexed

relative)

[DI]+disp

[SI]+disp

[EDI]+disp

[ESI]+disp

DS

DS

DS

DS

Quan hệ chỉ số cơ sở (Based

indexed relative)

[R1][R2]+disp

[R1] và [R2] là bất cứ toán

hạng nào nêu trên

Nếu sử dụng BP thì đoạn là

SS, với các thanh ghi khác

thì sử dụng đoạn DS.

46 | P a g e

Page 47: Đề tài VXL assembly

Chương 4. Kiến trúc Pentium

4.1 Thanh ghi (registers)

Các kiến trúc Intel chỉ như một tập hợp không có đủ các thanh ghi để đáp ứng hầu hết các

lập trình viên assembly. Tuy nhiên, các bộ vi xử lý đã có đủ số lượng các thanh ghi để

làm bất cứ điều gì là cần thiết.

Đáp ứng hầu hết mục đích sử dụng, chúng ta dùng

32-bit 16-bit 8-bit 8-bit

(high part of 16) (low part of 16)

EAX AX AH AL

EBX BX BH BL

ECX CX CH CL

EDX DX DH DL

EBP BP

ESI SI

EDI DI

ESP SP

Sử dụng các thanh ghi:

47 | P a g e

Page 48: Đề tài VXL assembly

Như là các toán hạng, chỉ cần dùng tên của thanh ghi.

EBP là một con trỏ khung hình, ESP là một con trỏ ngăn xếp.

Các thanh ghi khác.

Nhiều bit(s) được sử dụng để kiểm soát hành động của bộ vi xử lý và thiết lập trạng thái

của các thanh ghi gọi là EFLAGS. Thanh ghi này chứa các mã điều kiện.

OF Cờ chàn

SF Cờ dấu.

ZF Zero flag

PF Cờ chẵn lẻ

CF Cờ nhớ

Các thiết lập cờ được kiểm tra trong những cấu trúc điều khiển có điều kiện. Nhiều chỉ thị

thiết lập 1 hoặc nhiều cờ (flags).

Việc sử dụng thanh ghi EFLAGS được ngụ ý (chứ không phải rõ rang) trong chỉ thị lệnh.

4.2 Truy nhập bộ nhớ (Accessing Memory)

Hiện có 2 mô hình bộ nhớ trong kiến trúc Pentium.(Trên thực tế nó là 486 và nhiều mô

hình gần đây hỗ trợ 2 mô hình).

Trong cả 2 mô hình, bộ nhớ được truy cập bằng cách sử dụng một địa chỉ. Đó là cách mà

các địa chỉ được hình thành (trong các bộ vi xử lý) khác nhau trong 2 mô hình.

Mô hình bộ nhớ flat.

Mô hình bộ nhớ mà tất cả mọi người đều sử dụng.

48 | P a g e

Page 49: Đề tài VXL assembly

Mô hình phân đoạn nhớ (segmented memory model).

- Các phần khác nhau của một chương trình được giả định là của chính nó, cài đặt

sang các phần của bộ nhớ.

- Một địa chỉ được hình thành từ 2 phần: 1 vị trí phân đoạn và 1 offset trong phân

đoạn (segment).

Lưu ý mỗi thành phần này có thể là ngắn hơn (có chứa các bits ít hơn) so với một địa chỉ

toàn bộ. Vì điều này Intel chọn hình thức mô hình bộ nhớ đầu tiên cho các bộ vi xử lý

chip đơn.

- Có các phân đoạn (segments) cho:

+ code

+ data

+ stack

+ những thứ khác

4.3 Kiến trúc Pentium Pro và sau đó

Chỉ thị giải mã (instruction decode) dịch mã máy (machine code) vào RISC OPS (giống

như chỉ thị giải mã MIPS).

Một đơn vị thực thi (execution unit) chạy RISC OPS:

+ Khả năng tương thích ngược (Backward compatiblity).

-Complex giải mã (Complex decoding).

49 | P a g e

Page 50: Đề tài VXL assembly

Chương 5. Tập lệnh VXL 32bit 80386

5.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ý.

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 gồm các thành phần sau:

[Mã lệnh] [Các toán hạng]

Trong đó:

Mã lệnh - Cơ bản trường này chứa mã lệnh dưới dạng mã gợi nhớ.

Các toán hạng - Là các thành phần mà các lệnh sử dụng để thực hiện lệnh.

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.

5.2. Tập lệnh của CPU

• 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 và 80286. Cho nên các tập lệnh của 8086, 80286 đều áp dụng được cho 80386 với độ dài các thanh ghi là 32-bit thay vì 16-bit như trước.

50 | P a g e

Page 51: Đề tài VXL assembly

Chúng ta có các nhóm lệnh sau:

1. Nhóm lệnh di chuyển dữ liệu

2. Nhóm lệnh số học

3. Nhóm lệnh logic

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

5. Nhóm lệnh rẽ nhánh

6. Nhóm lệnh vào ra cổng

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

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

Trong nhóm này ta quan tâm một số lệnh cơ bản sau: MOV, MOVSB, MOVSW XCHG, PUSH, POP

a) Lệnh MOV: Move a Word or Byte (chuyển 1 từ hay 1 byte)

MOV đích, nguồn

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ụ:

MOV ax,word1

Trước lệnh Mov Ax có nội dung : 0002h

Word1 : 0008h

Sau lệnh Mov Ax có nội dung : 0008h

Word1 : 0008h

Một số chú ý:

- Toán hạng đích không thể là một hằng số

- 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

51 | P a g e

Page 52: Đề tài VXL assembly

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)

XCHG đích, nguồn

Tráo đổi nội dung của toán hạng đích và toán hạng nguồn cho nhau.

Ví dụ: XCHG AX,BX

Trước lệnh XCHG AX có nội dung : 153Eh

BX : 28FCh

Sau lệnh Mov AX có nội dung : 28FCh

BX : 153Eh

Một số chú ý:

- 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ánhạ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

đổ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

52 | P a g e

Page 53: Đề tài VXL assembly

5.2.2. 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

ADD ax,word1

Ax= ax+word1

b) SUB: Subtraction (trừ)

Sub đích,nguồn

Trừ nội dung của toán hạng đích cho toán hạng nguồn, kết quả chứa trong toán hạng đích.

Ví dụ: MOV BX, F0h

SUB BX,50h

BX=F0h-50h=A0h

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

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)

53 | P a g e

Page 54: Đề tài VXL assembly

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.

5.2.3. 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

ví dụ: AND AX,0Fh

b) OR : hoặc hai toán hạng

OR đí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 để 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 đó

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

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

54 | P a g e

Page 55: Đề tài VXL assembly

0

CF

LỆNH SHL

0

CF

LỆNH SHR

015

CF

LỆNH ROL

MSB MSB

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

ROL đích,CL

Dịch các bit sang bên trái. bit MSB được đưa vào LSB và cờ CF. muốn quay nhiều

lần thì chứa trong CL

d) ROR:Rotation Right- quay phải

55 | P a g e

Page 56: Đề tài VXL assembly

CF

LỆNH ROR

015

LSB LSB

ROR đích,CL

Dịch các bit sang bên phải. Bit LSB được đưa vào MSB và cờ CF. muốn quay nhiều lần thì chứa trong CL

* Các lệnh quay qua cờ nhớ: RCL, RCR.

* Các ví dụ đưa ra và yêu cầu tìm giá trị của đích và CF sau CL lần dịch, quay.

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

a) Nhảy có đìêu kiện

Jxxx nhãn_đích

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

Kí hiệu Chức năng Điều kiện 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 Cf=0

56 | P a g e

Page 57: Đề tài VXL assembly

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

Jb/jnae Nhảy nếu nhỏ hơn

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

Cf=1

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

Zf=0

b) Nhảy không điều kiện

JMP nhãn_đích

Nhãn đích nằm trong cùng đoạn với JMP, vượt xa 126 byte đối với các lệnh nhảy có điều kiện.

5.2.6. Nhóm lệnh vào ra cổng

a) IN: nhập vào từ cổng 1 byte hay 1 word

IN thanhchứa, cổng

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

5.2.7. 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ả.

57 | P a g e

Page 58: Đề tài VXL assembly

Chương 6. Tập lệnh VXL 32bit MIPS

6.1. Tổng quan dòng vi xử lý MIPS

Lịch sử phát triển:

- MIPS (Microprocessor without Interlocked Pipeline Stages) hình thành trên cơ sở

RISC(dạng kiến trúc VXL thu gọn).

- Năm 1981: John L. Hennessy đứng đầu một nhóm bắt đầu một công trình nghiên

cứu về bộ xử lý MIPS đầu tiên tại Stanford University

- Một thiết kế chủ chốt trong MIPS là yêu cầu các câu lệnh phải hoàn thành trong 1

chu kì máy.

- Hãng MIPS Technologies (MIPS Computer Systems)

Các thế hệ của MIPS:

• Ban đầu MIPS là kiến trúc 32 bit, sau này mở rộng ra 64bit.

• MIPS I, MIPS II, MIPS III, MIPS IV, MIPS V, MIPS 32 và MIPS 64. Hiện nay

tồn tại MIPS 32 và MIPS 64.

• Các dòng vi xử lý thương mại MIPS đã được sản xuất:

- R2000 năm 1985

- R3000 năm 1988

- R4000 năm 1991,mở rộng tập lệnh đầy đủ cho 64bit, 100MHz, 8kB.

- R4400 năm 1993,16kB.

- R8000 năm 1994: là thiết kế superscalar đầu tiên của MIPS

58 | P a g e

Page 59: Đề tài VXL assembly

Cấu trúc của một chương trình hợp ngữ MIPS6.2. Cấu trúc của một chương trình hợp ngữ MIPS.data # khai báo biến sau chỉ thị này....text # viết các lệnh sau chỉ thị nàymain: # điểm bắt đầu của chương trình…

Cách khai báo biến Cách khai báo biếntên_biến: kiểu_lưu_trữ giá_trịCác kiểu lưu trữ hỗ trợ: .word, .byte, .ascii, .asciiz, .spaceLưu ý: tên_biến (nhãn) phải theo sau bởi dấu hai chấm (:)Ví dụ:var1: .word 3 # số nguyên 4-byte có giá trị khởi tạo là 3var2: .byte ’a’,’b’ # mảng 2 phần tử, khởi tạo là a và bvar3: .space 40 # cấp 40-byte bộ nhớ, chưa được khởi tạochar_array: .byte 'A':10 # mảng 10 ký tự được khởi tạo là 'A', có thể thay 'A' bằng 65int_array: .word 0:30 # mảng 30 số nguyên được khởi tạo là 0

6.3. Các thanh ghi trong MIPS

59 | P a g e

Page 60: Đề tài VXL assembly

Thanh ghi dấu phẩy động

MIPS sử dụng 32 thanh ghi dấu phẩy động để biểu diễn độ chính xác đơn của số thực. Các thanh

ghi này có tên là : $f0 – $f31. Để biểu diễn độ chính xác kép (double precision) thì MIPS sử

dụng sự ghép đôi của 2 thanh ghi có độ chính xác đơn.

60 | P a g e

Page 61: Đề tài VXL assembly

6.4 Cú pháp tổng quát lệnh MIPS và 1 số lệnh MIPS cơ bản

Cú pháp tổng quát lệnh MIPS

<tên-lệnh> <r1>, <r2>, <r3>

− r1: thanh ghi chứa kết quả

− r2: thanh ghi

− r3: thanh ghi hoặc hằng số

Một số lệnh MIPS cơ bản

Ghi chú:

• Rd: thanh ghi đích, Rs, Rt: thanh ghi nguồn.

• các lệnh màu xanh là các lệnh giả (pseudo instructions).

Lệnh Load / Store

Đây là các lệnh duy nhất được phép truy xuất bộ nhớ RAM trong tập lệnh của

MIPS.

61 | P a g e

Page 62: Đề tài VXL assembly

Nhóm lệnh số học

Nhóm lệnh nhảy

62 | P a g e

Page 63: Đề tài VXL assembly

System Call:

Lệnh syscall làm treo sự thực thi của chương trình và chuyển quyền điều

khiển cho HĐH (được giả lập bởi MARS). Sau đó, HĐH sẽ xem giá trị thanh ghi

$v0 để xác định xem chương trình muốn nó làm việc gì.

Bảng các system call

Stack

63 | P a g e

Page 64: Đề tài VXL assembly

Stack (ngăn xếp) là vùng nhớ đặc biệt được truy cập theo cơ chế “vào trước

ra sau” (LIFO – Last In First Out), nghĩa là dữ liệu nào đưa vào sau sẽ được lấy

ra trước.

Hình dưới là cấu trúc stack trong bộ nhớ, mỗi phần tử có kích thước một word

(32-bit).

Thanh ghi $sp đóng vai trò là con trỏ ngăn xếp (stack pointer), luôn chỉ đến

đỉnh của stack. Stack phát triển theo chiều giảm của địa chỉ vùng nhớ (đỉnh

của stack luôn có địa chỉ thấp).

64 | P a g e

Page 65: Đề tài VXL assembly

Hai thao tác cơ bản trong stack là push (đưa một phần tử vào stack) và pop

(lấy một phần tử ra khỏi stack). Cơ chế như sau:

• push: giảm $sp đi 4, lưu giá trị vào ô nhớ mà $sp chỉ đến.

Ví dụ: push vào stack giá trị trong $t0

subu $sp, $sp, 4

sw $t0, ($sp)

• pop: copy giá trị trong vùng nhớ được chỉ đến bởi $sp, cộng 4 vào $sp.

Ví dụ: pop từ stack ra $t0

lw $t0, ($sp)

addu $sp, $sp, 4

65 | P a g e

Page 66: Đề tài VXL assembly

………………………………………………………………………………………………

……………………………………………………………………………………………..

……………………………………………………………………………………………..

……………………………………………………………………………………………..

……………………………………………………………………………………………..

……………………………………………………………………………………………..

……………………………………………………………………………………………..

……………………………………………………………………………………………..

……………………………………………………………………………………………..

……………………………………………………………………………………………..

……………………………………………………………………………………………..

……………………………………………………………………………………………..

……………………………………………………………………………………………..

……………………………………………………………………………………………..

……………………………………………………………………………………………..

……………………………………………………………………………………………..

……………………………………………………………………………………………..

……………………………………………………………………………………………..

……………………………………………………………………………………………..

……………………………………………………………………………………………..

……………………………………………………………………………………………..

……………………………………………………………………………………………..

……………………………………………………………………………………………..

……………………………………………………………………………………………..

……………………………………………………………………………………………..

……………………………………………………………………………………………..

……………………………………………………………………………………………..

66 | P a g e

Page 67: Đề tài VXL assembly

……………………………………………………………………………………………..

……………………………………………………………………………………………..

67 | P a g e