Instructions
Arithmetic instructions:
Addressing modes
Dir Ind Reg Imm
add a,<byte> X X X X
addc a,<byte> X X X X
subb a,<byte> X X X X
inc a A only
inc <byte> X X X
dec a A only
dec <byte> X X X
mul ab A and B only
div ab A and B only
da a A only
mul multiplies A and B
the high order byte of the 16 bit result is in B
the low order byte in A
div divides A by B
the answer is placed in A
the remainder is in B
da is decimal adjust accumulator, and follows any add or addc instruction working with BCD arithmetic
Logical instructions:
Addressing modes
Dir Ind Reg Imm
anl a,<byte> X X X X
anl <byte>,a X
anl <byte>,#data X
same for orl and xrl
clr a A only
cpl a A only
rl a A only
rlc a A only
same for rr
swap a A only
anl AND
orl OR
xrl XOR
clr clear
cpl NOT
rl rotate left 1 bit
rlc rotate left through carry
rr rotate right
swap low nibble (4 bits) of A with high nibble
Data transfer:
Addressing modes
Dir Ind Reg Imm
mov a,<src> X X X X
mov <dst>,a X X X
mov <dst>,<src> X X X X
push <src> X
pop <dst> X
xch a,<byte> X X X
xchd a,@Ri X
mov instructions are the same as high level language assignment statements.
push has the same effect as:
inc sp
mov “@sp”,<src>
pop has the same effect as:
mov <dst>,“@sp”
dec sp
xch exchanges the contents of A with <byte>
xchd exchanges the low nibble of A with the low nibble of the address pointed to by R0 or R1
The 2051 is capable of addressing single bits.
In RAM these bits are equivalent to the byte addresses 20h to 2fh.
These bits are numbered 0 - 7fh
Some SFR registers can be bit addressed.
These bits have symbols associated with them and are normally accessed via the symbol. Otherwise they are numbered 80 - 0ffh
Boolean Instructions:
anl c,bit ;c = c and bit
anl c,/bit ;c = c and not bit
same for orl
mov c,bit ;c = bit
mov bit,c ;bit = c
clr c ;c = 0
clr bit ;bit = 0
setb c ;c = 1
setb bit ;bit = 1
cpl c ;c = not c
cpl bit ;bit = not bit
jc rel ;jump if c == 1
jnc rel ;jump if c != 1
jb bit,rel ;jump if bit == 1
jnb bit,rel ;jump if bit != 1
jbc bit,rel ;jump if bit == 1
;then clear bit
Program Branching:
jmp addr ;or sjmp/ajmp/ljmp
call addr ;or acall/lcall
ret ;return from subroutine
nop ; no operation
jz rel ;jump if A == 0
jnz rel ;jump if A != 0
djnz <byte>,rel ;decrement, jmp if !=0
cjne a,<byte>,rel ;jump if A != <byte>
cjne <byte>,#data,rel ;jump if <byte> != #data
jmp or call may be used as generic instructions.
The assembler will choose which specific instruction to use. Sometimes it does not choose the best! Forward jmp's will be converted to ljmp's.
relative addresses are -128 to 127 bytes from the PC.
PC will already be pointing to the next instruction
The $ sign is interpreted by the assembler as current location counter
sjmp $
is an infinite loop.
The relative offset is not 0 though!
It is 0feh
159.233
Assembler 6 -