<< Chapter < Page Chapter >> Page >

Dữ liệu 8 bit được lưu trữ bằng một ô nhớ và địa chỉ của ô nhớ chính là địa chỉ dùng để truy xuất dữ liệu. Dữ liệu nhiều hơn 8 bit được lưu trữ bởi nhiều ô nhớ liên tục nhau. Theo quy ước Intel, byte dữ liệu cao được lưu ở ô nhớ có địa chỉ cao và byte dữ liệu thấp hơn lưu ở ô nhớ có địa chỉ thấp hơn. Khi đó, địa chỉ dùng để truy xuất dữ liệu là địa chỉ của ô nhớ thấp (ô nhớ chứa byte thấp nhất của dữ liệu)

Hình 1.3 mô tả việc tổ chức các dữ liệu có độ dài khác nhau trong bộ nhớ. Giá trị 5Fh (1 byte) được lưu trữ ở địa chỉ 0010h. Giá trị 0A0B1h (2 byte) được lưu trữ bởi 2 ô nhớ có địa chỉ 0015h và 0016h, địa chỉ để truy xuất giá trị này là 0015h. Còn giá trị 0A2B1C0h (3 byte) được lưu trữ bởi 3 ô nhớ 0012h, 0013h và 0014h, do đó địa chỉ truy xuất giá trị ấy là 0012h.

Bộ nhớ Địa chỉ
(A0h là byte cao, B1h là byte thấp) A0h 0016h
Giá trị: 0A0B1h  B1h 0015h
A2h 0014h
(C0h byte thấp nhất, A2h byte cao nhất) B1h 0013h
Giá trị: 0A2B1C0h  C0h 0012h
0011h
Giá trị: 5Fh  5Fh 0010h

Hình 1.3: Tổ chức dữ liệu trong bộ nhớ

1.2.2. sự phân đoạn bộ nhớ trong

CPU 8086 có không gian địa chỉ là 1MB (ứng với 20 bit địa chỉ) Vậy CPU 8086 có thể quản lý bộ nhớ trong là 220 = 1MB. Bộ nhớ 1 MB này được CPU-8086 quản lý bằng nhiều đoạn 64 KB. Các đoạn có thể tách rời hoặc có thể chồng lên nhau.

Mỗi đoạn có một địa chỉ đoạn 16 bit duy nhất, tùy vào mục đích sử dụng đoạn mà địa chỉ đoạn được lưu trữ trong thanh ghi đoạn tương ứng.

Đối với người lập trình, Địa chỉ của ô nhớ trong bộ nhớ được xác định bởi hai thông số 16 bit (gọi là địa chỉ logic): Địa chỉ Đoạn (segment) và địa chỉ độ dời (offset).

Cách viết: Segment : Offset

Địa chỉ vật lý của ô nhớ khi truy xuất sẽ được BIU tự động chuyển đổi từ địa chỉ logic bằng cách dịch trái thanh ghi đoạn bốn bit (tức nhân nội dung của thanh ghi đoạn cho 16) rồi cộng với địa chỉ độ dời. Vì vậy, người lập trình không cần địa chỉ vật lý của ô nhớ mà chỉ cần biết địa chỉ logic của ô nhớ.

Ví dụ: đoạn CS có giá trị là 1002h, địa chỉ độ dời của ô nhớ K trong đoạn CS là 500h (CS:0500h hoặc 1002h:0500h). Khi đó, địa chỉ vật lý của ô nhớ K được tính như sau:

10020h (dịch trái địa chỉ đoạn 4 bit)

+ 0500h (độ dời)

10520h (địa chỉ vật lý)

Trong ví dụ trên, đoạn CS có điểm bắt đầu ở địa chỉ vật lý 10020h. Độ dời 500h là khoảng cách từ địa chỉ của điểm bắt đầu của đoạn CS đến ô nhớ K (xem hình 1.4)

Bộ nhớ Địa chỉ vật lý
10521h
Ô nhớ K  10520h
trong đoạn CS (CS:500h) 1051Fh
 Độ dời 500h tính từ điểm đầu đoạn CS - - - - - - - - - - - - Ô nhớ có độ dời 05h  10025h 501h ô nhớ 10024h 10023h Ô nhớ có độ dời 01h  10022h Ô nhớ có độ dời 0h trong đoạn CS (CS:00h)
10021h
10020h  Điểm đầu đoạn CS
1001Fh

Hình 1.4: Địa chỉ vật lý của ô nhớ K trong đoạn CS

Khi truy xuất ô nhớ, BIU lấy sẽ sử dụng địa chỉ đoạn trong thanh ghi đoạn tương ứng với tính chất của ô nhớ cần truy xuất:

- Ô nhớ là Code (Mã lệnh) thì đoạn tương ứng là CS.

- Ô nhớ là Data (dữ liệu) thì đoạn tương ứng là DS.

- Ô nhớ nằm trên ngăn xếp thì dùng đoạn SS.

- Khi truy xuất chuỗi, DI và SI luôn chứa độ dời của ô nhớ trong đoạn DS hay ES

Khi khởi động, CPU 8086 nhảy đến địa chỉ vật lý cao nhất của bộ nhớ trong (đoạn CS = 0FFFFh và độ dời 0) để lấy lệnh. Địa chỉ này ứng với địa chỉ của ROM-BIOS của bộ nhớ trong nơi chứa chương trình khởi động máy tính.

Get Jobilize Job Search Mobile App in your pocket Now!

Get it on Google Play Download on the App Store Now




Source:  OpenStax, Lập trình hệ thống. OpenStax CNX. Aug 11, 2009 Download for free at http://cnx.org/content/col10882/1.2
Google Play and the Google Play logo are trademarks of Google Inc.

Notification Switch

Would you like to follow the 'Lập trình hệ thống' conversation and receive update notifications?

Ask