Phân đoạn bộ nhớ của 8086

Một phần của tài liệu Bài giảng kỹ thuật vi xử lý (Trang 25 - 27)

1. CẤU TRÚC BÊN TRONG CỦA 8086

1.2Phân đoạn bộ nhớ của 8086

Khối BIU đưa ra trên buýt địa chỉ 20 bít địa chỉ, như vậy 8086 có khả năng phân biệt ra được 220 = 1.048.576 = 1M ô nhớ hay 1Mbyte, vì các bộ nhớ thường tổ chức theo byte. Trong không gian 1Mbyte bộ nhớ cần được chia thành các vùng khác nhau (điều này rất có lợi khi làm việc ở chế độ nhiều người sử dụng hoặc đa nhiệm) để:

 Chứa mã chương trình.

 Chứa dữ liệu và kết quả không gian của chương trình.

 Tạo ra một vùng nhớ đặc biệt gọi là ngăn xếp (stack) dùng vào việc quản lý các thông số của bộ vi xử lý khi gọi chương trình con hoặc trở về từ chương trình con.

Trong thực tế bộ vi xử lý 8086 có các thanh ghi 16 bít liên quan đến địa chỉ đầu của các vùng (các đoạn) kể trên và chúng được gọi là các thanh ghi đoạn (Segment Registers). Đó là thanh ghi đoạn mã CS (Code-Segment), thanh ghi đoạn dữ liệu DS (Data sement), thanh ghi đoạn ngăn xếp SS (Stack segment) và thanh ghi đoạn dữ liệu phụ ES (Extra segment). Các thanh ghi đoạn 16 bít này chỉ ra địa chỉ đầu của bốn đoạn trong bộ nhớ, dung lượng lớn nhất của mỗi đoạn nhớ này là 64 KByte và tại một thời điểm nhất định bộ vi xử lý chỉ làm việc được với bốn đoạn nhớ 64 KByte này. Việc thay đổi giá trị của các thanh ghi đoạn làm cho các đoạn có thể dịch chuyển linh hoạt trong phạm vi không gian 1 Mbyte. Vì vậy các đoạn này có thể nằm cách nhau khi thông tin cần lưu đòi hỏi dung lượng đủ 64 KByte hoặc cũng có thể nằm trùm nhau do có những đoạn không cần dùng hết đoạn dài 64 KByte và vì vậy những đoạn khác có thể bắt đầu

nối tiếp ngay sau đó. Điều này cũng cho phép ta truy nhập vào bất kỳ đoạn nhớ (64 KByte) nào nằm trong toàn bộ không gian 1 MByte.

Nội dung các thanh ghi đoạn sẽ xác định địa chỉ của ô nhớ nằm ở đầu đoạn. Địa chỉ này còn gọi là địa chỉ cơ sở. Địa chỉ của các ô nhớ khác nằm trong đoạn tính được 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), do nó ứng với khoảng lệch địa chỉ của một ô nhớ cụ thể nào đó so với ô đầu đoạn. Độ lệch này được xác định bởi các thanh ghi 16 bít khác đóng vai trò thanh ghi lệch (Offset register) mà ta sẽ được trình bày sau. Cụ thể, để xác định địa chỉ vật lý 20 bít của một ô nhớ nào đó trong một đoạn bất kỳ. CPU 8086 phải dùng đến 2 thanh ghi 16 bít: một thanh ghi để chứa địa chỉ cơ sở, còn thanh kia chứa độ lệch. Từ nội dung của cặp thanh ghi đó tạo ra địa chỉ vật lý theo công thức sau:

Địachỉvậtlý=Thanh_ghi_đọan×16+Thanh_ghi_lệch

Việc dùng 2 thanh ghi để ghi nhớ thông tin về địa chỉ thực chất để tạo ra một loại địa chỉ gọi là địa chỉ logic và được ký hiệu như sau:

Thanh_ghi_đoạn: Thanh_ghi_lệch hay segment: offset

Địa chỉ kiểu segment: offset là logic vì nó tồn tại dưới dạng giá trị của các thanh ghi cụ thể bên trông CPU và ghi cần thiết truy cập ô nhớ nào đó thì nó phải được đổi ra địa chỉ vật lý để rồi được đưa lên buýt địa chỉ. Việc chuyển đổi này do một bộ tạo địa chỉ thực hiện (phần tử  trên Hình 2-1).

Ví dụ: cặp CS:IP sẽ chỉ ra địa chỉ của lệnh sắp thực hiện trong đoạn mã. Tại một thời điểm nào đó ta có CS = F00H và IP = FFF0H thì

CS:IP~F000Hx16 + FFF0H = F000H + FFF0H = FFFF0H

Do tổ chức như vậy nên dẫn đến tính đa trị của các thanh ghi đoạn và thanh ghi lệch trong địa chỉ logic ứng với một địa chỉ vật lý. Từ một địa chỉ vật lý ta có thể tạo ra các giá trị khác nhau của thanh ghi đoạn và thanh ghi lệch

Ví dụ: Địa chỉ vật lý 12345H có thể được tạo ra từ các giá trị: Thanh ghi đoạn Thanh ghi lệch

1000H 2345H

1200H 0345H

CHƯƠNG 2. BÔ XỬ LÍ INTEL 8086/8088

Một phần của tài liệu Bài giảng kỹ thuật vi xử lý (Trang 25 - 27)