Với mỗi bộ nhớ (1EPROM hay 1 RAM) để vi xử lý có thể truy xuất hết 8 Kbyte bộ nhớ thì phải tiến hành kết nối 13 đường địa chỉ A12A11A10A9A8A7A6A5A4A3A2A1A0 của vi xử lý đến 13 đường địa chỉ A12A11A10A9A8A7A6A5A4A3A2A1A0 của bộ nhớ. do đó tất cả 13 đường địa chỉ của EPROM và RAM đều được nối với 13 đường địa chỉ của vi xử lý. để truyền được tín hiệu với nhau thì các đường dữ liệu D7 – D0 của vi xử lý cũng phải được kết nối với các đường dữ liệu D7 – D0 của từng bộ nhớ. Đường tín hiệu điều khiển RD\ của vi xử lý được kết nối với ngõ vào OE\ của EPROM và RAM.
Nếu chỉ như vậy thì khi vi xử lý gởi một địa chỉ ra để truy xuất thì các bộ nhớ đều nhận được địa chỉ này và sẽ cùng gởi dữ liệu ra hoặc cùng nhận dữ liệu vào. Như vậy dữ liệu mà vi xử lý nhận được sẽ không biết của ô nhớ nào. Vấn đề được đặt ra là bằng cách
Vi xử lý Bộ nhớ ROM Bộ nhớ RAM Bus địa chỉ Bus dữ liệu Bus điều khiển
nào để vi xử lý truy xuất chính xác từng ô nhớ yêu cầu. Công việc này được giải quyết bằng cách thiết kế thêm phần giải mã địa chỉ để cho phép hoặc không cho phép bộ nhớ nào hoạt động.
Riêng đối với bộ nhớ RAM vì RAM là bộ nhớ đọc – ghi nên phải nối thêm đường WR\ của vi xử lý tới đường WR\ của RAM.
Sơ đồ mạch giải mã bộ nhớ:
Hình 1.10 : Sơ đồ mạch giải mã bộ nhớ
đến CE\ của EPROM đến CS\ của RAM A13 A14 A15 A B C O0\ O1\ O2\ O3\ O4\ O5\ O6\ O7\ E3 E1\ E2\
0 1 d d d s s s
CHƯƠNG II: GIỚI THIỆU TẬP LỆNH CỦA VI XỬ
LÝ 8085
I. NHÓM LỆNH DI CHUYỂN 8 BIT: 1. Lệnh truyền dữ liệu giữa các thanh ghi:
+ Cú pháp: MOV d, s
• s (source): tượng trưng cho các thanh ghi phát.
• d (destination): tượng trưng cho
thanh nhận.
+ Mã đối tượng:
+ Các bit ddd và sss tra ở BẢNG 2.1 cuối tập lệnh.
+ Ý nghĩa: chuyển nội dung thanh ghi s vào thanh ghi d, nội dung thanh ghi s vẫn còn. + Lệnh này chiếm 1 byte, số chu kỳ xung clock = 4.
+ Thanh ghi trạng thái không thay đổi. (Tương tự cho các lệnh khác).
2. Lệnh chuyển dữ liệu thanh ghi vào ô nhớ: Cú pháp: MOV M, s
3. Lệnh chuyển dữ liệu từ ô nhớ vào thanh ghi: Cú pháp: MOV d, M
4. Lệnh truyền tức thời dữ liiệu 8 bit vào thanh ghi: Cú pháp: MVI d, D8
5. Lệnh truyền tức thời dữ liệu 8 bit vào ô nhớ: Cú pháp: MVI M, D8
II. NHÓM LỆNH TĂNG GIẢM 8 BIT: 1. Lệnh tăng nội dung thanh ghi:
+ Cú pháp: INR d + Mã đối tượng:
+ Ý nghĩa: Lệnh này tăng nội dung thanh ghi lên một đơn vị. + Lệnh nầy chiếm 1 byte , số chu kỳ xung clock = 4.
+ Lệnh nầy ảnh hưởng đến thanh ghi trạng thái trừ bit Cy không ảnh hưởng. (Tượng tự cho các lệnh khác)
2. Lệnh giảm nội dung thanh ghi: Cú pháp: DCR d
3. Lệnh tăng nội dung ô nhớ: Cú pháp: INR M
4. Lệnh giảm nội dung ô nhớ: Cú pháp: DCR M
1 0 0 0 0 s s s
1 0 0 0 1 s s s
III. NHÓM LỆNH SỐ HỌC GIỮA THANH GHI A VÀ THANH GHI 1. Lệnh cộng thanh ghi:
+ Cú pháp: ADD s
+ Mã đối tượng:
+ Ý nghĩa: nội dung thanh ghi A được cộng với nội dung thanh ghi s, kết quả chứa trong thanh ghi A , nội dung thanh ghi s vẫn còn.
+ Lệnh này chiếm một byte, số chu kỳ xung clock = 4. + Lệnh này ảnh hưởng đến thanh ghi trạng thái.
2. Lệnh cộng thanh ghi có số nhớ ban đầu: + Cú pháp: ADC s
+ Mã đối tượng:
+ Ý nghĩa: nội dung thanh ghi A được cộng với nội dung thanh ghi s cộng với bit Cy, kết quả chứa trong thanh ghi A, nội dung thanh ghi s vẫn còn.
+ Lệnh nầy chiếm 1 byte, số chu kỳ xung clock = 4. + Lệnh nầy ảnh hưởng đến thanh ghi trạng thái. (Tương tự cho các lệnh khác)
3. Lệnh trừ thanh ghi: Cú pháp: SUB s
4. Lệnh trừ thanh ghi có số nhớ ban đầu: Cú pháp: SBB s
5. Lệnh and với thanh ghi: Cú pháp: ANA s
6. Lệnh Ex-or với thanh ghi: Cú pháp: XRA s
7. Lệnh or với thanh ghi: Cú pháp: ORA s
8. Lệnh so sánh với thanh ghi: Cú pháp: CMP s
IV. NHÓM LỆNH SỐ HỌC GIỮA Ô NHỚ VỚI THANH GHI A: 1. Lệnh cộng với ô nhớ:
+ Cú pháp: ADD M + Mã đối tượng:
+ Ý nghĩa: nội dung thanh ghi A được cộng với nội dung ô nhớ có địa chỉ chứa trong cặp thanh ghi HL, kết quả chứa trong thanh ghi A, nội dung ô nhớ không thay đổi.
+ Lệnh nầy chiếm 1 byte, số chu kỳ xung clock = 7. + Lệnh nầy ảnh hưởng đến thanh ghi trạng thái.
2. Lệnh cộng ô nhớ có số nhớ ban đầu: + Cú pháp: ADC M
+ Mã đối tượng:
+ Ý nghĩa: nội dung thanh ghi A được cộng với dung ô nhớ có địa chỉ chứa trong cặp thanh ghi HL, kết quả chứa trong A, nội dung ô nhớ không thay đổi.
+ Lệnh nầy chứa 1 byte, số chu kỳ xung clock = 7. + Lệnh nầy ảnh hưởng đến thanh ghi trạng thái. (Tương tự cho các lệnh khác) 3. Lệnh trừ với ô nhớ: Cú pháp: SUB M 4. Lệnh trừ ô nhớ có số nhớ ban đầu: Cú pháp: SBB M 5. Lệnh and với ô nhớ: Cú pháp: ANA M 6. Lệnh Ex-or với ô nhớ: Cú pháp: XRA M 7. Lệnh or với ô nhớ: Cú pháp: ORA M 8. Lệnh so sánh với ô nhớ: Cú pháp: CMP M
V. NHÓM LỆNH SỐ HỌC GIỮA THANH GHI A VÀ DỮ LIỆU 8 BIT: 1. Lệnh cộng tức thời với dữ liệu 8 bit:
+ Cú pháp: ADI D8 + Mã đối tượng:
+ Ý nghĩa: nội dung thanh ghi A được cộng với dữ liệu 8 bit D8, kết quả chứa trong thanh ghi A.
+ Lệnh nầy chứa 2 byte, số chu kỳ xung clock = 7. + Lệnh nầy ảnh hưởng đến thanh ghi trạng thái.
2. Lệnh cộng tức thời với dữ liệu 8 bit có số nhớ ban đầu: + Cú pháp: ACI D8
+ Mã đối tượng:
+ Ý nghĩa: nội dung thanh ghi A được cộng với dữ liệu 8 bit D8, cộng với bit Cy, kết quả chứa trong thanh ghi A.
+ Lệnh nầy chứa 2 byte, số chu kỳ xung clock = 7. + Lệnh nầy ảnh hưởng đến thanh ghi trạng thái. ( Tương tự cho các lệnh khác )
3. Lệnh trừ tức thời với dữ liệu 8 bit: Cú pháp: SUI D8
1 0 0 0 1 1 1 0
1 1 0 0 0 1 1 0 Dữ liệäu 8 bit D8
0 0 0 0 0 0 0 1 8 bit thấp
8 bit cao
1 1 0 0 0 1 0 1
4. Lệnh trừ tức thời với dữ liệu 8 bit có số nhớ ban đầu: Cú pháp: SBI D8
5. Lệnh and tức thời với dữ liệu 8 bit: Cú pháp: ANI D8
6. Lệnh Ex-or tức thời với dữ liệu 8 bit: Cú pháp: XRI D8
7. Lệnh or tức thời với dữ liệu 8 bit: Cú pháp: ORI D8
8. Lệnh so sánh tức thời với dữ liệu 8 bit: Cú pháp: CPI D8
VI. NHÓM LỆNH NẠP TỨC THỜI CẶP THANH GHI: 1. Lệänh nạp cặp thanh ghi BC:
+ Cú pháp: LXI B, D16 + Mã đối tượng:
+ Ý nghĩa: dữ liệu 16 bit D16 được nạp vào cặp thanh ghi BC. + Lệnh nầy chiếm 3 byte, số chu kỳ xung clock = 10.
+ Không ảnh hưởng đến thanh ghi trạng thái. (Tương tự cho các lệnh khác)
2. Lệnh nạp cặp thanh ghi DE: Cú pháp: LXI D, D16 3. Lệnh nạp cặp thanh ghi HL: Cú pháp: LXI H, D16 4. Lệnh nạp cặp thanh ghi SP: Cú pháp: LXI SP, D16 VII.NHÓM LỆNH PUSH: 1. Lệnh cất cặp thanh ghi BC: + Cú pháp: PUSH B +Mã đối tượng:
+Ý nghĩa: nội dung cặp thanh ghi BC được copy vào ngăn xếp. Nội dung thanh ghi B được cất vào ngăn xếp tại địa chỉ (SP-1), thanh ghi C được cất vào ngăn xếp tại địa chỉ (SP-2), nội dung thanh ghi SP giảm đi 2.
+ Lệnh này chiếm 1 byte, số chu kì xung clock =12. +Lệnh này không ảnh hưởng đến thanh ghi trạng thái. (Tương tự cho các lệnh khác)
2. Lệnh cất cặp thanh ghi DE: Cú pháp: PUSH D
3. Lệnh cất cặp thanh ghi HL: Cú pháp: PUSH H
4. Lệnh cất cặp thanh ghi AF: Cú pháp: PUSH PSW
VIII. NHÓM LỆNH POP:
1. Lệnh chuyển nội dung ngăn xếp vào cặp thanh ghi: + Cú pháp: POP B
+ Mã đối tượng:
+ Ý nghĩa: chuyển nội dung từ ngăn xếp vào cặp thanh ghi BC. Nội dung ngăn xếp có địa chỉ chứa trong SP được chuyển cho thanh ghi C, nội dung của ngăn xếp có địa chỉ (SP+1) được chuyển cho thanh ghi B, sau lệnh POP nội dung của SP tăng lên 2.
+ Lệnh này chiếm một byte, số chu kì clock =12. + Lệnh này không ảnh hưởng đến thanh ghi teạng thái. (Tương tự cho các lệnh khác cùng nhóm).
2. Lệnh chuyển nội dung ngăn xếp vào cặp thanh ghi DE: + Cú pháp: POP D
3. Lệnh chuyển nội dung ngăn xếp vào cặp thanh ghi HL: + Cú pháp: POP H
4. Lệnh chuyển nội dung ngăn xếp vào cặp thanh ghi AF: + Cú pháp: POP PSW
IX. NHÓM LỆNH CỘNG CẶP THANH GHI VỚI CẶP THANH GHI:
1. Lệnh cộng cặp thanh ghi BC: + Cú pháp: DAD B
+ Mã đối tượng:
+ Ý nghĩa: nội dung cặp thanh ghi BC được cộng với cặp thanh ghi HL, kết quả cất trong cặp thanh ghi HL. Thanh ghi L được cộng với C, thanh ghi H được cộng với B.
+ Lệnh này chiếm 1 byte, số chu kỳ clock =10. + Lệnh này chỉ làm ảnh hưởng đến bit trạng thái Cy. Tương tự cho các lệnh cùng nhóm này như sau:
2. Lệnh cộng cặp thanh ghi DE: + Cú pháp: DAD D
3. Lệnh cộng cặp thanh ghi HL: + Cú pháp: DAD H
4. Lệnh cộng cặp thanh ghi SP: + Cú pháp: DAD SP
X.NHÓM LỆNH TĂNG CẶP THANH GHI: 1.Lệnh tăng cặp thanh ghi BC:
+ Cú pháp: INX B + Mã đối tượng:
1 1 0 0 0 0 0 1
0 0 0 0 1 0 0 1
+Ý nghĩa: nội dung cặp thah ghi BC tăng thêm một đơn vị. + Lệnh này chiếm 1 byte, số chu kỳ clock =6.
+ Lệnh này không làm ảnh hưởng đến thanh ghi trạng thái. (Tương tự cho các lệnh khác)
2. Lệnh tăng cặp thanh ghi DE: + Cú pháp: INX D 1. Lệnh tăng cặp thanh ghi HL:
+ Cú pháp: INX H 2. Lệnh tăng cặp thanh ghi SP:
0 0 1 1 0 0 1 0 8 bit thấp
8 bit cao
XI. LỆNH GIẢM CẶP THANH GHI: 1. Lệnh giảm cặp thanh ghi BC:
+ Cú pháp: DCX D + Mã đối tượng:
+ Ý nghĩa: nội dung cặp thanh ghi BC giảm thêm 1 đơn vị. + Lệnh này chiếm 1 byte, số chu kỳ clock=6.
+ Lệnh này không làm ảnh hưởng đến thanh ghi trạng thái. (Tương tự cho các lênh khác)
2. Lệnh giảm cặp thanh ghi DE: + Cú pháp: DCX D
3. Lệnh giảm cặp thanh ghi HL: + Cú pháp: DCX H
4. Lệnh giảm cặp thanh ghi SP: + Cú pháp: DCX SP
XII. NHÓM LỆNH GIÁN TIẾP DÙNG CẶP THANH GHI: 1. Lệnh lưu trữ gián tiếp dùng cặp thanh ghi BC:
+ Cú pháp: STAX B + Mã đối tượng:
+ Ý nghĩa: nội dung thanh gi được lưu trữ gián tiếp vào ô nhớ có địa chỉ chứa trong cặp thanh ghi BC.
+ Lệnh này không ảnh hưỏng đến thanh ghi trạng thái. (Tương tự cho các lênh khác cùng nhóm)
2. Lệnh lưu trữ gián tiếp dùng cặp thanh ghi DE: + Cú pháp: STAX D
3. Lệnh nạp gián tiếp dùng cặp thanh ghi BC: + Cú pháp: LDAX B
+ Mã đối tượng:
+ Ý nghĩa: nội dung ô nhớ có địa chỉ chứa trong cặp thanh ghi BC được chuyển vào thanh ghi A.
(Tương tự cho các lệnh khác)
4. Lệnh lưu trữ gián tiếp dùng cặp thanh ghi DE: + Cú pháp: LDAX D XIII. NHÓM LỆNH TRỰC TIẾP: 1. Lệnh lưu trữ trực tiếp: + Cú pháp: STA ADDR + Mã đối tượng: 0 0 0 0 1 0 1 1 0 0 0 0 0 0 1 0 0 0 0 0 1 0 1 0
0 0 1 0 1 0 1 0 8 bit thấp
8 bit cao
0 0 0 0 0 1 1 1
+ Ý nghĩa: nội dung thanh ghi A được lưu trữ vào ô nhớ có địa chỉ ADDR. + Lệnh này chiếm 3 byte, số chu kỳ clock=13.
+ Lệnh này không ảnh hưởng đến thanh ghi trạng thái.
2. Lệnh nạp trực tiếp:
+ Cú pháp: LDA ADDR + Mã đối tượng:
+ Ý nghĩa: nội dung ô nhớ có địa chỉ là ADDR được chuyển vào thanh ghi A. + Lệnh này chiếm 3 byte, số chu kỳ xung clock =13.
+ Lệnh nầøy không ảnh hưởng đến thanh ghi trạng thái.
3. Lệnh lưu trữ trực iếp cặp thanh ghi: + Cú pháp: SHLD ADDR
+ Mã đối tượng:
+ Ý nghĩa: nội dung cặp thanh ghi HL đựoc lưu vào 2 ô nhớ liên tiếp là ADDR và (ADDR+1). Nội dung thanh ghi L được lưu trữ vào ô nhớ có địa chỉ là ADDR, nội dung của thanh ghi H được lưu trữ vào ô nhớ có địa chỉ là (ADDR+1).
+ Lệnh nầy chiếm 3 byte, số chu kỳ xung clock = 16. + Lệnh nầy không ảnh hưởng đến thanh ghi trạng thái.
4. Lệnh nạp trực tiếp cặp thanh ghi: + Cú pháp: LHLD ADDR + Mã đối tượng:
+ Ý nghĩa: nội dung của 2 ô nhớ có địa chỉ liên tiếp là ADDR và (ADDR+1) được lưu trữ vào cặp thanh ghi HL. Nội dung của ô nhớ có địa chỉ ADDR được nạp vào thanh ghi L, nội dung của ô nhớ có địa chỉ (ADDR+1) được nạp vào thanh ghi H.
+ Lệnh này chiếm 3 byte, số chu kỳ xung clock =13. + Lệnh này không ảnh hưởng đến thanh ghi trạng thái.
XIV. NHÓM LỆNH XOAY THANH GHI A:
1. Lệnh dịch thanh ghi A sang trái: + Cú pháp: RLC + Mã đối tượng: 0 0 1 1 1 0 1 0 8 bit thấp 8 bit cao 0 0 1 0 0 0 1 0 8 bit thấp 8 bit cao
0 0 0 0 1 1 1 1 1 1 0 0 0 0 1 1 8 bit thấp 8 bit cao 1 1 0 0 0 0 1 0 8 bit thấp 8 bit cao
+ Ý nghĩa: nội dung thanh ghi A dịch từ phải sang trái, bit MSB được chuyển sang bit Cy và bit LSB.
+ Lệnh này chiếm 1byte, số chu kỳ lock =4. + Lệnh này chỉ ảnh hưởng đến bit trạng thái Cy.
2. Lệnh dịch thanh ghi A sang phải: + Cú pháp: RRC
+ Mã đối tượng:
+ Ý nghĩa: nội dung thanh ghi A dịch từ trái sang phải, bit LSB được chuyển sang bit Cy và bit MSB.
+ Lệnh này chiếm 1byte, số chu kỳ lock =4. + Lệnh này chỉ ảnh hưởng đến bit trạng thái Cy.
( Tương tự cho các lệnh khác).
3. Lệnh dịch thanh ghi A sang trái thông qua bit Cy: + Cú pháp: RAL
4. Lệnh dịch thanh ghi A sang phải thông qua bit Cy: + Cú pháp: RAR
XV. NHÓM LỆNH NHẢY:
1. Lệnh nhảy không điều kiện: + Cú pháp: JMP ADDR + Mã đối tượng:
+ ý nghĩa: vi xử lí sẽ nhảy đến địa chỉ ADDR để tiếp tục thực hiện chương trình. + Lệnh này chiếm 3 byte, số chu kỳ clock =10.
+ Lệnh này không ảnh hưởng đến thanh ghi trạng thái.
2. Lệnh nhảy khi bit Z=0: +Cú pháp: JNZ ADDR + Mã đối tượng:
+ Ý nghĩa: vi xử lí sẽ nhảy đến địa chỉ ADDR để tiếp tục chương trình khi bit Z=0, ngay sau khi thực hiện lệnh ảnh hưởng đến bit z của thanh ghi trạng thái.
+ Lệnh này chiếm 3 byte, số chu kỳ clock là 7/10. + Lệnh này không ảnh hưởng đến thanh ghi trạng thái.
( Tương tự cho các lệnh khác).
3. Lệnh nhảy khi bit Z=1: + Cú pháp: JZ ADDR
1 1 0 0 1 1 0 1 8 bit thấp 8 bit cao 1 1 0 0 1 1 0 1 8 bit thấp 8 bit cao
4. Lệnh nhảy khi bit C=0: + Cú pháp: JNC ADDR
5. Lệnh nhảy khi bit C=1: + Cú pháp: JC ADDR
6. Lệnh nhảy khi bit P=0: + Cú pháp: JPO ADDR
7. Lệnh nhảy khi bit P=1: + Cú pháp: JPE ADDR
8. Lệnh nhảy khi bit S=0: + Cú pháp: JP ADDR
9. Lệnh nhảy khi bit S=1: + Cú pháp: JM ADDR
XVI. NHÓM LỆNH GỌI:
1. Lệnh gọi không điều kiện: + Cú pháp: CAAL ADDR + Mã đối tượng:
+ Ý nghĩa: vi xử lý sẽ thực hiện chương trình tại địa chỉ ADDR sau đó sẽ trở về chương trình chính khi gặp lệnh trở về.
+ Lệnh này chiếm 3 byte, số chu kỳ clock =18.
+ Lệnh này không ảnh hưởng đến thanh ghi trạng thái.
2. Lệnh gọi khi Z=0:
+ Cú pháp: CNZ ADDR + Mã đối tượng:
+ Ý nghĩa: vi xử lý sẽ thực hiện chương trình tại ADDR khi bit Z=0, ngay sau khi thực hiện lệnh ảnh hưởng đến bit Z của thanh ghi trạng thái. Sau đó sẽ trở về chương trình chính khi gặp lệnh trở về.
+ Lệnh này chiếm 3 byte, số chu kỳ clock =9/18. + Lệnh này không ảnh hưởng đến thanh ghi trạng thái.
( Tương tự cho các lệnh khác).
3. Lệnh gọi khi bit Z=1:
+ Cú pháp: CZ ADDR
4. Lệnh gọi khi bit C=0:
+ Cú pháp: CNC ADDR
5. Lệnh gọi khi bit C=1:
6. Lệnh gọi khi bit P=0:
+ Cú pháp: CPO ADDR
7. Lệnh gọi khi bit P=1:
+ Cú pháp: CPE ADDR
8. Lệnh gọi khi bit S=0:
+ Cú pháp: CP ADDR
9. Lệnh gọi khi bit S=1:
+ Cú pháp: CM ADDR
XVII. NHÓM LỆNH TRỞ VỀ TỪ CHƯƠNG TRÌNH CON:
1. Lệnh RET không điều kiện: