10
Các kiu định địa chhMSC-51 Hiu đính tbài ging ca Thy HTrung MGV: Trương Công Dung Nghi Các kiu định địa chCó 8 kiu định địa chtrong 8051: 1. Thanh ghi (register) dùng trong trường hp dliu cha trong thanh ghi (register data). 2. Tc thi (immediate) dùng cho dliu hng s(constant data). 3. Trc tiếp (direct) dùng cho dliu cha trong RAM (RAM data). 4. Gián tiếp (register indirect) dùng cho dliu cha trong RAM (RAM data). 5. Chs(indexed) dùng cho dliu cha trong ROM (ROM data). 6. Tương đối (relative) 7. Tuyt đối (absolute) 8. Dài (long) 2 GV: Trương Công Dung Nghi Các kiu định địa ch3 GV: Trương Công Dung Nghi Các kiu định địa ch1. Định địa chthanh ghi (register) : Ctoán hng ngun và toán hng đích đều có thlà mt trong các thanh ghi ca CPU. Các thanh ghi trong 8051 : 4 A B R0 R1 R3 R4 R2 R5 R7 R6 DPH DPL PC DPTR PC Some 8051 16-bit Register Some 8-bit Registers of the 8051 !A (Accumulator) !B !PSW (Program Status Word) !SP (Stack Pointer) !PC (Program Counter) !DPTR (Data Pointer)

ểu định đị ỉ Các ki địnhtcdungnghi/MPU_MCU/MCU_8051_addressing...‣Toán hạng nguồn là một hằng số được xác định bởi giá trị của nó. ‣Toán

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: ểu định đị ỉ Các ki địnhtcdungnghi/MPU_MCU/MCU_8051_addressing...‣Toán hạng nguồn là một hằng số được xác định bởi giá trị của nó. ‣Toán

Các kiểu định địa chỉ họ MSC-51

Hiệu đính từ bài giảng của Thầy Hồ Trung MỹGV: Trương Công Dung Nghi

Các kiểu định địa chỉ• Có 8 kiểu định địa chỉ trong 8051:

1. Thanh ghi (register) dùng trong trường hợp dữ liệu chứa trong thanh ghi (register data).

2. Tức thời (immediate) dùng cho dữ liệu hằng số (constant data).

3. Trực tiếp (direct) dùng cho dữ liệu chứa trong RAM (RAM data).

4. Gián tiếp (register indirect) dùng cho dữ liệu chứa trong RAM (RAM data).

5. Chỉ số (indexed) dùng cho dữ liệu chứa trong ROM (ROM data).

6. Tương đối (relative)

7. Tuyệt đối (absolute)

8. Dài (long)

2

GV: Trương Công Dung Nghi

Các kiểu định địa chỉ

3

The 8051 Microcontroller, 4eBy I. Scott MacKenzie and Raphael C.-W. Phan

© 2007 Pearson Education, Inc.Pearson Prentice Hall

Upper Saddle River, NJ 07458

FIGURE 3–1 8051 Addressing modes. (a) Register addressing (b) Direct addressing (c) Indirect addressing (d) Immediate addressing (e) Relative addressing (f) Absolute addressing (g) Long addressing (h) Indexed addressing

GV: Trương Công Dung Nghi

Các kiểu định địa chỉ1. Định địa chỉ thanh ghi (register) :

‣ Cả toán hạng nguồn và toán hạng đích đều có thể là một trong các thanh ghi của CPU.

‣ Các thanh ghi trong 8051 :

4

A B

R0 R1

R3 R4

R2

R5

R7 R6

DPH DPL

PC

DPTR

PC

Some 8051 16-bit Register

Some 8-bit Registers of the 8051

! A (Accumulator) ! B ! PSW (Program Status Word) ! SP (Stack Pointer) ! PC (Program Counter) ! DPTR (Data Pointer)

Page 2: ểu định đị ỉ Các ki địnhtcdungnghi/MPU_MCU/MCU_8051_addressing...‣Toán hạng nguồn là một hằng số được xác định bởi giá trị của nó. ‣Toán

GV: Trương Công Dung Nghi

Các kiểu định địa chỉ1. Định địa chỉ thanh ghi (register) :

‣ Ví dụ :

MOV R0,A

MOV A,R7

ADD A,R4

ADD A,R7

MOV DPTR,#25F5H

MOV R5,DPL

MOV R1,DPH

‣ Chú ý : có thể chuyển dữ liệu giữa thanh ghi A và Rn (n = 0...7) nhưng không thể chuyển dữ liệu giữa các thanh ghi Rn.

Ví dụ : MOV R4, R7 là sai.

5 GV: Trương Công Dung Nghi

Các kiểu định địa chỉ2. Định địa chỉ tức thời (Immediate) :

‣ Toán hạng nguồn là một hằng số được xác định bởi giá trị của nó.

‣ Toán hạng tức thời được nhận biết nhờ vào ký tự # đặt trước chúng.

6

mov A, #0 ;put 0 in the accumulator ;A = 00000000

mov R4, #11h ;put 11hex in the R4 register ;R4 = 00010001

mov B, #11 ;put 11 decimal in b register ;B = 00001011

mov DPTR,#7521h ;put 7521 hex in DPTR ;DPTR = 0111010100100001

GV: Trương Công Dung Nghi

Các kiểu định địa chỉ2. Định địa chỉ tức thời (Immediate) :

‣ Một số chú ý:

✓ Luôn đặt dấu # trước dữ liệu tức thời.

✓ Chỉ có toán hạng nguồn mới được phép định địa chỉ tức thời.

✓ Thêm “h” vào sau số thập lục phân, “b” sau số nhị phân. Nếu không ghi chú gì thêm thì mặc định là số thập phân.

✓ Dùng dấu nháy đơn ‘’ để đóng khung ký tự.

✓ Với những số thập lục phân bắt đầu bởi A-F, phải thêm số 0 phía trước.

Ví dụ:

7

Add “#” before any immediate dataOnly the source operand can be immediateAdd “h” after a base-16 number, “b” after a base-2 number; otherwise assumed base-10Use ‘ ’ to enclose any character

Notes of Immediate AddressingNotes of Immediate Addressing

Use ‘ ’ to enclose any characterPrecede all base-16 numbers that begin with A-F by a “0”

MOV A,#ABh

MOV A,#0ABH

54

GV: Trương Công Dung Nghi

3. Định địa chỉ trực tiếp (direct) :

• truy suất dữ liệu bằng cách dùng trực tiếp địa chỉ 8-bits của vùng nhớ.

• thường dùng cho vùng nhớ 30H-7FH của RAM.

Các kiểu định địa chỉ

8

Page 3: ểu định đị ỉ Các ki địnhtcdungnghi/MPU_MCU/MCU_8051_addressing...‣Toán hạng nguồn là một hằng số được xác định bởi giá trị của nó. ‣Toán

GV: Trương Công Dung Nghi9 GV: Trương Công Dung Nghi

Các kiểu định địa chỉ3. Định địa chỉ trực tiếp (direct) :

• Ví dụ :

10

mov a, 70h ; copy contents of RAM at 70h to amov R0,40h ; copy contents of RAM at 70h to amov 56h,a ; put contents of a at 56h to amov 0D0h,a ; put contents of a into PSW

GV: Trương Công Dung Nghi

Các kiểu định địa chỉ3. Định địa chỉ trực tiếp (direct) :

• dùng cho các thanh ghi R0-R7 với địa chỉ trực tiếp.

• Ví dụ :

• Chú ý :

11

Addressing Modes2) Direct Mode – play with R0-R7 by direct

addressMOV A,4 ≡≡≡≡ MOV A,R4

MOV A,7 ≡≡≡≡ MOV A,R7MOV A,7 ≡≡≡≡ MOV A,R7

MOV 7,6 ≡≡≡≡ MOV R7,R6

MOV R2,#5 ;Put 5 in R2MOV R2,5 ;Put content of RAM at 5 in R2

56

Addressing Modes2) Direct Mode – play with R0-R7 by direct

addressMOV A,4 ≡≡≡≡ MOV A,R4

MOV A,7 ≡≡≡≡ MOV A,R7MOV A,7 ≡≡≡≡ MOV A,R7

MOV 7,6 ≡≡≡≡ MOV R7,R6

MOV R2,#5 ;Put 5 in R2MOV R2,5 ;Put content of RAM at 5 in R2

56

GV: Trương Công Dung Nghi

Các kiểu định địa chỉ3. Định địa chỉ trực tiếp (direct) :

12

Examples of Direct AddressingExamples of Direct Addressing

Instruction OperationMOV 80h, A orMOV P0, A

Copy contents of register A to location 80h (Port 0 latch)

MOV A, 80h orMOV A, P0

Copy contents of location 80h (Port 0 pins) to register A

Note: No “#” sign in the instruction

MOV A, P0 register A

MOV A, ABC Copy contents from direct address with label ABC to register A

MOV R0, 12h Copy contents from RAM location 12h to register R0

MOV 0A8h, 77h orMOV IE, 77h

Copy contents from RAM location 77h to IE register of SFRs MOV direct,direct

ABC EQU 80h ; equateMOV A, ABC ; Port 0 to A

58

Page 4: ểu định đị ỉ Các ki địnhtcdungnghi/MPU_MCU/MCU_8051_addressing...‣Toán hạng nguồn là một hằng số được xác định bởi giá trị của nó. ‣Toán

GV: Trương Công Dung Nghi

Các kiểu định địa chỉ3. Định địa chỉ trực tiếp (direct) :

13

Examples of Direct AddressingExamples of Direct Addressing

MOV A, 2 ; copy location 02 (R2) to AMOV B, 2 ; copy location 02 (R2) to BMOV 7, 2 ; copy location 02 to 07 (R2 to R7)

; since “MOV R7, R2” is invalid

MOV DIRECT, DIRECT

59

GV: Trương Công Dung Nghi

Các kiểu định địa chỉ3. Định địa chỉ trực tiếp (direct) :

• Chú ý : khi làm việc với ngăn xếp (stack), phải sử dụng cách định địa chỉ trực tiếp.

PUSH direct

POP direct

• Ví dụ :

14

Stack and Direct Addressing ModeStack and Direct Addressing Mode

Only direct addressing mode is allowed for pushing onto the stack

PUSH A (Invalid)PUSH 0E0h (Valid)

PUSH directPOP direct

PUSH 0E0h (Valid)PUSH R3 (Invalid)PUSH 03 (Valid)POP R4 (Invalid)POP 04 (Valid)

60

GV: Trương Công Dung Nghi

Các kiểu định địa chỉ3. Định địa chỉ trực tiếp (direct) :

• Ví dụ : Hãy viết đoạn chương trình chuyển dữ liệu từ các thanh ghi R5, R6 và A vào stack, sau đó lấy dữ liệu ra các thanh ghi R2, R3 và B sao cho nội dung thanh ghi B = A, R2 = R6, R3 = R5.

15

ExampleExample

PUSH 05 ; push R5 onto stackPUSH 06 ; push R6 onto stackPUSH 0E0h ; push register A onto stack

Show the code to push R5, R6, and A onto the stack and then pop them back into R2, R3, and B, where register B = register A, R2 = R6, and R3 = R5.

PUSH 0E0h ; push register A onto stackPOP 0F0h ; pop top of stack into register B

; now register B = register APOP 02 ; pop top of stack into R2

; now R2 = R6POP 03 ; pop top of stack into R3

; now R3 = R5

61GV: Trương Công Dung Nghi

Các kiểu định địa chỉ3. Định địa chỉ trực tiếp (direct) :

• Một số ghi chú :

‣ Giá trị địa chỉ được giới hạn trong 1 byte (00 - FFH) (tương ứng với 128-byte RAM và SFR).

‣ Sử dụng lệnh MOV để chuyển dữ liệu từ một ô nhớ hay thanh ghi vào chính nó sẽ gây nên những kết quả không chính xác.

Ví dụ : MOV A, A (lỗi).

‣ Dùng lệnh MOV để chuyển dữ liệu ra một cổng (move data to port) sẽ làm thay đổi mạch chốt của cổng (port latch).

‣ Dùng lệnh MOV để nhận dữ liệu từ cổng (move data from port) tương ứng với việc nhận dữ liệu từ các chân của cổng (data from port pins).

16

Page 5: ểu định đị ỉ Các ki địnhtcdungnghi/MPU_MCU/MCU_8051_addressing...‣Toán hạng nguồn là một hằng số được xác định bởi giá trị của nó. ‣Toán

GV: Trương Công Dung Nghi

Các kiểu định địa chỉ4. Định địa chỉ gián tiếp (indirect) :

• Địa chỉ của toán hạng nguồn hay toán hạng đích được đặt trong các thanh ghi.

• Dùng các thanh ghi R0 hoặc R1 cho các địa chỉ 8-bit (khoảng địa chỉ từ 00h đến 7Fh).

Ví dụ : MOV A, @R1

• Dùng thanh ghi DPTR cho các địa chỉ 16-bit.

• Phải đặt ký hiệu “@” phía trước tên của thanh ghi để chỉ rằng đang ở chế độ định địa chỉ gián tiếp.

17

Addressing Modes4) Register Indirect – the address of the source or

destination is specified in registers

Uses registers R0 or R1 for 8-bit address:mov psw, #0 ; use register bank 0mov r0, #3Chmov @r0, #3 ; M[3Ch] 3

Uses DPTR register for 16-bit addresses:mov dptr, #9000h ; dptr 9000hmovx a, @dptr ; a M[9000h]

Note that 9000h is an address in external memory67

Addressing Modes4) Register Indirect – the address of the source or

destination is specified in registers

Uses registers R0 or R1 for 8-bit address:mov psw, #0 ; use register bank 0mov r0, #3Chmov @r0, #3 ; M[3Ch] 3

Uses DPTR register for 16-bit addresses:mov dptr, #9000h ; dptr 9000hmovx a, @dptr ; a M[9000h]

Note that 9000h is an address in external memory67

GV: Trương Công Dung Nghi

Các kiểu định địa chỉ4. Định địa chỉ gián tiếp (indirect) :

18

GV: Trương Công Dung Nghi

Các kiểu định địa chỉ4. Định địa chỉ gián tiếp (indirect) :

19

Program memory

Addresses

ACC

R0ADD A, @R0200

201

10

31

ACC

R0

31

22⊕⊕⊕⊕

Register Indirect Addressing Register Indirect Addressing (eg. ADD A,@R0)(eg. ADD A,@R0)

AfterAfterBeforeBefore

201

Data memory

1231

32

30

31 31

8051 Internal data memory71

GV: Trương Công Dung Nghi

Các kiểu định địa chỉ4. Định địa chỉ gián tiếp (indirect) :

20

Instruction Operation MOV @R1, A Copy the data in A to the address pointed to by

the contents of R1

MOV A, @R0 Copy the contents of the address pointed to by

register R0 to the A register

MOV @R1, #35h Copy the number 35h to the address pointed to

Examples of Indirect AddressingExamples of Indirect Addressing

MOV @R1, #35h Copy the number 35h to the address pointed to

by register R1

MOV @R0, 80h or

MOV @R0, P0

Copy the contents of the port 0 pins to the

address pointed to by register R0.

MOVX A, @R0 Copy the contents of the external data address

pointed to by register R0 to the A register

MOVX A, @DPTR Copy the contents of the external data address

pointed to by register DPTR to the A register

MOV @Ri,#data where i = 0 or 1

72

Page 6: ểu định đị ỉ Các ki địnhtcdungnghi/MPU_MCU/MCU_8051_addressing...‣Toán hạng nguồn là một hằng số được xác định bởi giá trị của nó. ‣Toán

GV: Trương Công Dung Nghi

Các kiểu định địa chỉ5. Định địa chỉ chỉ số :

• sử dụng một thanh ghi nền (base address) (hoặc bộ đếm chương trình PC hay con trỏ dữ liệu DPTR) và một offset (thanh ghi tích lũy A) để tạo thành dạng địa chỉ hiệu dụng cho lệnh JMP hoặc MOVC.

• Ví dụ:

21

Addressing Modes

5) Register Indexed Mode – source or destination address is the sum of the base address and the accumulator (Index)

• Base address can be DPTR or PCmov dptr, #4000hmov a, #5movc a, @a + dptr ;a M[4005]

80

Addressing Modes

5) Register Indexed Mode continue

• Base address can be DPTR or PCORG 1000hORG 1000h

1000 mov a, #51002 movc a, @a + PC ;a M[1008]1003 Nop

• Lookup Table • MOVC only can read internal code memory

PC

81

GV: Trương Công Dung Nghi

Các kiểu định địa chỉ5. Định địa chỉ chỉ số :

• Ví dụ: MOVC A, @A+DPTR

22

Program memory

ACC

DPTR

00 10

ACC

56⊕⊕⊕⊕

Indexed AddressingIndexed Addressing Example: MOVC A,@A+DPTR

AfterAfterBeforeBefore

DPTR

MOVC A, @A + DPTR2000

2001

41 3156

MOVC A, @A + DPTR

83

GV: Trương Công Dung Nghi

Các kiểu định địa chỉ5. Định địa chỉ chỉ số :

• Ví dụ:

23

Instruction Operation MOVC A, @A + DPTR Copy the code byte, found at the ROM

address formed by adding register A and the DPTR register, to A

MOVC A, @A + PC Copy the code byte, found at the ROM

Examples of Indexed AddressingExamples of Indexed Addressing

MOVC A, @A + PC Copy the code byte, found at the ROM address formed by adding A and the PC, to A

JMP @A + DPTR Jump to the address formed by adding A to the DPTR, this is an unconditional jump and will always be done.

84

GV: Trương Công Dung Nghi

Các kiểu định địa chỉ6. Định địa chỉ tương đối:

• Chỉ được sử dụng cho các lệnh nhảy “ngắn” (SJMP, JNC, JZ, DJNZ,...).

• Địa chỉ tương đối (còn gọi là offset) là một giá trị 8-bit có dấu (-128 đến +127).

• Giá trị này được cộng với bộ đếm chương trình (PC) để tạo ra địa chỉ của lệnh tiếp theo cần được thực thi.

• Bộ đếm chương trình (PC) được tăng đến địa chỉ theo sau lệnh nhảy ⇒ địa chỉ mới liên quan đến lệnh kế tiếp, không liên quan đến địa chỉ của lệnh nhảy.

24

Page 7: ểu định đị ỉ Các ki địnhtcdungnghi/MPU_MCU/MCU_8051_addressing...‣Toán hạng nguồn là một hằng số được xác định bởi giá trị của nó. ‣Toán

GV: Trương Công Dung Nghi

Các kiểu định địa chỉ6. Định địa chỉ tương đối (relative) :

• Tính offset cho kiểu định địa chỉ tương đối:

25

The 8051 Microcontroller, 4eBy I. Scott MacKenzie and Raphael C.-W. Phan

© 2007 Pearson Education, Inc.Pearson Prentice Hall

Upper Saddle River, NJ 07458

FIGURE 3–2 Calculating the offset for relative addressing. (a) Short jump ahead in memory (b) Short jump back in memory

The 8051 Microcontroller, 4eBy I. Scott MacKenzie and Raphael C.-W. Phan

© 2007 Pearson Education, Inc.Pearson Prentice Hall

Upper Saddle River, NJ 07458

FIGURE 3–2 Calculating the offset for relative addressing. (a) Short jump ahead in memory (b) Short jump back in memory

Offset tương đối = byte thấp của (địa chỉ nhảy đến - địa chỉ lệnh kế)GV: Trương Công Dung Nghi

Các kiểu định địa chỉ6. Định địa chỉ tương đối:

26

Branch OpcodeOffset

Next Opcode

Program Counter

Relative AddressingRelative Addressing

Program counter + offset

= Effective address

= address of next instruction

+ Offset

Next Instruction

94

GV: Trương Công Dung Nghi

Các kiểu định địa chỉ6. Định địa chỉ tương đối:

• Ví dụ:

27

Instruction Operation SJMP NXT Jump to relative address with the label 'NXT'; this

is an unconditional jump and is always taken.

DJNZ R1, DWN Decrement register R1 by 1 and jump to the relative address specified by the label 'DWN' if

Examples of Relative AddressingExamples of Relative Addressing

relative address specified by the label 'DWN' if the result of R1 is not zero.

0035

95GV: Trương Công Dung Nghi

Các kiểu định địa chỉ7. Định địa chỉ tuyệt đối (absolute) :

• Chỉ được sử dụng cho các lệnh ACALL và AJMP.

• Các lệnh này cho phép rẽ nhánh chương trình trong trang 2K hiện hành của bộ nhớ chương trình bằng cách cung cấp 11 bits thấp của địa chỉ đích.

• 5 bits cao của địa chỉ đích là 5 bits cao hiện hành trong bộ đếm chương trình ⇒ lệnh theo sau lệnh rẽ nhánh và đích của lệnh rẽ nhánh phải ở trong cùng 1 trang 2K.

28

Page 8: ểu định đị ỉ Các ki địnhtcdungnghi/MPU_MCU/MCU_8051_addressing...‣Toán hạng nguồn là một hằng số được xác định bởi giá trị của nó. ‣Toán

GV: Trương Công Dung Nghi

Các kiểu định địa chỉ8. Định địa chỉ dài (long distance) :

• Chỉ dùng cho các lệnh LCALL và LJMP.

• Các lệnh này chứa địa chỉ đích 16 bits.

• Ưu điểm : giúp sử dụng hết toàn bộ không gian nhớ chương trình 64K.

• Khuyết điểm : lệnh dài đến 3-byte và phụ thuộc vào vị trí.

29 GV: Trương Công Dung Nghi

Các kiểu định địa chỉ

30

Absolute AddressingAbsolute AddressingACALL address11AJMP address11ORG 00H ; reset location

LJMP START ; 3 bytes instruction

ORG 3FFEHSTART: ACALL FORWARD ; 2 bytes instruction; now code address at 4000H

LJMP TEST

ORG 47FFH ; 010001111111111BORG 47FFH ; 010001111111111BFORWARD:

RET

ORG 5800H ; 0101100000000000BBACKWARD:

RET

ORG 5FFDHTEST: ACALL BACKWARD ; 2 bytes instruction; now code address at 5FFFH

SJMP $END

97

GV: Trương Công Dung Nghi

Bài tập• Hãy cho biết cách định địa chỉ của các lệnh sau:

a) MOV R4, A b) MOV A, #0A3H c) MOV 6, #0B6H

d) LJMP 0548H e) MOVX A, @DPTR f) MOV A, @R1

g) MOV A, 12H h) ACALL DELAY i) SJMP LOOP

• Xét lệnh sau: MOV 50H, #0FFH. Hãy tìm mã lệnh và giải thích mỗi byte trong mã lệnh.

• Offset tương đối của lệnh “SJMP AHEAD” là bao nhiêu nếu lệnh này đang ở ô nhớ 0400H và 0401H, và nhãn AHEAD biểu diễn lệnh ở địa chỉ 041FH.

31 GV: Trương Công Dung Nghi

Các kiểu định địa chỉ• Ví dụ : Hãy viết đoạn chương trình chép giá trị 55h vào bộ nhớ

RAM tại các địa chỉ từ 40h đến 44h sử dụng:

(a) Định địa chỉ trực tiếp.

(b) Định địa chỉ gián tiếp không dùng vòng lặp.

(c) Định địa chỉ gián tiếp có dùng vòng lặp.

32

Page 9: ểu định đị ỉ Các ki địnhtcdungnghi/MPU_MCU/MCU_8051_addressing...‣Toán hạng nguồn là một hằng số được xác định bởi giá trị của nó. ‣Toán

GV: Trương Công Dung Nghi

Các kiểu định địa chỉ• Ví dụ : Hãy viết đoạn chương trình chép giá trị 55h vào bộ nhớ

RAM tại các địa chỉ từ 40h đến 44h sử dụng:

(a) Định địa chỉ trực tiếp.

33

MOV A, #55h ; load A with value 55hMOV 40h, A ! ; copy A to RAM location 40h MOV 41h, A ! ; copy A to RAM location 41h MOV 42h, A ! ; copy A to RAM location 42h MOV 43h, A ! ; copy A to RAM location 43h MOV 44h, A ! ; copy A to RAM location 44h

GV: Trương Công Dung Nghi

Các kiểu định địa chỉ• Ví dụ : Hãy viết đoạn chương trình chép giá trị 55h vào bộ nhớ

RAM tại các địa chỉ từ 40h đến 44h sử dụng:

(b) Định địa chỉ gián tiếp không dùng vòng lặp.

34

MOV A, #55h ; load A with value 55hMOV R0, #40h ; load the pointer. R0 = 40hMOV @R0, A ; copy A to RAM location R0 points toINC R0 ; increment pointer. Now R0 = 41hMOV @R0, A ; copy A to RAM location R0 points to

Solution to Example (b)Solution to Example (b)register indirect addressing mode without a loop

MOV @R0, A ; copy A to RAM location R0 points toINC R0 ; increment pointer. Now R0 = 42hMOV @R0, A ; copy A to RAM location R0 points toINC R0 ; increment pointer. Now R0 = 43h MOV @R0, A ; copy A to RAM location R0 points toINC R0 ; increment pointer. Now R0 = 44hMOV @R0, A ; copy A to RAM location R0 points to

75

GV: Trương Công Dung Nghi

Các kiểu định địa chỉ• Ví dụ : Hãy viết đoạn chương trình chép giá trị 55h vào bộ nhớ RAM tại các địa chỉ từ 40h đến 44h sử dụng:

(c) Định địa chỉ gián tiếp có dùng vòng lặp.

35

MOV A, #55h ; A = 55hMOV R0, #40h ; load pointer. R0 = 40h, RAM add.MOV R2, #05 ; load counter, R2 = 5

AGAIN: MOV @R0, A ; copy 55A to RAM location R0 points toINC R0 ; increment R0 pointer

Solution to Example (c)Solution to Example (c) Loop method

INC R0 ; increment R0 pointerDJNZ R2, AGAIN ; loop until counter = zero

“DJNZ” : decrement and jump if Not Zero

DJNZ direct, relativeDJNZ Rn, relative where n = 0,1,,,7

MOV R2, #05h ; exampleLP:

;--------------------------------; do 5 times inside the loop;--------------------------------DJNZ R2, LP ; R2 as counter

76GV: Trương Công Dung Nghi

Các kiểu định địa chỉ• Ví dụ : Hãy viết đoạn chương trình xóa 15 ô nhớ RAM bắt đầu tại địa chỉ 60h.

36

Example (looping)Example (looping)Write a program segment to clear 15 RAM locations starting at RAM address 60h.

CLR A ; A = 0MOV R1, #60h ; load pointer. R1 = 60hMOV R7, #15 ; load counter, R7 = 15 (0F in HEX)MOV R7, #15 ; load counter, R7 = 15 (0F in HEX)

AGAIN: MOV @R1, A ; clear RAM location R1 points toINC R1 ; increment R1 pointerDJNZ R7, AGAIN ; loop until counter = zero

; clear one ram location at address 60hCLR AMOV R1,#60hMOV @R1,A

Setup a loop using DJNZ and register R7 as counter77

Page 10: ểu định đị ỉ Các ki địnhtcdungnghi/MPU_MCU/MCU_8051_addressing...‣Toán hạng nguồn là một hằng số được xác định bởi giá trị của nó. ‣Toán

GV: Trương Công Dung Nghi

Các kiểu định địa chỉ• Ví dụ : Hãy viết đoạn chương trình sao chép một khối dữ liệu 10

bytes từ vùng nhớ RAM có địa chỉ bắt đầu là 35h đến vùng nhớ RAM có địa chỉ bắt đầu là 60h.

37

Example (block transfer)Example (block transfer)Write a program segment to copy a block of 10 bytes of data from RAM locations starting at 35h to RAM locations starting at 60h.

MOV R0, #35h ; source pointerMOV R1, #60h ; destination pointerMOV R3, #10 ; counterMOV R3, #10 ; counter

BACK:MOV A, @R0 ; get a byte from sourceMOV @R1, A ; copy it to destinationINC R0 ; increment source pointerINC R1 ; increment destination pointerDJNZ R3, BACK ; keep doing it for all ten bytes

78