2Sections 5.1 Immediate and register addressing modes 5.2 Accessing memory using various address modes
3Objective程式中的資料可能是放在 Register 中，或在RAM 中某一位址上，或在 ROM 一塊特殊區域放置資料，或者是指令中直接給予定值。設計 8051 IC 的人們，提供這些存取資料的方式。這些方式便叫作 Addressing Mode。中文稱為“定址模式”：決定參數位址的模式也許不同家的 Assembler 會有不同的指令寫法，但基本上 addressing mode 都是一樣的。
4Section 5.1 Immediate and Register Addressing Modes
5What is Addressing Mode The CPU can access data in various ways.The data could be in a register, or in memory（RAM or ROM）, or be provided as an immediate value.These various ways of accessing data are called addressing mode.
6Addressing Mode in the 8051 Five addressing mode in the 8051： 1. immediate2. register3. direct4. register indirect5. indexed先不管這些名詞的意義, 先猜猜看有哪些方法可以存取記憶體 ROM 和 RAM.
7Addressing Mode 1 1. immediate － the operand is a constant MOV A,#01FH2. register － the operand is in a registerMOV A,R03. direct － access the data in the RAM with addressMOV A,01FH4. register indirect － the register holds the RAM address of the dataMOV5. indexed － for on-chip ROM accessMOVC
8Immediate Addressing Mode The source operand is a constant.When the instruction is assembled, the operand comes immediately after the opcode.The immediate vale can be loaded into any of the registers.The immediate data must be preceded by the pound sign, ‘＃’.The immediate value is bounded by the size of register.Please use the simulation tools to find the the machine code and the content of registers after execution.See Tables 10 ＆11 (page 418).
9Example of Immediate Mode（1/2） MOV A,#25H ;A=25HC 3E MOV R4,#62 ;A=62=3EHMOV DPTR,#4521HInstruction Opcodes in Table 11Hex code Mnemonic Operands ByteMOV A, #data7C MOV R4, #dataMOV DPTR, #dataDPTR has high byte DPH (address 83) and low byte DPL (address 82)However, 8051 CPU does not provide a special machine instructions for MOV DPH, #data or MOV DPL,#data,Although 8051 Assembler provide the assembly instructions for DPH and DPL
10Example of Immediate Mode（2/2） MOV A,#25H ;A=25HC 3E MOV R4,#62 ;A=62=3EHMOV DPTR,#4521HInstruction Opcodes in Table 10Mnemonic Oscillator PeriodMOV A, #dataMOV Rn, #dataMOV DPTR, #dataRn - Register R7-R0 of the currently selected Register Bank. in ‘Table 10 page 418
11EQU The EQU directive is used in the immediate addressing mode. ORG 0HCOUNT EQU 30C 1E MOV R4,#COUNTMOV DPTR,#MYDATAORG 200HD MYDATA DB "America"ENDAssembler will transfer the COUNT=30=1EH to the immediate value.MYDATA is the address of “America”, point to “A”Assembler will transfer the MYDATA to the address 200H.ORG 0HCOUNT EQU 30C 1E MOV R4,#COUNT ;R4=30MOV DPTR,#MYDATA ;DPTR=200HORG 200HD MYDATA DB "America"END
12Addressing Mode 2 1. immediate － the operand is a constant MOV A,#01FH2. register － the operand is in a registerMOV A,R03. direct － access the data in the RAM with addressMOV A,01FH4. register indirect － the register holds the RAM address of the dataMOV5. indexed － for on-chip ROM accessMOVC
13Register Addressing Mode Register addressing mode involves the use of registers to hold the data.The source and destination registers must match in size.The movement of data between Rn registers is not allowed. “MOV R4,R7” is illegal.You can find that the opcode in register addressing mode is short！
14Example of Register Mode（1/2） E MOV A,R0FA MOV R2,AD ADD A,R5Instruction Opcodes in Table 11Hex code Mnemonic Operands ByteE MOV A,RFA MOV R2,A2D ADD A,R
15Example of Register Mode（2/2） E MOV A,R0FA MOV R2,AD ADD A,R5Instruction Opcodes in Table 10Mnemonic Oscillator PeriodMOV A, RnMOV Rn, AADD A, Rn
16Section 5.2 Accessing Memory Using Various Address Modes
17Addressing Mode 3 1. immediate － the operand is a constant MOV A,#01FH2. register － the operand is in a registerMOV A,R03. direct － access the data in the RAM with addressMOV A,01FH4. register indirect － the register holds the RAM address of the dataMOV5. indexed － for on-chip ROM accessMOVC
18Direct Addressing Mode There are 128 bytes of RAM in the 8051.The RAM has been assigned address FH.00-1FH：the register banks and stack20-2FH：bit-addressable space to save single-bit data30-7FH：scratch pad RAMIn direct addressing mode, the data is in a RAM memory location whose address is known, and this address is given as a part of the instruction.If an number begins without a pound sign, ‘＃’, then Assembler think it as the RAM address.It is most often used to access RAM location 20-7FH.This is due to the fact that register bank locations are accessed by the register names of R0-R7 -- register mode.There is no such name for other RAM locations. -- so use direct address mode.
19Example of Direct Mode（1/2） A MOV R0,40HF MOV 56H,AMOV DPTR,#4521MOV DPH,#45H5 000A MOV DPL,#21HInstruction Opcodes Table 11Hex code Mnemonic Operands BytesA MOV R0, data addrF MOV data addr., AMOV data addr., #data“Direct” means “data address”.DPTR has high byte DPH (address 83) and low byte DPL (address 82)
20Example of Direct Mode（2/2） A MOV R0,40HF MOV 56H,AMOV DPTR,#4521MOV DPH,#45H5 000A MOV DPL,#21HInstruction Opcodes Table 10Mnemonic Oscillator PeriodMOV Rn, directMOV direct, AMOV direct, #data“Direct” means “data address”.DPTR has high byte DPH (address 83) and low byte DPL (address 82)
21Register Bank（1/2）If we use register bank 0, then the following instructions 2＆3 do the same works：C 64 MOV R4,#100E5 04 MOV A,4 ;direct modeEC MOV A,R4 ;register modeInitially, the 8051 uses the register bank 0.R4 has RAM address 04H.
22Register Bank（2/2）If we use register bank 1, then the following instructions 3＆4 do the different works：D2 D3 SETB RS0 ;RS0=1C 64 MOV R4,#100E5 04 MOV A,4 ;A=0EC MOV A,R4 ;A=100=64HRS1=PSW.4=0 ＆ RS0=PSW.3=1 register bank 0Initially, the content of RAM is 00H.R4 has RAM address 0CH.RAM 0CH has the value 100.
23SFR（Special Function Register） There are many special functions registers in the We call them SFR.Example：A, B, PSW, and DPTRThe 8051 Assembler provides that the SFR can be accessed by their name or by their addresses.See Table 5-1 for SFR addressesThe SFR have addresses between 80H and FFH.Not all the address space of 80 to FF is used by the SFR.The addresses 00-0FH are addresses of RAM memory inside the So SFR needs to use the addresses 80H to FFH.The addresses 80H to FFH is not a really RAM.The unused locations 80H to FFH are reserved and must not be used by the 8051 programmer.We can access SFR by direct addressing mode.
24Table 5-1: Special Function Register (SFR) Addresses（1/2） SymbolNameAddressACC*Accumulator0E0HB*B register0F0HPSW*Program status word0D0HSPStack pointer81HDOTRData pointer 2 bytesDPLLow byte82HDPHHigh byte83HP0*Port 080HP1*Port 190HP2*Port 20A0HP3*Port 30B0HIP*Interrupt priority control0B8HIE*Interrupt enable control0A8HTMODTimer/counter mode control89H
25Table 5-1: Special Function Register (SFR) Addresses （2/2） SymbolNameAddressTCON*Timer/counter control88HT2CON*Timer/counter 2 control0C8HT2MODTimer/counter mode control0C9HTH0Timer/counter 0 high byte8CHTL0Timer/counter 0 low byte8AHTH1Timer/counter 1 high byte8DHTL1Timer/counter 1 low byte8BHTH2Timer/counter 2 high byte0CDHTL2Timer/counter 2 low byte0CCHRCAP2HT/C 2 capture register high byte0CBHRCAP2LT/C 2 capture register low byte0CAHSCON*Serial control98HSBUFSerial data buffer99HPCONPower control87H*bit addressable (discussed further in Chapter 8)
26ACC and Its Address ACC has SFR address 0E0H. E0 55 MOV 0E0H,#55HMOV A,#55HD2 E1 SETB A.1Compare their code size and execution time.“ACC＊”, ＊ means this register is bit addressable. You can access each bit of ACC independently.E0 55 MOV 0E0H,#55H : 2 bytes 2 MCsMOV A,#55H : 2 bytes 1 MCFor address 0E0H, if the instruction is for a bit “SETB”, then it refers to A.0if the instruction is for a byte “MOV”, then it refers to A.SFC addr. 0E7 0E E5 0E E3 0E2 0E1 0E0ACCA.7A.6A.5A.4A.3A.2A.1A.0
27Example 5-1 Write code to send 55H to ports P1 and P2, using (a) their names(b) their addresses.Solution:(a) MOV A,#55H ;A=55HMOV P1,A ;P1=55HMOV P2,A ;P2=55H(b) From Table 5-1, P1 address = 80H; P2 address = A0HMOV A,#55H ;A=55HMOV 80H,A ;P1=55HMOV 0A0H,A ;P2=55H
28Stack Another major use of direct addressing mode is the stack. In the 8051 family, only direct addressing mode is allowed for pushing onto the stack.
29Example 5-2（1/2）Show the code to push R5, R6, and A onto the stack and then popthem back them into R2, R3, and B.We want：B = A, R2 = R6, and R3 = R5.Solution:PUSH ;push R5 onto stackPUSH ;push R6 onto stackPUSH 0E0H ;push register A onto stackPOP 0F0H ;pop top of stack into register BPOP ;pop top of stack into R2POP ;pop top of stack into R3C PUSH R5C PUSH R6C0 E0 PUSH AC PUSH 05C PUSH 06C0 E0 PUSH 0E0H
30Example 5-2（1/2）Different assembler provide different instruction for the stack.In our simulation tools, they are the same：C PUSH R5C PUSH R6C0 E0 PUSH AC PUSH 05C PUSH 06C0 E0 PUSH 0E0H
31Addressing Mode 4 1. immediate － the operand is a constant MOV A,#01FH2. register － the operand is in a registerMOV A,R03. direct － access the data in the RAM with addressMOV A,01FH4. register indirect － the register holds the RAM address of the dataMOV5. indexed － for on-chip ROM accessMOVC
32Register Indirect Addressing Mode In the register indirect addressing mode, a register is used as a pointer to the data.That is, this register holds the RAM address of the data.Only registers R0 and R1 can be used to hold the address of an operand located in RA.Usually, R0 and R1 are denoted by Ri.When R0 and R1 hold the addresses of RAM locations, they must be preceded by the sign.So it is called “indirect”.If you forget sign, 8051 Assembler will use the content of Ri.
33Example of Register Indirect Mode（1/2） MOV 20H,#100MOV R0,#20HE MOVDPTR has high byte DPH (address 83) and low byte DPL (address 82)However, 8051 CPU does not provide a special machine instructions for MOV DPH, #data or MOV DPL,#data,Although 8051 Assembler provide the assembly instructions for DPH and DPLRAM1. put 64H to addr. 20H2. let R0 be the data address1E F :R H3. copy the content in addr. R0=20H to AA H
34Example of Register Indirect Mode（2/2） F0 80 MOV B,#080HMOV R1,#31HA7 F0DPTR has high byte DPH (address 83) and low byte DPL (address 82)However, 8051 CPU does not provide a special machine instructions for MOV DPH, #data or MOV DPL,#data,Although 8051 Assembler provide the assembly instructions for DPH and DPLRAM3. copy B to the RAM location with addr. R1=31H2F :2. let R0 be the data addressR H1. let B=80HB H
35Example 5-3 (1/3)Write a program to copy the value 55H into RAM memory locations 40H to 45H using(a) direct addressing mode,(b) register indirect addressing mode without a loop,(c) with a loop.Solution of (a) :MOV A,#55HMOV 40H,AMOV 41H,AMOV 42H,AMOV 43H,AMOV 44H,ARAMcopy A to the RAM location of addr. 43HA H
36Example 5-3 (2/3)Solution of (b) register indirect addressing mode without a loopMOV A,#55H ;load A with value 55HMOV R0,#40H ;load the pointer. R0=40H;copy A to RAM location where R0; points toINC R ;increment pointer. Now R0=41HINC R ;R0=42HINC R ;R0=43HINC R0RAMR HA H
37Example 5-3 (3/3) Solution of (c) with a loop: MOV A,#55H ;A=55H MOV R0,#40H ;load pointer. R0=40H,MOV R2,#05H ;load counter, R2=5AGAIN: MOV @R0,A ;copy 55 to RAM location; R0 points toINC R ;increment R0 pointerDJNZ R2,AGAIN ;loop until counter = 0
38Advantage of Register Indirect Addressing Mode One of the advantages of register indirect addressing mode is that it makes accessing data dynamic rather than static.Solution (c) in Example 5-3 is the most efficient and is possible only because of register indirect addressing mode.Looping is not possible in direct addressing mode.See Examples 5-4, 5-5, too.Their use is limited to accessing any information in the internal RAM.Use looping is more flexible too.If we need to access externally connected RAM or on-chip ROM, we need a 16-bit pointer. In such cases, the DPTR register is used. That is, indexed addressing mode.
39Example 5-4Write a program to clear 16 RAM locations starting at RAM address60H.Solution:CLR A ;A=0MOV R1,#60H ;load pointer. R1=60HMOV R7,#16 ;load counter, R7=10HAGAIN: MOV @R1,A ;clear RAM location R1; points toINC R ;increment R1 pointerDJNZ R7,AGAIN ;loop until counter = 0
40Example 5-5Write a program to copy a block of 10 bytes of data from RAM locations starting at 35H to RAM locations starting at 60H.Solution:MOV R0,#35H ;source pointerMOV R1,#60H ;destination pointerMOV R3,#10 ;counterBACK: MOV ;get a byte from sourceMOV @R1,A ;copy it to destinationINC R ;increment source pointerINC R ;increment destination; pointerDJNZ R3,BACK ;keep doing it 10 times
41Addressing Mode 5 1. immediate － the operand is a constant MOV A,#01FH2. register － the operand is in a registerMOV A,R03. direct － access the data in the RAM with addressMOV A,01FH4. register indirect － the register holds the RAM address of the dataMOV5. indexed － for on-chip ROM accessMOVC
42Indexed Addressing Mode Indexed addressing mode is widely used in accessing data elements of look-up table entries located in the program ROM space of the 8051.A look-up table is a ROM block where the data is given previously (then you can access it frequently).The instruction used for this purpose is MOVC.DPTR can be used to access memory externally connected to the See Chapter 14.Another register used in indexed addressing mode is the PC. See Appendix A.
43MOVC Copy the source operand to the destination operand. MOVC A, @A+DPTRThe “C” means code (program code in on-chip ROM).A+DPTR is the address of the data element stored in on-chop ROM.Put the ROM value to A.
44Example of MOVC Register Indexed addressing Mode： MOV DPTR,#MYDATAE CLR AMOVCF MOV R0,AFE HERE: SJMP HEREMYDATA: DB "USA“DPTR=#MYDATA=0008HA+DPTR=0008HROME4:A 41A H
45Example 5-6 (1/2)In this program, assume that the word “USA” is burned into ROMlocations starting at 200H, and that the program is burned intoROM locations starting at 0. Analyze how the program works andstate where “USA” is stored after this program is run.Solution:ROME4:DPTR H HA+DPTR= 0200HU S AR HA HR HR H
46Example 5-6 (2/2) ORG 0000H ;burn into ROM from 0 MOV DPTR,#200H ;DPTR=200HCLR A ;clear A(A=0)MOVC ;get the char spaceMOV R0,A ;save it in R0INC DPTR ;DPTR=201MOVC ;get the next charMOV R1,A ;save it in R1INC DPTR ;DPTR=202MOV R2,A ;save it in R2HERE:SJMP HERE ;stay hereORG 200HMYDATA: DB “USA”END ;end of program
47Example 5-7 (1/2)Assuming that ROM space starting at 250H contains “America”, write a program to transfer the bytes into RAM locations starting at 40H.Solution of (a) This method uses a counter：ORG 0000MOV DPTR,#MYDATA ;InitializationMOV R0,#40HMOV R2,#7BACK: CLR AMOVCMOV @R0,AINC DPTRINC R0DJNZ R2,BACKHERE: SJMP HEREORG 250HMYDATA: DB “AMERICA”ENDROMRAM:DD EAME R I C A NA 41R0 40DPTR
48Example 5-7 (2/2)Solution of (b) This method uses null char for end of string：ORG 0000MOV DPTR,#MYDATAMOV R0,#40H ;No “MOV R2,#7”BACK: CLR AMOVCJZ HERE ;if A=0MOV @R0,A ;leave the blockINC DPTRINC R0SJMP BACKHERE: SJMP HEREORG 250HMYDATA: DB “AMERICA”,0 ;notice null char;for end of stringEND
49Example 5-8Write a program to get the x value from P1 and send x2 to P2,continuously.Solution:ORG 0MOV DPTR,#XSQR_TABLEMOV A,#0FFHMOV P1,A ;P1 as INPUT PORTBACK: MOV A,P ;GET XMOVC ;Count the addr.MOV P2,A ;Issue it to P2SJMP BACKORG 300HXSQR_TABLE:DB 0,1,4,9,16,25,36,49,64,81ENDPlease trace the program by set A=0, then A=1, then A=2,....
50Example 5-9 Answer the following questions for Example 5-8. (a) Indicate the content of ROM locations H.(b) At what ROM location is the square of 6, and what value shouldbe there?(c) Assume that P1 has a value of 9: what value is at P2 (in binary)?Solution:(a) All values are in hex.300 = (00) 301 = (01) 302 = (04) 303 = (09)304 = (10) 4×4=16=10H305 = (19) 5×5=25=19H306 = (24) 6×6=36=24H307 = (31) 308 = (40) 309 = (51)(b) ROM Addr.=306H; the value 24H=36(c) P2 = B=51H=81 in decimal.
51You are able toList the 5 addressing modes of the 8051 microcontrollerContrast and compare the addressing modesCode 8051 Assembly language instructions using each addressing modeList the SFR（special function registers）addressDiscuss how to access the SFRManipulate the stack using direct addressing modeCode 8051 instructions to manipulate a look-up table
52Homework Chapter 5 Problems：2,3,8,11,12,13 Note: Please write and compile the program of Problems 8,11,12,13.