0% found this document useful (0 votes)
140 views30 pages

Instruction Groups: The 8051 Has 255 Instructions - Every 8-Bit Opcode From 00 To FF Is Used Except For A5.

The document provides an overview of the instruction set of the 8051 microcontroller. It describes that the 8051 has 255 instructions grouped into 5 categories: arithmetic, logic, data transfer, boolean, and branching. It provides examples of instructions such as ADD, MOV, JMP. It explains how instructions operate on data, registers, flags. Conditional jumps depend on flag values. Subroutine calls use the stack. Target addresses can be absolute or relative.

Uploaded by

VLC350Z
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
140 views30 pages

Instruction Groups: The 8051 Has 255 Instructions - Every 8-Bit Opcode From 00 To FF Is Used Except For A5.

The document provides an overview of the instruction set of the 8051 microcontroller. It describes that the 8051 has 255 instructions grouped into 5 categories: arithmetic, logic, data transfer, boolean, and branching. It provides examples of instructions such as ADD, MOV, JMP. It explains how instructions operate on data, registers, flags. Conditional jumps depend on flag values. Subroutine calls use the stack. Target addresses can be absolute or relative.

Uploaded by

VLC350Z
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 30

INSTRUCTION SET

Instruction Groups
The 8051 has 255 instructions
– Every 8-bit opcode from 00 to FF is used
except for A5.
• The instructions are grouped into 5 groups
– Arithmetic
– Logic
– Data Transfer
– Boolean
– Branching
INSTRUCTION SET

Arithmetic Instructions
• ADD
– 8-bit addition between the accumulator (A) and a
second operand.
• The result is always in the accumulator.
• The CY flag is set/reset appropriately.

• ADDC
– 8-bit addition between the accumulator, a second
operand and the previous value of the CY (carry) flag.
• Useful for 16-bit addition in two steps.
• The CY flag is set/reset appropriately.
INSTRUCTION SET
Example – 16-bit Addition
Add 1E44H to 56CAH

CLR C ; Clear the CY flag


MOV A, 44H ; The lower 8-bits of the 1st number
ADD A, CAH ; The lower 8-bits of the 2nd number
MOV R1, A ; The result 0EH will be in R1. CY = 1.
MOV A, 1EH ; The upper 8-bits of the 1st number
ADDC A, 56H ; The upper 8-bits of the 2nd number
MOV R2, A ; The result of the addition is 75H

The overall result : 750EH will be in R2:R1. CY = 0.


INSTRUCTION SET
Arithmetic Instructions
• DA
– Decimal adjust the accumulator.
• Format the accumulator into a proper 2 digit packed BCD
number.
• Operates only on the accumulator.
• Works only after the ADD instruction.

• SUBB
– Subtract with Borrow.
• Subtract an operand and the previous value of the
borrow (carry) flag from the accumulator.
– A ← A - <operand> - CY.
– The result is always saved in the accumulator.
– The CY flag is set/reset appropriately.
INSTRUCTION SET
Example – BCD addition
Add 34 to 49 BCD

CLR C ; Clear the CY flag


MOV A, #34H ; Place 1st number in A
ADD A, #49H ; Add the 2nd number.
; A = 7DH
DA A ; A = 83H
INSTRUCTION SET
Arithmetic Instructions

• INC
– Increment the operand by one.
• The operand can be a register, a direct address, an
indirect address, the data pointer.
• DEC
– Decrement the operand by one.
• The operand can be a register, a direct address, an
indirect address.
• MUL AB / DIV AB
– Multiply A by B and place result in A:B.
– Divide A by B and place result in A:B.
INSTRUCTION SET

Logical Operations
• ANL / ORL
– Work on byte sized operands or the CY flag.
• ANL A, Rn
• ANL A, direct
• ANL A, @Ri
• ANL A, #data
• ANL direct, A
• ANL direct, #data
• ANL C, bit – direct bit Carry
• ANL C, /bit –complement direct bit Carry
INSTRUCTION SET

Logical Operations
• XRL
– Works on bytes only.

• CPL / CLR
– Complement / Clear.
– Work on the accumulator or a bit.
• CLR P1.2
INSTRUCTION SET

Logical Operations

• RL / RLC / RR / RRC
– Rotate the accumulator.
• RL and RR without the carry
• RLC and RRC rotate through the carry.
• SWAP A
– Swap the upper and lower nibbles of the
accumulator.
• No compare instruction.
– Built into conditional branching instructions.
INSTRUCTION SET
Data Transfer Instructions
• MOV
– 8-bit data transfer for internal RAM and the SFR.

• MOV A, Rn • MOV direct, Rn


• MOV A, direct • MOV direct, direct
• MOV A, @Ri • MOV direct, @Ri
• MOV A, #data • MOV direct, #data
• MOV Rn, A • MOV @Ri, A
• MOV Rn, direct • MOV @Ri, direct
• MOV Rn, #data • MOV @Ri, #data
• MOV direct, A
INSTRUCTION SET

Data Transfer Operations


• MOV
– 1bit data transfer involving the CY flag
• MOV C, bit
• MOV bit, C
• MOV
– 16-bit data transfer involving the DPTR
• MOV DPTR, #data
INSTRUCTION SET

Data Transfer Instructions


• MOVC
– Move Code Byte
• Load the accumulator with a byte from
program memory.
• Must use indexed addressing
• MOVC A, @A+DPTR
• MOVC A, @A+PC
INSTRUCTION SET

Data Transfer Instructions

• MOVX
– Data transfer between the accumulator and
a byte from external data memory.
• MOVX A, @Ri
• MOVX A, @DPTR
• MOVX @Ri, A
• MOVX @DPTR, A
INSTRUCTION SET

Data Transfer Instructions

• PUSH / POP
– Push and Pop a data byte onto the stack.
– The data byte is identified by a direct
address from the internal RAM locations.
• PUSH DPL
• POP 40H
INSTRUCTION SET
Data Transfer Instructions

• XCH
– Exchange accumulator and a byte variable
• XCH A, Rn
• XCH A, direct
• XCH A, @Ri

• XCHD
– Exchange lower digit of accumulator with the lower digit of
the memory location specified.
• XCHD A, @Ri
• The lower 4-bits of the accumulator are exchanged with the lower
4-bits of the internal memory location identified
indirectly by the index register.
• The upper 4-bits of each are not modified.
INSTRUCTION SET

Boolean Operations
• This group of instructions is associated with the
single-bit operations of the 8051.
• This group allows manipulating the individual bits
of bit addressable registers and memory locations as
well as the CY flag.
– The P, OV, and AC flags cannot be directly
altered.
• This group includes:
– Set, clear, and, or complement, move.
– Conditional jumps.
INSTRUCTION SET
Boolean Operations

• CLR
– Clear a bit or the CY flag.
• CLR P1.1
• CLR C
• SETB
– Set a bit or the CY flag.
• SETB A.2
• SETB C
• CPL
– Complement a bit or the CY flag.
• CPL 40H; Complement bit 40 of the bit
addressable memory
INSTRUCTION SET

Boolean Operations

• ORL / ANL
– OR / AND a bit with the CY flag.
• ORL C, 20H ; OR bit 20 of bit addressable memory
with the CY flag
• ANL C, /34H ; AND complement of bit 34 of bit
addressable memory with the CY flag.
• MOV
– Data transfer between a bit and the CY flag.
• MOV C, 3FH ; Copy the CY flag to bit 3F of the
bit addressable memory.
• MOV P1.2, C ; Copy the CY flag to bit 2 of P1.
INSTRUCTION SET

Boolean Operations

• JC / JNC
– Jump to a relative address if CY is set / cleared.
• JB / JNB
– Jump to a relative address if a bit is set / cleared.
• JB ACC.2, <label>
• JBC
– Jump to a relative address if a bit is set and clear
the bit.
INSTRUCTION SET
Program Control Instructions
• Unconditional Branch
– ajmp addr11 ; absolute jump
– ljmp addr16 ; long jump
– sjmp rel ; short jump to relative address
– jmp @A+DPTR ; jump indirect

• Conditional branch
– jz, jnz rel ; short conditional jump to rel. addr
– djnz rel ; decrement and jump if not zero
– cjne rel ; compare and jump if not equal

• Subroutine Call
– acall addr11 ; absolute subroutine call
– lcall addr16 ; long subroutine call
– ret ; return from subroutine call
– reti ; return from ISV
INSTRUCTION SET
Target Address
• Target address can be,
– absolute: A complete physical address
• addr16: 16 bit address, anywhere in the 64k
• addr11: 11 bit address, anywhere within 2k page.
– rel: relative (forward or backward) -128 bytes to
+127 bytes from the current code location

• Target address calculation for relative jumps


– PC of next instruction + rel address
– For jump backwards, drop the carry
• PC = 15H, SJMP 0FEH
• Address is 15H + FEH = 13H
• Basically jump to next instruction minus two
(current instruction)
INSTRUCTION SET
Branching Instructions
• The 8051 provides four different types of unconditional jump
instructions:
– Short Jump – SJMP
• Uses an 8-bit signed offset relative to the 1st byte of
the next instruction.
• SJMP rel
– Jump to a relative address from PC+127 to PC-128
» Jump to PC + 127 (00H – 7FH)
» Jump to PC – 128 (80H – FFH)

– Long Jump – LJMP


• Uses a 16-bit address.
• 3 byte instruction capable of referencing any location in
the entire 64K of program memory.
INSTRUCTION SET
Branching Instructions

– Absolute Jump – AJMP


• Uses an 11-bit address.
• 2 byte instruction
– The upper 3-bits of the address combine with the 5-
bit opcode to form the 1st byte and the lower 8-bits
of the address form the 2nd byte.
• The 11-bit address is substituted for the lower 11-bits of
the PC to calculate the 16-bit address of the target.
– The location referenced must be within the 2K Byte
memory page containing the AJMP instruction.

– Indirect Jump – JMP


• JMP @A + DPTR
INSTRUCTION SET
Branching Instructions

• The 8051 provides 2 forms for the CALL instruction:


– Absolute Call – ACALL
• Uses an 11-bit address similar to AJMP
• The subroutine must be within the same 2K page.
• 2 byte instruction.

– Long Call – LCALL


• Uses a 16-bit address similar to LJMP
• The subroutine can be anywhere.
• 3 byte instruction.

– Both forms push the 16-bit address of the next


instruction on the stack and update the stack pointer.
INSTRUCTION SET

Branching Instructions

• The 8051 provides 2 forms for the return instruction:


– Return from subroutine – RET
• Pop the return address from the stack and continue
execution there.
– Return from ISV – RETI
• Pop the return address from the stack.
• Restore the interrupt logic to accept additional
interrupts at the same priority level as the one just
processed.
• Continue execution at the address retrieved from
the stack.
• The PSW is not automatically restored.
INSTRUCTION SET
Branching Instructions

• The 8051 supports 5 different conditional jump


instructions.
– ALL conditional jump instructions use an 8-bit
signed offset

– Jump on Zero – JZ / JNZ


• Jump if the A == 0 / A != 0
– The check is done at the time of the instruction
execution.

– Jump on Carry – JC / JNC


• Jump if the C flag is set / cleared.
INSTRUCTION SET

Branching Instructions

– Jump on Bit – JB / JNB


• Jump if the specified bit is set / cleared.
• Any addressable bit can be specified.

– Jump if the Bit is set then Clear the bit – JBC


• Jump if the specified bit is set.
• Then clear the bit.
INSTRUCTION SET

Branching Instructions

• Compare and Jump if Not Equal – CJNE


– Compare the magnitude of the two
operands and jump if they are not equal.
• The values are considered to be unsigned.
• The Carry flag is set / cleared appropriately.
• CJNE A, direct, rel
• CJNE A, #data, rel
• CJNE Rn, #data, rel
• CJNE @Ri, #data, rel
INSTRUCTION SET

Branching Instructions

• Decrement and Jump if Not Zero – DJNZ


– Decrement the first operand by 1 and jump
to the location identified by the second operand if
the resulting value is not zero.
• DJNZ Rn, rel
• DJNZ direct, rel

• No Operation
– NOP
INSTRUCTION SET
Loop using djnz

• Add 3 to A ten times


mov A, #0 ; clear A
mov R2, #10 ; R2 ← 10, can also say 0AH
AGAIN: add A, #03 ; add 3 to A
djnz R2, AGAIN ; repeat until R2==0
mov R5, A ; save the result in R5

• Loop within loop using djnz


mov R3, #100
loop1: mov R2, #10 ; trying for 1000 loop iterations
loop2: nop ; no operation
djnz R2, loop2 ; repeat loop2 until R2==0
djnz R3, loop1 ; repeat loop1 until R3==0

You might also like