Hệ thống nhúng - Chế độ địa chỉ

An addressing modeđề cập đến cách bạn đang giải quyết một vị trí bộ nhớ nhất định. Có năm cách khác nhau hoặc năm chế độ địa chỉ để thực hiện lệnh này như sau:

  • Chế độ giải quyết ngay lập tức
  • Chế độ địa chỉ trực tiếp
  • Đăng ký chế độ địa chỉ trực tiếp
  • Đăng ký chế độ địa chỉ gián tiếp
  • Chế độ đánh chỉ mục

Chế độ giải quyết ngay lập tức

Hãy bắt đầu với một ví dụ.

MOV A, #6AH

Nói chung, chúng ta có thể viết,

MOV A, #data

Nó được gọi là immediate vì dữ liệu 8-bit được chuyển ngay lập tức đến bộ tích lũy (toán hạng đích).

Hình minh họa sau đây mô tả hướng dẫn trên và cách thực hiện của nó. Opcode 74H được lưu tại địa chỉ 0202. Dữ liệu 6AH được lưu tại địa chỉ 0203 trong bộ nhớ chương trình. Sau khi đọc opcode 74H, dữ liệu tại địa chỉ bộ nhớ chương trình tiếp theo được chuyển đến bộ tích lũy A (E0H là địa chỉ của bộ tích lũy). Vì lệnh có kích thước 2 byte và được thực hiện trong một chu kỳ, bộ đếm chương trình sẽ được tăng thêm 2 và sẽ trỏ đến 0204 của bộ nhớ chương trình.

Note- Ký hiệu '#' trước 6AH cho biết toán hạng là dữ liệu (8 bit). Trong trường hợp không có '#', số thập lục phân sẽ được lấy làm địa chỉ.

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

Đây là một cách khác để giải quyết một toán hạng. Ở đây, địa chỉ của dữ liệu (dữ liệu nguồn) được đưa ra dưới dạng một toán hạng. Hãy lấy một ví dụ.

MOV A, 04H

Ngân hàng đăng ký # 0 (thanh ghi thứ 4) có địa chỉ 04H. Khi lệnh MOV được thực hiện, dữ liệu được lưu trữ trong thanh ghi 04H được chuyển đến bộ tích lũy. Khi thanh ghi 04H giữ dữ liệu 1FH, 1FH được chuyển đến bộ tích lũy.

Note- Chúng tôi đã không sử dụng '#' trong chế độ địa chỉ trực tiếp, không giống như chế độ ngay lập tức. Nếu chúng tôi đã sử dụng '#', giá trị dữ liệu 04H sẽ được chuyển đến bộ tích lũy thay vì 1FH.

Bây giờ, hãy xem hình minh họa sau đây. Nó cho biết cách thực hiện lệnh.

Như trong hình minh họa ở trên, đây là một lệnh 2 byte, cần 1 chu kỳ để hoàn thành. PC sẽ được tăng thêm 2 và sẽ trỏ đến 0204. Mã lựa chọn cho lệnh MOV A, địa chỉ là E5H. Khi lệnh tại 0202 được thực thi (E5H), bộ tích lũy sẽ được kích hoạt và sẵn sàng nhận dữ liệu. Sau đó PC chuyển đến địa chỉ tiếp theo là 0203 và tra cứu địa chỉ của vị trí 04H nơi chứa dữ liệu nguồn (được chuyển sang bộ tích lũy). Vào lúc 04 giờ, bộ điều khiển tìm thấy dữ liệu 1F và chuyển nó đến bộ tích lũy và do đó việc thực thi được hoàn thành.

Đăng ký chế độ địa chỉ trực tiếp

Trong chế độ định địa chỉ này, chúng tôi sử dụng trực tiếp tên thanh ghi (như toán hạng nguồn). Hãy để chúng tôi cố gắng hiểu với sự trợ giúp của một ví dụ.

MOV A, R4

Tại một thời điểm, các thanh ghi có thể nhận các giá trị từ R0 đến R7. Có 32 thanh ghi như vậy. Để sử dụng 32 thanh ghi chỉ với 8 biến để địa chỉ các thanh ghi, các ngân hàng thanh ghi được sử dụng. Có 4 ngân hàng thanh ghi được đặt tên từ 0 đến 3. Mỗi ngân hàng bao gồm 8 thanh ghi có tên từ R0 đến R7.

Tại một thời điểm, có thể chọn một ngân hàng đăng ký duy nhất. Việc lựa chọn một ngân hàng đăng ký được thực hiện thông quaSpecial Function Register (SFR) được đặt tên Processor Status Word(PSW). PSW là một SFR 8 bit trong đó mỗi bit có thể được lập trình theo yêu cầu. Các bit được chỉ định từ PSW.0 đến PSW.7. PSW.3 và PSW.4 được sử dụng để chọn các ngân hàng đăng ký.

Bây giờ, hãy xem hình minh họa sau để hiểu rõ hơn về cách thức hoạt động của nó.

Opcode EC được sử dụng cho MOV A, R4. Opcode được lưu trữ tại địa chỉ 0202 và khi nó được thực thi, điều khiển sẽ chuyển trực tiếp đến R4 của ngân hàng đăng ký được tôn trọng (được chọn trong PSW). Nếu ngân hàng đăng ký # 0 được chọn, thì dữ liệu từ R4 của ngân hàng đăng ký # 0 sẽ được chuyển đến bộ tích lũy. Ở đây 2F được lưu trữ lúc 04H. 04H đại diện cho địa chỉ R4 của ngân hàng đăng ký # 0.

Chuyển động dữ liệu (2F) được tô đậm. 2F được chuyển đến bộ tích lũy từ vị trí bộ nhớ dữ liệu 0C H và được hiển thị dưới dạng đường chấm. 0CH là vị trí địa chỉ của thanh ghi 4 (R4) của ngân hàng thanh ghi số 1. Hướng dẫn trên là 1 byte và yêu cầu 1 chu kỳ để thực hiện hoàn chỉnh. Điều đó có nghĩa là, bạn có thể tiết kiệm bộ nhớ chương trình bằng cách sử dụng chế độ định địa chỉ trực tiếp đăng ký.

Đăng ký chế độ địa chỉ gián tiếp

Trong chế độ định địa chỉ này, địa chỉ của dữ liệu được lưu trữ trong thanh ghi dưới dạng toán hạng.

MOV A, @R0

Ở đây giá trị bên trong R0 được coi là địa chỉ, địa chỉ này chứa dữ liệu được chuyển đến bộ tích lũy. Example: Nếu R0 có giá trị 20H và dữ liệu 2FH được lưu trữ tại địa chỉ 20H, thì giá trị 2FH sẽ được chuyển đến bộ tích lũy sau khi thực hiện lệnh này. Xem hình minh họa sau đây.

Vì vậy, mã lựa chọn cho MOV A, @R0là E6H. Giả sử rằng ngân hàng thanh ghi # 0 được chọn, R0 của ngân hàng thanh ghi # 0 giữ dữ liệu 20H. Điều khiển chương trình di chuyển đến 20H nơi nó định vị dữ liệu 2FH và nó chuyển 2FH đến bộ tích lũy. Đây là lệnh 1 byte và bộ đếm chương trình tăng lên 1 và chuyển đến 0203 của bộ nhớ chương trình.

Note- Chỉ R0 và R1 được phép tạo lệnh định địa chỉ gián tiếp thanh ghi. Nói cách khác, người lập trình có thể tạo một lệnh bằng cách sử dụng @ R0 hoặc @ R1. Tất cả các ngân hàng đăng ký đều được phép.

Chế độ lập chỉ mục

Chúng tôi sẽ lấy hai ví dụ để hiểu khái niệm về chế độ địa chỉ được lập chỉ mục. Hãy xem các hướng dẫn sau:

MOVC A, @A+DPTR

MOVC A, @A+PC

trong đó DPTR là con trỏ dữ liệu và PC là bộ đếm chương trình (cả hai đều là thanh ghi 16 bit). Hãy xem xét ví dụ đầu tiên.

MOVC A, @A+DPTR

Toán hạng nguồn là @ A + DPTR. Nó chứa dữ liệu nguồn từ vị trí này. Ở đây chúng tôi đang thêm nội dung của DPTR với nội dung hiện tại của bộ tích lũy. Việc bổ sung này sẽ cung cấp một địa chỉ mới là địa chỉ của dữ liệu nguồn. Dữ liệu được trỏ bởi địa chỉ này sau đó sẽ được chuyển đến bộ tích lũy.

Mã opcode là 93H. DPTR có giá trị 01FE, trong đó 01 nằm trong DPH (8 bit cao hơn) và FE nằm trong DPL (8 bit thấp hơn). Bộ tích lũy có giá trị 02H. Sau đó, một phép cộng 16 bit được thực hiện và 01FE H + 02H cho kết quả là 0200 H. Dữ liệu tại vị trí 0200H sẽ được chuyển đến bộ tích lũy. Giá trị trước đó bên trong bộ tích lũy (02H) sẽ được thay thế bằng dữ liệu mới từ 0200H. Dữ liệu mới trong bộ tích lũy được đánh dấu trong hình minh họa.

Đây là lệnh 1 byte với 2 chu kỳ cần thiết để thực thi và thời gian thực hiện lệnh này là cao so với các lệnh trước đó (tất cả đều là 1 chu kỳ).

Ví dụ khác MOVC A, @A+PChoạt động theo cách tương tự như ví dụ trên. Thay vì thêm DPTR với bộ tích lũy, ở đây dữ liệu bên trong bộ đếm chương trình (PC) được thêm vào bộ tích lũy để lấy địa chỉ đích.