Programming - Instruction Set
Programming - Instruction Set
Jump conditionally The program sequence is transferred to the memory location specified
by the 16-bit address given in the operand based on the specified flag
of the PSW as described below.
32. JC 16-bit address Jump on Carry, Flag Status: CY=1 JC 2050H
33. JNC 16-bit address Jump on no Carry, Flag Status: CY=0 JNC 2050H
34. JP 16-bit address Jump on positive, Flag Status: S=0 JP 2050H
35. JM 16-bit address Jump on minus, Flag Status: S=1 JM 2050H
36. JZ 16-bit address Jump on zero, Flag Status: Z=1 JZ 2050H
37. JNZ 16-bit address Jump on no zero, Flag Status: Z=0 JNZ 2050H
38. JPE 16-bit address Jump on parity even, Flag Status: P=1 JPE 2050H
39. JPO 16-bit address Jump on parity odd, Flag Status: P=0 JPO 2050H
40. CALL 16-bit address The program sequence is transferred to the memory CALL 2034H
location specified by the 16-bit address given in the CALL XYZ
operand. Before the transfer, the address of the next
instruction after CALL (the contents of the program
counter) is pushed onto the stack.
Call conditionally The program sequence is transferred to the memory location specified
by the 16-bit address given in the operand based on the specified flag
of the PSW as described below. Before the transfer, the address of the
next instruction after the call (the contents of the program counter) is
pushed onto the stack.
41. CC 16-bit address Call on Carry, Flag Status: CY=1 CC 2050H
42. CNC 16-bit address Call on no Carry, Flag Status: CY=0 CNC 2050H
43. CP 16-bit address Call on positive, Flag Status: S=0 CP 2050H
44. CM 16-bit address Call on minus, Flag Status: S=1 CM 2050H
45. CZ 16-bit address Call on zero, Flag Status: Z=1 CZ 2050H
46. CNZ 16-bit address Call on no zero, Flag Status: Z=0 CNZ 2050H
47. CPE 16-bit address Call on parity even, Flag Status: P=1 CPE 2050H
48. CPO 16-bit address Call on parity odd, Flag Status: P=0 CPO 2050H
Return from subroutine The program sequence is transferred from the subroutine to the calling
conditionally program based on the specified flag of the PSW as described below.
The two bytes from the top of the stack are copied into the program
counter, and program execution begins at the new address.
50. RC Return on Carry, Flag Status: CY=1 RC
51. RNC Return on no Carry, Flag Status: CY=0 RNC
52. RP Return on positive, Flag Status: S=0 RP
53. RM Return on minus, Flag Status: S=1 RM
54. RZ Return on zero, Flag Status: Z=1 RZ
55. RNZ Return on no zero, Flag Status: Z=0 RNZ
56. RPE Return on parity even, Flag Status: P=1 RPE
57. RPO Return on parity odd, Flag Status: P=0 RPO
58. PCHL The contents of registers H and L are copied into the PCHL
program counter. The contents of H are placed as the
high-order byte and the contents of L as the low-
order byte.
59. RST 0-7 The RST instruction is equivalent to a 1-byte call RST 3
instruction to one of eight memory locations
depending upon the number. The instructions are
generally used in conjunction with interrupts and
inserted using external hardware. However
these can be used as software instructions in a
program to transfer program execution to one of the
eight locations. The addresses are:
Instruction Restart Address
RST 0 0000H
RST 1 0008H
RST 2 0010H
RST 3 0018H
RST 4 0020H
RST 5 0028H
RST 6 0030H
RST 7 0038H
Serial Input
Data bit Interrupts InteSeri
Interrupt
al
pending if masked
Output
if bit=1
1. Write an ALP to load register B with data 14H, register C with FFH, register D
with 29H and register E with 67H.
MVI B, 14H
MVI C, FFH
MVI D, 29H
MVI E, 67H
HLT
MOV C, B
HLT
MOV A, B
HLT
4. write an ALP which directly store data 56H into memory location 2050H.
LXI H, 2050H
MVI M, 56H
HLT
5. Write an 8085 assembly language program for exchanging two 8-bit numbers
stored in memory locations 2050h and 2051h.
LDA 2050H
MOV B, A
LDA 2051H
STA 2050H
MOV A, B
STA 2051H
HLT
MOV B, D
MOV C, E
MOV D, H
MOV E, L
HLT
MOV L, C
XCHG ; The contents of register H are exchanged with the contents of register D, and the
MOV B, H
MOV C, L
HLT
7. Write the set of 8085 assembly language instructions to store the contents of B
and C registers on the stack.
MVI B, 50H
MVI C, 60H
PUSH B
PUSH C
HLT
8. Write an ALP to delete (Make 00H) the data byte stored at memory location
from address stores in register DE.
MVI A, 00H
STAX D
HLT
9. Write an 8085 assembly language program to add two 8-bit numbers stored in
memory locations 2050h and 2051h. Store result in location 2052h.
LXI H 2050H
MOV A M
INX H
ADD M
MOV M A
HLT
10. Subtract 8 bit data stored at memory location 2050H from data stored at
memory location 2051H and store result at 2052H.
LXI H 2050H
MOV A M
INX H
SUB M ; A = A - M
INX H
MOV M A
HLT
11. Write an 8085 assembly language program to add two 16-bit numbers
stored in memory.
LHLD 2050H
XCHG ; The contents of register H are exchanged with the contents of register D, and the
LHLD 2052H
MOV A E
ADD L
MOV L A
MOV A D
ADC H
MOV H A
SHLD 2054H ; Store Value of L Register at 2054 and value of H register at 2055.
HLT
12. Write an 8085 assembly language program to find the number of 1’s binary
representation of given 8-bit number.
MVI B 00H
MVI C 08H
MOV A D
JNC SKIP
INR B
JNZ BACK
HLT
ORA C
ANA E
MOV D A
HLT
14. Write an 8085 assembly language program to add two decimal numbers
using DAA instruction.
LXI H 2050H
MOV A M
INX H
MOV B M
MVI C 00H
ADD B
JNC SKIP
INR C
MOV M A
INX H
MOV M C
HLT
MOV B A
LDA 2051H
CMP B
JNC SMALL
STA 2052H
HLT
SMALL: MOV A B
STA 2052H
HLT
16. Write an 8085 program to copy block of five numbers starting from
location 2001h to locations starting from 3001h.
LXI D 3100H
MVI C 05H
LXI H 2100
LOOP: MOV A M
STAX D
INX D
INX H
DCR C
JNZ LOOP
HLT
17. An array of ten data bytes is stored on memory locations 2100H onwards.
Write an 8085 assembly language program to find the largest number and
store it on memory location 2200H.
LXI H 2100H
MVI C 0AH
MOV A M
DCR C
LOOP: INX H
JNC AHED
MOV A M
AHED: DCR C
JNZ LOOP
STA 2200H
HLT
18. Write an 8085 assembly language program to add block of 8-bit numbers.
LXI H 2000H
LXI B 3000H
LXI D 4000H
BACK: LDAX B
ADD M
STAX D
INX H
INX B
INX D
MOV A L
CPI 0A
JNZ BACK
HLT
19. Write an 8085 assembly language program to count the length of string
ended with 0dh starting from location 2050h (Store length in register B).
LXI H 2050H
MVI B 00H
BACK: MOV A M
INR B
INX H
CPI 0DH
DCR B
HLT
20. An array of ten numbers is stored from memory location 2000H onwards.
Write an 8085 assembly language program to separate out and store the EVEN
and ODD numbers on new arrays from 2100H and 2200H, respectively.
LXI H 2000H
LXI D 2100H
LXI B 2200H
MVI A 0AH
MOV A M
ANI 01H
JNZ CARRY
MOV A M
STAX B
INX B
JMP JUMP
STAX D
INX D
DCR A
INX H
JNZ COUNTER
HLT
21. An array of ten data bytes is stored on memory locations 2100H onwards.
Write an 8085 assembly language program to find the bytes having
complemented nibbles (e.g. 2DH, 3CH, 78H etc.) and store them on a new array
starting from memory locations 2200H onwards.
LXI H 2100H
LXI D 2200H
LOOP: MOV A M
ANI 0FH
MOV B A
MOV A M
ANI F0H
RRC
RRC
RRC
RRC
CPM B
JNZ NEXT
MOV A M
STAX D
INX D
NEXT: INX H
DCR C
JNZ LOOP
HLT
22. Write an 8085 assembly language program to count the positive numbers,
negative numbers, zeros, and to find the maximum number from an array of
twenty bytes stored on memory locations 2000H onwards. Store these three
counts and the maximum number on memory locations 3001H to 3004H,
respectively.
LXI H 2000
MVI C 14
MVI D 00
MVI B 00
MVI E 00
LOOP: MOV A M
CMP B
JNZ POS
INX H
DCR C
JNZ LOOP
JMP STORE
INX H
DCR C
JNZ LOOP
JMP STORE
INX H
DCR C
JNZ LOOP
JMP STORE
STORE: MOV A E
STA 3001
MOV A D
STA 3002
LXI H 2000
MVI C 14
MVI D 00
MVI B 00
LOOP1: MOV A M ; Main Program for count Zero And Find Maximum.
CMP B
JZ ZERO
JNC MAX
INX H
DCR C
JNZ LOOP1
JMP STORE1
INX H
DCR C
JNZ LOOP1
JMP STORE1
JC SKIP
MOV E A
SKIP: INX H
DCR C
JNZ LOOP1
JMP STORE1
STA 3003
MOV A E
23. Write an 8085 assembly language program to separate out the numbers
between 2010 and 4010 from an array of ten numbers stored on memory
locations 2000H onwards. Store the separated numbers on a new array from
3000H onwards.
LXI H 2000
LXI D 3000
MVI C 0A
LOOP: MOV A M
CPI 14
JZ NEXT
JC NEXT
CPI 28
JNC NEXT
STAX D
INX D
DCR C
JNZ LOOP
HLT
24. Write an 8085 assembly language program sort an array of twenty bytes
stored on memory locations 2000H onwards in descending order.
MVI B 14
MVI C 13
L1: MOV A M
INX H
CMP M
JC SWAP
bACK: DCR C
JNZ L1
JNZ L2
HLT
MOV M A
DCX H
MOV M D
INX H
JMP BACK
MVI C 01H
LXI H 4101H
SHLD 3000H
LDA 4100H
STA 4200H
; This program fetch one by one value from original array and sore it on new array if it is not duplicate.
MOV A M
INX H
DCR B
JZ OVER
SHLD 3000H
LXI H 4200H
MOV D C
L2: CMP M
JZ L1
DCR D
JNZ L2
MOV M A
INR C
JMP L1
OVER: HLT
26. Write an ALP to Pack the two unpacked BCD numbers stored in memory
locations 2200H and 2201H and store result in memory location 2300H.
Assume the least significant digit is stored at 2200H.
LDA 2201
RLC
RLC
RLC
ANI F0
MOV C A
LDA 2200
ADD C
STA 2300
HLT
27. Write a set of 8085 assembly language instructions to unpack the upper
nibble of a BCD number.
MVI A 98
MOV B A
ANI F0
RRC
RRC
RRC
STA 2000
LXI D 1020
MOV A L
SUB E
DAA
STA 2000
MOV A H
SBB D
DAA
STA 2001
HLT
EI
CALL DELAY
JMP LOOP
HLT
DELAY: NOP
NOP
NOP
NOP
RET
OUT A0
JMP LOOP
REPEAT: OUT AC
MVI C Count
AGAIN: DCR C
JNZ AGAIN
CMA
JMP REPEAT
Calculation:
1
𝑇𝑖𝑚𝑒 𝑝𝑒𝑟𝑖𝑜𝑑 𝑜𝑓 𝑠𝑞𝑢𝑎𝑟𝑒 𝑤𝑎𝑣𝑒 = = 0.4 ∗ 10−3 𝑠.
2.5 ∗ 103
0.4 ∗ 10−3 𝑠
𝑇𝑖𝑚𝑒 𝑝𝑒𝑟𝑖𝑜𝑑 𝑜𝑓 𝑢𝑝𝑝𝑒𝑟 ℎ𝑎𝑙𝑓 𝑎𝑛𝑑 𝑙𝑜𝑤𝑒𝑟 ℎ𝑎𝑙𝑓 𝑜𝑓 𝑠𝑞𝑢𝑎𝑟𝑒 𝑤𝑎𝑣𝑒 = . = 0.2 ∗ 10−3 𝑠.
2
𝑙𝑒𝑡 𝑝𝑟𝑜𝑐𝑒𝑠𝑠𝑜𝑟 𝑡𝑖𝑚𝑒 𝑝𝑒𝑟𝑖𝑜𝑑 = 0.3 ∗ 10−6 𝑠.
0.2 ∗ 10−3
𝐷𝑒𝑙𝑎𝑦 𝑟𝑒𝑞𝑢𝑖𝑟𝑒𝑑 𝑏𝑒𝑤𝑒𝑒𝑛 𝑡𝑟𝑎𝑛𝑠𝑖𝑡𝑖𝑜𝑛 𝑜𝑓 𝑠𝑞𝑢𝑎𝑟𝑒 𝑤𝑎𝑣𝑒 = ≈ 666𝑇𝑠𝑡𝑎𝑡𝑒𝑠
0.3 ∗ 10−6
Now
658 = 14 ∗ 𝐶𝑜𝑢𝑛𝑡
𝐶𝑜𝑢𝑛𝑡 = 47
𝐶𝑜𝑢𝑛𝑡 = 2𝐹𝐻
Final Program:
MVI A 01H
REPEAT: OUT AC
MVI C 2F
AGAIN: DCR C
JNZ AGAIN
CMA
JMP REPEAT
1. Stack
Stack is a group of memory location in the R/W memory that is used for temporary storage of binary
information during execution of a program.
The starting memory location of the stack is defined in program and space is reserved usually at the high
end of memory map.
The beginning of the stack is defined in the program by using instruction LXI SP, 16-bit memory address.
Which loads a 16-bit memory address in stack pointer register of microprocessor.
Once stack location is defined storing of data bytes begins at the memory address that is one less then
address in stack pointer register. LXI SP, 2099h the storing of data bytes begins at 2098H and continues
in reversed numerical order.
Fig. Stack
Data bytes in register pair of microprocessor can be stored on the stack in reverse order by using the
PUSH instruction.
PUSH B instruction sore data of register pair BC on sack.
Data bytes can be transferred from the stack to respective registers by using instruction POP.