Jump, Loop and Call Instructions
Jump, Loop and Call Instructions
Chung-Ping Young
Home Automation, Networking, and Entertainment Lab
Dept. of Computer Science and Information Engineering National Cheng Kung University, TAIWAN
loop
;This program adds value 3 to the ACC ten times MOV A,#0 ;A=0, clear ACC MOV R2,#10 ;load counter R2=10 AGAIN: ADD A,#03 ;add 03 to ACC DJNZ R2,AGAIN ;repeat until R2=0,10 times MOV R5,A ;save A in R5 HANEL
Department of Computer Science and Information Engineering National Cheng Kung University, TAIWAN
If we want to repeat an action more times than 256, we use a loop inside a loop, which is called nested loop
We use multiple registers to hold the count
Write a program to (a) load the accumulator with the value 55H, and (b) complement the ACC 700 times MOV MOV NEXT: MOV AGAIN: CPL DJNZ DJNZ A,#55H ;A=55H R3,#10 ;R3=10, outer loop count R2,#70 ;R2=70, inner loop count A ;complement A register R2,AGAIN ;repeat it 70 times R3,NEXT
HANEL
Department of Computer Science and Information Engineering National Cheng Kung University, TAIWAN
Determine if R5 contains the value 0. If so, put 55H in it. MOV JNZ MOV ... A,R5 ;copy R5 to A NEXT ;jump if A is not zero R5,#55H
NEXT:
HANEL
Department of Computer Science and Information Engineering National Cheng Kung University, TAIWAN
If CY = 0, the CPU starts to fetch and execute instruction from the address of the label If CY = 1, it will not jump but will execute the next instruction below JNC
Find the sum of the values 79H, F5H, E2H. Put the sum in registers R0 (low byte) and R5 (high byte). MOV R5,#0 MOV A,#0 ;A=0 MOV R5,A ;clear R5 ADD A,#79H ;A=0+79H=79H ; JNC N_1 ;if CY=0, add next number ; INC R5 ;if CY=1, increment R5 N_1: ADD A,#0F5H ;A=79+F5=6E and CY=1 JNC N_2 ;jump if CY=0 INC R5 ;if CY=1,increment R5 (R5=1) N_2: ADD A,#0E2H ;A=6E+E2=50 and CY=1 JNC OVER ;jump if CY=0 INC R5 ;if CY=1, increment 5 OVER: MOV R0,A ;now R0=50H, and R5=02
Department of Computer Science and Information Engineering National Cheng Kung University, TAIWAN
5
HANEL
Instructions JZ JNZ DJNZ CJNE A,byte CJNE reg,#data JC JNC JB JNB JBC
Actions Jump if A 0 Jump if A 0 Decrement and Jump if A 0 Jump if A byte Jump if byte #data Jump if CY 1 Jump if CY 0 Jump if bit 1 Jump if bit 0 Jump if bit 1 and clear bit
The unconditional jump is a jump in LOOP AND which control is transferred JUMP unconditionally to the target location INSTRUCTIONS LJMP (long jump)
Unconditional Jumps 3-byte instruction
First byte is the opcode Second and third bytes represent the 16-bit target address Any memory location from 0000 to FFFFH SJMP
(short jump)
2-byte instruction
First byte is the opcode Second byte is the relative target address 00 to FFH (forward +127 and backward -128 bytes from the current PC)
HANEL
Department of Computer Science and Information Engineering National Cheng Kung University, TAIWAN
To calculate the target address of a short jump (SJMP, JNC, JZ, DJNZ, etc.)
The second byte is added to the PC of the instruction immediately below the jump
If the target address is more than -128 to +127 bytes from the address below the short jump instruction
The assembler will generate an error stating the jump is out of range
HANEL
Department of Computer Science and Information Engineering National Cheng Kung University, TAIWAN
Line
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18
PC
0000 0000 0002 0004 0006 0007 0008 0009 000B 000D 000E 000F 0010 0011 0012 0013 0015 0017
Opcode
7800 7455 6003 08 04 + 04 2477 5005 E4 F8 + F9 FA FB 2B 50F2 80FE
Mnemonic Operand
ORG MOV MOV JZ INC INC INC ADD JNC CLR MOV MOV MOV MOV ADD JNC SJMP END 0000 R0,#0 A,#55H NEXT R0 A A A,#77H OVER A R0,A R1,A R2,A R3,A A,R3 AGAIN HERE
AGAIN: NEXT:
OVER:
HERE:
HANEL
Department of Computer Science and Information Engineering National Cheng Kung University, TAIWAN
CALL INSTRUCTIONS
(long call)
First byte is the opcode Second and third bytes are used for address of target subroutine Subroutine is located anywhere within 64K byte address space
3-byte instruction
ACALL
(absolute call)
11 bits are used for address within 2K-byte range
2-byte instruction
Department of Computer Science and Information Engineering National Cheng Kung University, TAIWAN
HANEL
10
HANEL
11
BACK:
Upon executing LCALL DELAY, the address of instruction below it, MOV A,#0AAH is pushed onto stack, and the 8051 starts to execute at 300H.
;---------- this is delay subroutine -----------ORG 300H ;put DELAY at address 300H DELAY: MOV R5,#0FFH ;R5=255 (FF in hex), counter AGAIN: DJNZ R5,AGAIN ;stay here until R5 become 0 RET ;return to caller (when R5 =0) END ;end of asm file
The amount of time delay depends on the frequency of the 8051 HANEL
When R5 becomes 0, control falls to the RET which pops the address from the stack into the PC and resumes executing the instructions after the CALL.
12
Department of Computer Science and Information Engineering National Cheng Kung University, TAIWAN
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016
0000 0000 0002 0004 0007 0009 000B 000E 0010 0010 0300 0300 0300 0302 0304 0305
ORG 0 MOV A,#55H MOV P1,A LCALL DELAY MOV A,#0AAH MOV P1,A LCALL DELAY SJMP BACK
55H p1 AAH p1
;-------this is the delay subroutine-----ORG 300H DELAY: 7DFF MOV R5,#0FFH ;R5=255 DDFE AGAIN: DJNZ R5,AGAIN ;stay here 22 RET ;return to caller END ;end of asm file
SP = 09
HANEL
Department of Computer Science and Information Engineering National Cheng Kung University, TAIWAN
13
01 02 03 04 05 06 07 08 09 10
11 12 13 14 15 Normally, the number of PUSH 16 17 and POP instructions must 18 19 always match in any 20 called subroutine 21 22
0000 0000 0002 0004 0006 0008 000B 000D 000F 0012 this 0014 0300 0300 0302 0304 0306 0308 030A 030C 030E 0310 0311
7455 BACK: F590 7C99 7D67 120300 74AA F590 120300 80EC
ORG 0 MOV A,#55H MOV P1,A MOV R4,#99H MOV R5,#67H LCALL DELAY MOV A,#0AAH MOV P1,A LCALL DELAY SJMP BACK
;load A with 55H ;send 55H to p1 ;time delay ;load A with AA ;send AAH to p1 ;keeping doing
;-------this is the delay subroutine-----ORG 300H C004 DELAY: PUSH 4 ;push R4 C005 PUSH 5 ;push R5 7CFF MOV R4,#0FFH;R4=FFH 7DFF NEXT: MOV R5,#0FFH;R5=FFH DDFE AGAIN: DJNZ R5,AGAIN DCFA DJNZ R4,NEXT D005 POP 5 ;POP into R5 D004 POP 4 ;POP into R4 22 RET ;return to caller END PUSH 4 ;end of asm file After first LCALL After After PUSH 5 0B 0A 0B 0A 99 R4 0B 0A 67 99 R5 R4
HANEL
09 00 PCH 09 00 PCH 09 00 PCH Department of Computer Science and Information Engineering 08 0B PCL 08 0B PCL 08 0B PCL National Cheng Kung University, TAIWAN
14
;MAIN program calling subroutines ORG 0 It is common to have one MAIN: LCALL SUBR_1 main program and many LCALL SUBR_2 subroutines that are called LCALL SUBR_3
SUBR_3: ... ... RET ;-----------end of subroutine3 END ;end of the asm file
This allows you to make each subroutine into a separate module - Each module can be tested separately and then brought together with main program - In a large program, the module can be assigned to different programmers
HANEL
Department of Computer Science and Information Engineering National Cheng Kung University, TAIWAN
15
The use of ACALL instead of LCALL can save a number of bytes of program ROM space
HANEL
Department of Computer Science and Information Engineering National Cheng Kung University, TAIWAN
16
BACK:
ORG MOV MOV LCALL MOV MOV LCALL SJMP ... END
BACK:
HANEL
Department of Computer Science and Information Engineering National Cheng Kung University, TAIWAN
17
The length of machine cycle depends on the frequency of the crystal oscillator connected to 8051 In original 8051, one machine cycle lasts 12 oscillator periods
Find the period of the machine cycle for 11.0592 MHz crystal frequency
Solution:
HANEL
18
For 8051 system of 11.0592 MHz, find how long it takes to execute each instruction. (a) MOV R3,#55 (b) DEC R3 (c) DJNZ R2 target (d) LJMP (e) SJMP (f) NOP (g) MUL AB Solution: Machine cycles (a) 1 (b) 1 (c) 2 (d) 2 (e) 2 (f) 1 (g) 4
Time to execute 1x1.085s 1.085s 1x1.085s 1.085s 2x1.085s 2.17s 2x1.085s 2.17s 2x1.085s 2.17s 1x1.085s 1.085s 4x1.085s 4.34s
HANEL
Department of Computer Science and Information Engineering National Cheng Kung University, TAIWAN
19
Find the size of the delay in following program, if the crystal frequency is 11.0592MHz. MOV A,#55H AGAIN: MOV P1,A ACALL DELAY CPL A SJMP AGAIN ;---time delay------DELAY: MOV R3,#200 HERE: DJNZ R3,HERE RET Solution: Machine cycle DELAY: MOV R3,#200 1 HERE: DJNZ R3,HERE 2 RET 2 Therefore, [(200x2)+1+2]x1.085s 436.255s.
A simple way to short jump to itself in order to keep the microcontroller busy HERE: SJMP HERE We can use the following: SJMP $
HANEL
Department of Computer Science and Information Engineering National Cheng Kung University, TAIWAN
20
TIME DELAY FOR VARIOUS 8051 CHIPS Increasing Delay Using NOP
Find the size of the delay in following program, if the crystal frequency is 11.0592MHz. Machine Cycle DELAY: MOV R3,#250 1 HERE: NOP 1 NOP 1 NOP 1 NOP 1 DJNZ R3,HERE 2 RET 2 Solution: The time delay inside HERE loop is [250(1+1+1+1+2)]x1.085s 1627.5s. Adding the two instructions outside loop we have 1627.5s + 3 x 1.085s 1630.755s
HANEL
Department of Computer Science and Information Engineering National Cheng Kung University, TAIWAN
21
TIME DELAY FOR VARIOUS 8051 CHIPS Large Delay Using Nested Loop
Find the size of the delay in following program, if the crystal frequency is 11.0592MHz. Machine Cycle DELAY: MOV R2,#200 1 Notice in nested loop, AGAIN: MOV R3,#250 1 as in all other time HERE: NOP 1 delay loops, the time NOP 1 is approximate since DJNZ R3,HERE 2 we have ignored the DJNZ R2,AGAIN 2 first and last RET 2 instructions in the subroutine. Solution: For HERE loop, we have (4x250)x1.085s1085s. For AGAIN loop repeats HERE loop 200 times, so we have 200x1085s217000s. But MOV R3,#250 and DJNZ R2,AGAIN at the start and end of the AGAIN loop add (3x200x1.805)=651s. As a result we have 217000+651=217651s.
HANEL
Department of Computer Science and Information Engineering National Cheng Kung University, TAIWAN
22
TIME DELAY FOR VARIOUS 8051 CHIPS Delay Calculation for Other 8051
8051 design
The original machine cycle duration was set at 12 clocks Advances in both IC technology and CPU design in recent years have made the 1-clock machine cycle a common feature
Clocks per machine cycle for various 8051 versions
Chip/Maker AT89C51 Atmel P89C54X2 Philips DS5000 Dallas Semi DS89C420/30/40/50 Dallas Semi Clocks per Machine Cycle 12 6 4 1
23
HANEL
Department of Computer Science and Information Engineering National Cheng Kung University, TAIWAN
TIME DELAY FOR VARIOUS 8051 CHIPS Delay Calculation for Other 8051
(cont)
Find the period of the machine cycle (MC) for various versions of 8051, if XTAL=11.0592 MHz. (a) AT89C51 (b) P89C54X2 (c) DS5000 (d) DS89C4x0 Solution: (a) 11.0592MHz/12 = 921.6kHz; MC is 1/921.6kHz = 1.085s 1085ns (b) 11.0592MHz/6 = 1.8432MHz; MC is 1/1.8432MHz = 0.5425s 542ns (c) 11.0592MHz/4 = 2.7648MHz ; MC is 1/2.7648MHz = 0.36s 360ns (d) 11.0592MHz/1 = 11.0592MHz; MC is 1/11.0592MHz = 0.0904s 90ns
HANEL
Department of Computer Science and Information Engineering National Cheng Kung University, TAIWAN
24
TIME DELAY FOR VARIOUS 8051 CHIPS Delay Calculation for Other 8051
(cont)
Instruction MOV R3,#55 DEC R3 DJNZ R2 target LJMP SJMP NOP MUL AB
8051 1 1 2 2 2 1 4
DSC89C4x0 2 1 4 3 3 1 9
For an AT8051 and DSC89C4x0 system of 11.0592 MHz, find how long it takes to execute each instruction. (a) MOV R3,#55 (b) DEC R3 (c) DJNZ R2 target (d) LJMP (e) SJMP (f) NOP (g) MUL AB Solution: AT8051 (a) 1 1085ns (b) 1 1085ns (c) 2 1085ns (d) 2 1085ns (e) 2 1085ns (f) 1 1085ns (g) 4 1085ns DS89C4x0 90ns = 180ns 90ns = 90ns 90ns = 360ns 90ns = 270ns 90ns = 270ns 90ns = 90ns 90ns = 810ns
25
2 1 4 3 3 1 9
HANEL
Department of Computer Science and Information Engineering National Cheng Kung University, TAIWAN