Chương 4 Chương trình và Thực thi Chương trình
7. Chế độ đánh địa chỉ đơn vị lưu trữ
7.1. Quản lý bộ nhớ
Bộ nhớ máy tính được quản lý theo phân đoạn. Bộ nhớ vật lý được quản lý và theo dõi bởi các phân đoạn. Chương trình trong bộ nhớ không ghi một loạt lệnh và dữ liệu liên tục mà được chia thành các mô-đun độc lập: mô-đun mã và dữ liệu, mô-đun ngăn xếp, v.v. Mỗi mô-đun được gọi là một phân đoạn và có một địa chỉ tiêu đề phân đoạn được chỉ định. Trên máy tính 16-bit, mỗi khối có kích thước 64kbyte. Có 4 loại đoạn văn khác nhau:
Một đoạn mã chứa mã chương trình;
Một đoạn dữ liệu chứa dữ liệu của chương trình;
Phân đoạn ngăn xếp chứa thông tin và dữ liệu
Phục vụ thực hiện chương trình con và ngắt;
Phần phụ chứa dữ liệu mở rộng, chuỗi,
nguyen trung dong – phone 0983 410 866
Mỗi phân đoạn ở trên có một địa chỉ cụ thể, được gọi là địa chỉ phân đoạn, được chỉ định bởi hệ điều hành. CPU của máy tính có các thanh ghi đặc biệt để giữ các địa chỉ này nhằm quản lý các tác vụ truy cập, được gọi là các thanh ghi phân đoạn.
Thanh ghi đoạn chứa địa chỉ cơ sở của đoạn, nếu ta dịch chuyển tất cả các bit của thanh ghi này sang trái và thêm 4 số 0 vào bên phải nội dung thì ta được địa chỉ ô nhớ đầu tiên của đoạn. Về mặt toán học, nó đồng nghĩa với công thức tính địa chỉ bắt đầu, như sau:
Mỗi ô trong phần
có một cặp giá trị: địa chỉ phần và địa chỉ offset. Địa chỉ offset chỉ định số thứ tự của vị trí bộ nhớ từ địa chỉ cơ sở của phân đoạn. Cách biểu diễn cặp giá trị dưới dạng (address paragraph):(address offset) được gọi là địa chỉ logic của vị trí bộ nhớ.
Có hai loại thanh ghi offset: thang chuyên dụng chứa offset và các thanh ghi mục đích chung khác. Các thanh ghi offset có thể được coi là “con trỏ” tới các vị trí bộ nhớ trong phân đoạn tương ứng. Thanh ghi đặc biệt để lưu trữ địa chỉ offset được hiển thị trong hình bên dưới:
Thanh ghi con trỏ và chỉ mục đều là thanh ghi 16 bit, có thể định địa chỉ vùng bộ nhớ là 216=65536 đơn vị bộ nhớ (64kbyte). Đó là lý do tại sao mỗi phân đoạn được chỉ định bởi thanh ghi phân đoạn, bắt đầu từ đầu phân đoạn, có kích thước 64kbyte. Nguyên lý sử dụng thanh ghi đoạn và thanh ghi offset để xác định vị trí bộ nhớ cho thấy: nội dung thanh ghiđoạn cao 16 bit, nội dung thanh ghi offset 16 bit thấptrên bus địa chỉ
b15
b 0
thanh ghi đoạn mã cs
thanh ghi đoạn dữ liệu ds
thanh ghi phân đoạn ngăn xếp ss
Đăng ký)
es thanh ghi đoạn mở rộng
Không khó để thấy rằng đối với bus địa chỉ gồm 20 bit địa chỉ, để tính toán địa chỉ vật lý của đơn vị bộ nhớ được xác định bởi nội dung của thanh ghi đoạn và nội dung của thanh ghi offset, chúng ta chuyển nội dung của nó sang còn lại 4 bit của thanh ghi đoạn rồi thực hiện thanh ghi offset Nội dung cộng được thể hiện trong hình bên dưới và phép tính được thể hiện theo công thức sau:
Mỗi thanh ghi con trỏ và chỉ mục được cung cấp một chức năng cụ thể và cùng với thanh ghi đoạn tương ứng, tạo thành địa chỉ logic của đoạn bộ nhớ trong bộ nhớ theo chức năng.
Thanh ghi chỉ mục nguồn si và thanh ghi chỉ mục đích di đều là các thanh ghi
viết để thao tác chuỗi, string .
7.2. Quản lý bộ nhớ và chế độ định địa chỉ trong cpu 8086
A. Phương pháp quản lý bộ nhớ trong cpu8086:
Bus địa chỉ của p8086 dài 20 bit và có thể xử lý
220 = 1m ô nhớ có thể được xử lý (mỗi ô trong số 20 bit kết hợp “0” hoặc “1”
Địa chỉ xác định vị trí của đơn vị lưu trữ). Do đơn vị lưu trữ trong bộ vi xử lý là 1 byte nên nói cách khác, không gian lưu trữ mà μp8086 có thể quản lý là 1mbyte.
b15
b 0
thanh ghi con trỏ lệnh ip
thanh ghi con trỏ ngăn xếp sp
thanh ghi con trỏ cơ sở bp
si thanh ghi chỉ mục nguồn
Liệu chỉ mục đích có được đăng ký hay không
b15 b0
Cặp thanh ghi đoạn mã cs cs và con trỏ lệnh ip chứa địa chỉ ip logic cs:ip, đóng vai trò của bộ đếm chương trình ss. Cặp thanh ghi đoạn ngăn xếp ss và con trỏ ngăn xếp ss:sp chứa sp logic địa chỉ được sử dụng làm chức năng con trỏ ngăn xếp
…
.
.. ..
nguyen trung dong – phone 0983 410 866
Các thanh ghi của µp8086 chỉ dài 16 bit, vì vậy nếu sử dụng địa chỉ thanh ghi, nó chỉ có thể quản lý 216 đơn vị bộ nhớ hoặc 64kb. Để giải quyết vấn đề quản lý 1mbyte hoặc 1.048.576 byte, µp8086 sử dụng bus địa chỉ rộng 20 bit để định địa chỉ bộ nhớ thông qua nội dung của hai thanh ghi 16 bit như sau:
Thông qua lập trình, không gian địa chỉ được chia thành
Bộ nhớ
phân đoạn (phân đoạn), kích thước cố định là 64kbyte, được gọi là đơn vị
logic của bộ nhớ. Mỗi phân đoạn bao gồm các ô nhớ liền kề, độc lập, được định vị
Tách biệt nhau. Mỗi phân đoạn được lập trình viên gán một địa chỉ phân đoạn, đó là
Địa chỉ của đơn vị bộ nhớ đầu tiên trong phân đoạn, còn được gọi là địa chỉ cơ sở. Giá trị của các địa chỉ đoạn liền kề phải cách nhau ít nhất 16 byte. Các phân đoạn có thể liền kề, tách biệt hoặc chồng chéo. giá trị offset sẽ được sử dụng trong đoạn văn
(offset), nghĩa là khoảng cách từ địa chỉ phân đoạn đến đơn vị bộ nhớ nằm trong phân đoạn. Một cặp địa chỉ đoạn và giá trị bù, [segment]:[offset], được gọi là address
Logic. Địa chỉ logic cho phép định vị chính xác một byte bộ nhớ trong
Không gian địa chỉ. Địa chỉ phân đoạn được lưu trữ trong thanh ghi phân đoạn và giá trị dịch chuyển được lưu trữ trong mục đích chung, con trỏ hoặc thanh ghi chỉ mục.
Về cơ bản, thanh ghi đoạn chứa 16 bit trên của 20 bit địa chỉ, giá trị dịch chuyển là 16 bit dưới và sự khác biệt của 4 bit đã được đơn vị địa chỉ bit giải quyết, như trong Hình 2 . 18: Dịch thanh ghi đoạn sang trái 4 bit (tương đương nhân với 16, cộng với giá trị dịch chuyển offset trong thanh ghi đa năng để tính địa chỉ vật lý của đơn vị bộ nhớ. Như hình trên, công thức tương ứng là “shift left and add” và thao tác có thể được trình bày Như minh họa trong hình bên dưới, phép tính này được thực hiện bởi đơn vị giao diện bus (biu –
Đơn vị giao diện xe buýt)
Địa chỉ vật lý=10h x (đoạn)+(bù ))
a19a18a17a16a15a14 a13a12a11a10a9a8 b>a7a6a5a4a3a2 a1a0
a15a14a13a12a11a10a9a8a7a6a5a4 b>a3a2a1a0
a19a18a17a16a15a14 a13a12a11a10a9a8 b>a7a6a5a4a3a2 a1a0
16 bit trên của 20 bit địa chỉ: a4 a19
16 bit thấp của 20 bit địa chỉ
Tổng cộng 20 bit: địa chỉ vật lý của đơn vị bộ nhớ
Thanh ghi phân đoạn là thanh ghi 16 bit chịu trách nhiệm xác định phân đoạn của đơn vị bộ nhớ và thanh ghi mục đích chung cũng là thanh ghi 16 bit. Vì vậy, các thanh ghi phân đoạn có thể chỉ định 216 = 65.536 vị trí bộ nhớ (64k), mỗi phân đoạn có 64kbyte. Vì vậy, bộ vi xử lý µp8086 có thể giải quyết tối đa 64k x 64kbyte = 4gbyte bộ nhớ.
Thanh ghi đoạn mã cs xác định đoạn bộ nhớ chương trình sẽ được thực thi bởi lệnh tiếp theo và thanh ghi con trỏ ip chứa địa chỉ offset của lệnh tiếp theo. Cặp cs:ip cấu thành địa chỉ logic của lệnh tiếp theo trong trình tự thực hiện của chương trình. Độ dài từ hướng dẫn cho họ 80×86 có thể nằm trong khoảng từ 1 byte đến tối đa là 15 byte. Khi lệnh được thực thi, giá trị của con trỏ ip do đó sẽ được tăng lên theo số byte của từ lệnh. Nên nhớ rằng nội dung của thanh ghi con trỏ lệnh ip cùng với nội dung của thanh ghi đoạn cs xác định địa chỉ của vị trí bộ nhớ của lệnh tiếp theo trong trình tự thực hiện chương trình.
B. Chế độ định địa chỉ trực tiếp
1. Chế độ định địa chỉ của thanh ghi: toán hạng là
access là nội dung của thanh ghi cpu.
Ví dụ mov ax,bx ; Chuyển đổi nội dung của toán hạng nguồn (nội bộ
dung lượng thanh ghi) bx đến toán hạng đích ax. Nội dung của thanh ghi bx được giữ nguyên.
2. Chế độ định địa chỉ ngay lập tức: toán hạng
Thời gian là dữ liệu 8 bit hoặc 16 bit chứa trong lệnh, có thể được sử dụng làm toán hạng nguồn hoặc hằng số. Toán hạng ngay lập tức được lưu trữ trong mã trong bộ nhớ, được truy xuất cùng với lệnh ngay sau lệnh và được ghi vào hàng đợi lệnh pq, vì vậy truy cập nhanh hơn truy cập toán hạng từ tập lệnh.
ví dụ: mov al, 12h ; nạp 12h vào thanh ghi al
c. Chế độ nhắm mục tiêu gián tiếp
Khác với hai vị trí trên, các toán hạng trong đoạn bộ nhớ dữ liệu được CPU truy cập thông qua bus dữ liệu. Chúng ta biết rằng địa chỉ vật lý của đơn vị lưu trữ được tính toán dựa trên nội dung thanh ghi đoạn và phần bù, như thể hiện trong Hình ii. 18. Giá trị offset của một toán hạng trong đoạn nhớ do đơn vị thực thi lệnh eu tính toán được gọi là địa chỉ hiệu dụng ea (effect address) của toán hạng. Đơn vị thực hiện lệnh có thể tính ea theo mô tả địa chỉ trong toán hạng nguồn lệnh. Ngoài các giá trị trực tiếp hoặc nội dung thanh ghi cơ sở
nguyen trung dong – phone 0983 410 866
hoặc thanh ghi chỉ mục, nếu cần có thể thêm giá trị 8 bit hoặc 16 bit, giá trị này được gọi là giá trị dịch chuyển dp (độ dịch chuyển).
Thông tin chi tiết như sau:
Định địa chỉ trực tiếp: Toán hạng chứa địa chỉ của một số trong lệnh. Địa chỉ đoạn hiện tại nằm trong thanh ghi đoạn ds
Ví dụ mov cx,[1435h] ;
Di chuyển nội dung của đơn vị bộ nhớ có địa chỉ offset là 1435h trong đoạn dữ liệu hiện tại vào thanh ghi cx
đăng ký định vị gián tiếp(đăng ký gián tiếp): địa chỉ hợp lệ
ea là nội dung của một trong các thanh ghi bx, bp, si hoặc di
Ví dụ mov ax, [si] ;
Di chuyển nội dung của đơn vị bộ nhớ đoạn dữ liệu hiện tại sang địa chỉ offset của thanh ghi si
Địa chỉ của đơn vị bộ nhớ đầu tiên trong đoạn được xác định bởi nội dung của thanh ghi đoạn
Vị trí của đơn vị bộ nhớ được xác định bởi nội dung của thanh ghi đoạn và nội dung của thanh ghi offset
Vị trí của đơn vị bộ nhớ được truy cập. Địa chỉ được xác định bởi nội dung của thanh ghi đoạn, nội dung của thanh ghi offset và giá trị dịch chuyển
Độ lệch hoặc độ lệch của địa chỉ bộ nhớ so với địa chỉ cơ sở
Số lượng dịch chuyển, giá trị dịch chuyển, độ lệch ô được chỉ định bởi độ lệch nội dung thanh ghi đoạn
Sau khi dịch trái 4 bit, nó là địa chỉ đầu tiên của đoạn: địa chỉ nền
Bộ nhớ có địa chỉ được xác định bởi nội dung của đoạn và các thanh ghi bù
Một đơn vị bộ nhớ có địa chỉ được xác định bởi thanh ghi đoạn, thanh ghi bù và giá trị dịch chuyển dp
Hình ảnh hai. 21 mô tả cách xác định địa chỉ vật lý của đơn vị bộ nhớ được truy cập
A
Địa chỉ cơ bản (dựa trên địa chỉ): ea là nội dung của thanh ghi bx hoặc bp cộng với giá trị dịch chuyển dp (nếu có)
Ví dụ mov [bx] + dp, al ; sử dụng
để di chuyển nội dung của thanh ghi al và vị trí bộ nhớ
Đoạn bộ nhớ gia tăng địa chỉ
Được công nhận bởi nội dung cs
và ip
kích thước 64kb
Được xác định bởi nội dung(ds)*10h +(bù nội dung)
bởi ds 19 0 15 0 15 0 cs ds ss es 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Địa chỉ vật lý Địa chỉ offset 20 bit (mar)
Địa chỉ cao
Địa chỉ thấp
Phương pháp đồ họa Phương pháp quản lý bộ nhớ Thông qua phân đoạn, cáchXác định địa chỉ vật lý i> Bộ nhớ vị trí từ địa chỉ logic.
nguyen trung dong – phone 0983 410 866
Phần bù địa chỉ bằng tổng nội dung của thanh ghi bx và giá trị dịch chuyển dp
Địa chỉ được lập chỉ mục (địa chỉ được lập chỉ mục): ea là nội dung của thanh ghi si hoặc di cộng với giá trị dịch chuyển dp (nếu có)
Ví dụ mov al,[si] + dp ; Di chuyển nội dung của đơn vị lưu trữ có địa chỉ offset bằng tổng nội dung của thanh ghi si và giá trị dịch chuyển dp sang thanh ghi al
Chỉ mục và vị trí cơ sở (địa chỉ chỉ mục): ea là tổng nội dung
Nếu có, hãy sử dụng thanh ghi cơ sở, thanh ghi chỉ mục và giá trị dịch chuyển dp, ví dụ: mov ah,[bx][si] + dp ; đặt địa chỉ offset bằng tổng của thanh ghi bx, thanh ghi si và giá trị dịch chuyển dp Nội dung của bộ nhớ vị trí được chuyển đến thanh ghi ah
Định địa chỉ chuỗi: dành riêng cho việc xử lý chuỗi. CPU sẽ tự động sử dụng thanh ghi chỉ số nguồn si và thanh ghi chỉ số đích di để trỏ đến byte tiếp theo
Ví dụ hoạt hình; di chuyển các chuỗi ký tự, nguồn nằm trong vùng bộ nhớ có địa chỉ bắt đầu là ds:si và đích là vùng bộ nhớ có địa chỉ bắt đầu là ds:di.
Phương pháp đánh địa chỉ là cách kiến trúc máy tính ra lệnh phương pháp xác định địa chỉ của một đối tượng mà các thành phần khác muốn truy cập.
7.3. Biểu diễn lệnh và dữ liệu
Máy tính thường có
Bộ nhớ được chia thành các từ 8 bit, mỗi từ tương ứng với một địa chỉ
Trong ký ức.
Các lệnh có độ dài thay đổi (số bit) nhưng là bội số của 8.
Các từ dữ liệu cũng có độ dài thay đổi (số bit) và cũng
Bội số của 8.
Trong nhiều kiến trúc máy tính, các từ chứa dữ liệu có thể là 16 bit, 32 bit hoặc thậm chí là 64 bit.
7.4. Yêu cầu đối với các phương thức định địa chỉ trong lệnh
Để mô tả một địa chỉ trong một lệnh, cách đơn giản và rõ ràng nhất là cung cấp trực tiếp địa chỉ dưới dạng số nhị phân. Phương pháp này
Được gọi là phương thức định địa chỉ trực tiếp . Ngoài ra, mọi người sử dụng
Sử dụng nhiều phương thức đánh địa chỉ. Phương thức ghi địa chỉ phải đáp ứng các yêu cầu sau:
Rút ngắn phần địa chỉ của lệnh.
Tiện lợi cho người lập trình.
Hỗ trợ hệ thống.
Ví dụ: nếu một máy tính tải nhiều chương trình vào bộ nhớ cùng một lúc và chuyển đổi việc thực thi các chương trình đó thường xuyên, thì để tải và giải phóng bộ nhớ một cách hiệu quả từ nhiều vị trí khác nhau, việc định địa chỉ cho phép các chương trình được tải và thực thi tại vùng nhớ các vị trí khác nhau.
Phương pháp xưng hô
Chúng tôi xem xét các phương pháp đánh địa chỉ phổ biến sau:
Định địa chỉ trực tiếp
Các phương thức định địa chỉ tức thời
Các phương thức định địa chỉ tương đối
Đánh địa chỉ gián tiếp
7.5. Định địa chỉ trực tiếp
Chế độ định địa chỉ trực tiếp là tải địa chỉ trong lệnh trong đơn vị bộ nhớ sau đơn vị bộ nhớ nơi lưu trữ mã lệnh (nghĩa là địa chỉ của đơn vị bộ nhớ lớn hơn 1).
Hãy xem xét ví dụ sau: Giả sử bộ nhớ được tổ chức thành các đơn vị 8 bit. Mã lệnh chiếm 8 bit và là một đơn vị lưu trữ hoàn chỉnh. Các bit địa chỉ của lệnh chiếm vị trí bộ nhớ tiếp theo. Nếu cpu có thể sử dụng 216 từ trong bộ nhớ, thì sẽ mất 2 byte để giải quyết vị trí bộ nhớ. Vì vậy, việc tải một lệnh yêu cầu sử dụng 3 byte hoặc 3 đơn vị bộ nhớ.
Nếu mã lệnh 3ah (lệnh nạp), được nạp vào 8 bit trong đơn vị bộ nhớ 0245h, địa chỉ trong lệnh sẽ ngay lập tức được nạp vào 16 bit trong hai đơn vị bộ nhớ tiếp theo