Assembly Language Programming in 8085

PROGRAMS
Steps to write a program:-

  1.     Type the starting memory address using keyboard, in this 8085kit address belongs to C000 to FFFF. We can use any memory address between them. Ex: A C000 here A stands for assemble the program.
  2.       After that counting type the to the end.
  3.      Whenever label is given type their corresponding memory address where we want to jump our program.
  4.       When complete program is typed then enter key is pressed two times to execute the program.
Steps to execute a program:-

  1.       Type G< starting address>, then press enter key, after that space key.
  2.       Type R, then press enter key. Which given the content of registers.
  3.       When memory address is given in program following step are performed.
A.    Type E<memory address>, then press enter key. Here memory address is the address where data is entered which is already mention in program.
B.     After that step 1 is performed.
C.     Type D<memory address>, then press enter key. Here memory address is the address where answer is stored which is already mention program.

Program No. 1
·         Write a program for addition of two binary numbers stored in any two register.

Program:-

Label
Address
Hex
Code
Nemonics
Comment’s
Remarks
C000
06
MVI B,06H
//initialize register B//
C001
06
C002
16
MVI D,02H
//initialize register D//
C003
02
C004
78
MOV A,B
//Copy the content of register B in Accumulator//
C005
82
ADD D
//Add the content of register D with the content of Accumulator//
C006
CF
RST 1
//terminate program execution//

·        Input:- B=06 & D=02
·        Output:-
A=08, B=06, C=00, D=02, E=04, F=00, I=0F, H=08, L=00, M=0850, S=FFEB, P=C007

Program No. 2
·        Write a program for subtraction of two binary numbers stored in any two register.

Program:-

Label
Address
Hex
Code
Nemonics
Comment’s
Remarks
C000
06
MVI B,06H
//initialize register B//
C001
06
C002
16
MVI D,02H
//initialize register D//
C003
02
C004
78
MOV A,B
//Copy the content of register B in Accumulator//
C005
92
SUB D
//Subtract  the content of register D with the content of Accumulator//
C006
CF
RST 1
//terminate program execution//

·        Input:- B=06 & D=02
·         Output:-
A=04, B=06, C=00, D=02, E=00, F=10, I=0F, H=08, L=00, M=D800, S=FFEB, P=C007
Program No. 3
Write a program for a group of data is residing at C050 H memory location to transfer in reverse order at memory location starting from D050 H.

Program:-
Label
Address
Hex Code
Nemonics
Comment’s
Remarks
C000
21
LXI H,C050 H
//initialize HL pair register//
C001
50
C002
C0
C003
01
LXI B,D054 H
//initialize HL pair register//
C004
54
C005
D0
C006
16
MVI D,05 H
//Load 05 in D register//
C007
05
LOOP
C008
7E
MOV A,M
//Copy the content of HL pair in Accumulator//
C009
02
STAX B
//save in register pair BC//
C00A
23
INX H
//increment in HL pair//
C00B
0B
DCX B
//Decrement in BC pair//
C00C
15
DCR D
//Decrement in D//
C00D
C2
JNZ LOOP (C008)
//Jump to the loop//
C00E
08
C00F
C0
C010
CF
RST 1
//terminate program execution//

·        Input:- E_C050 [C050-1,51-2,52-3,53-4,54-5]
·        Output:-D_D054 [D054-5,53-4,52-3,51-2,50-1]
A=01 BD0 C=53 D05 E=00 F=SS I=0F H=C0 L=51 M=05 S=FFFB P=C010
Program No. 4
Write a program to sort given 10 numbers from memory location C050 H in the ascending order.

Program:-
Label
Address
Hex
Code
Nemonics
Comment’s
Remarks
C000
06
MVI B,09 H
//Initialize counter//
C001
09
START
C002
21
LXI H,C050 H
//Initialize memory pointer//
C003
50
C004
C0
C005
0E
MVI C,09 H
//initialize counter//
C006
09
BACK
C007
7E
MOV A,M
//get the number//
C008
23
INX H
//increment memory pointer//
C009
BE
CMP M
//compare number with next number//
C00A
DA
JC SKIP (C015)
//if less, don’t interchange//
C00B
15
C00C
C0
C00D
CA
JZ SKIP (C015)
//if equal, don’t interchange//
C00E
15
C00F
C0
C010
56
MOV D,M
//move the content of memory into D//
C011
77
MOV M,A
//move the content of Accumulator into memory//
C012
2B
DCX H
//decrement in HL pair//
C013
72
MOV M,D
//move the content of D into memory//
C014
23
INX H
//increment in HL pair//
SKIP
C015
0D
DCR C
//Decrement in C//
C016
C2
JNZ BACK (C007)
//If not zero, repeat//
C017
07
C018
C0
C019
05
DCR B
//Decrement in B//
C01A
C2
JNZ START (C002)
//If not zero, repeat//
C01B
02
C01C
C0
C01D
CF
RST1
//terminate program execution//
·        Input:- E_C050 [C050-9,51-8,52-7,53-6,54-5,55-4,56-3,57-2,58-1,59-0]
·        Output:- D_C050 [C050-0,51-1,52-2,53-3,54-4,55-5,56-6,57-7,58-8,59-9]
A=08 B=00 C=00 D=00 E=00 F=55 I=0F H=C059 M=C059 S=FFEB P=C01E
Program No. 5
Write a program to multiply the 8-bit unsigned number in memory location C050 H by the 8-bit unsigned number in memory location C051 H. Store the 8 least significant bits of the result in memory location C300H and the 8 most significant bits in memory location C301 H.
Program:-
Label
Address
Hex
Code
Nemonics
Comment’s
Remarks
C000
LXI H, C050 H
// initialize the memory pointer//
C001
C002
C003
MOV E,M
// get multiplicand//
C004
MVI D,00 H
// initialize register D by 00//
C005
C006
INX H
//increment memory pointer//
C007
MOV A,M
// get multiplier//
C008
LXI H,0000
// product=0//
C009
C00A
C00B
MVI B,08 H
//initialize counter with count 8//
C00C
MULT:
C00D
DAD H
// add the content of register pair HL with accumulator//
C00E
RAL
// rotate accumulator left with carry//
C00F
JNC SKIP
//jump if no carry//
C010
C011
C012
DAD D
// add the content of register pair DE with accumulator//
SKIP
C013
DCR B
//decrement in register B//
C014
JNZ MULT
//jump on no zero//
C015
C016
C017
SHLD C300
// store the result//
C018
C019
C01A
RST 1
//terminate program execution//
·        Input:-
·        Output:-
Program No. 6
Write a program to convert a 2-digit BCD number stored at memory address C200 H into its binary equivalent number & store the result in a memory location C300 H.
Program:-
Label
Address
Hex
Code
Nemonics
Comment’s
Remarks
C000
3A
LDA C200 H
//get BCD number//
C001
00
C002
C2
C003
47
MOV B,A
//save it//
C004
E6
ANI OF H
//mask most significant four bits//
C005
0F
C006
4F
MOV C,A
//save unpacked BCD in C register//
C007
78
MOV A,B
//get BCD again//
C008
E6
ANI FO H
//mask least significant four bit//
C009
F0
C00A
0F
RRC
//convert most significant four bits into unpacked BCD2//
C00B
0F
RRC
-“”-
C00C
0F
RRC
-“”-
C00D
0F
RRC
-“”-
C00E
47
MOV B,A
//save unpacked BCD2 in B register//
C00F
AF
XRA A
//clear accumulator (sum=0)//
C010
16
MVI D,0A H
//set D as a multiplier of 10//
C011
0A
SUM
C012
82
ADD D
//add 10 unit (B)=0//
C013
05
DCR E
//decrement BCD2 by one//
C014
C2
JNZ SUM
//is multiplication complete? If not, go back and add again//
C015
12
C016
C0
C017
84
ADD C
//add BCD1//
C018
32
STA C300 H
// store the result//
C019
00
C01A
C3
C01B
CF
RST 1
//terminate program execution//
·         Input:- E_C050-13
·        Output:- D_C050 [C050-0D, 02, 03.....]
A=0F B=00 C=05 D=0A E=00 F=04 I=0F H=C0 L=59 M=C059 S=FFEB P=C01C
Program -07
Write a main Program and a conversion subroutine to convert the binary number stored at D000H into its equivalent BCD number. Store the result from memory location D100H.
Program:-
Label
Address
Hex
Code
Nemonics
Comment’s
Remarks
C000
LXI SP,C7FF H
//Initialize stack pointer//
C001
C002
C003
LDA D000 H
//get the binary number in accumulator//
C004
C005
C006
CALL Subroutine (C00A)
//call subroutine//
C007
C008
C009
RST 1
//terminate program execution//
Subroutine to convert binary number into its equivalent BCD number.
C00A
PUSH B
//save BC register pair content//
C00B
PUSH D
//save DE register pair content//
C00C
MVI B, 64
//load divisor decimal 100 in B register//
C00D
C00E
MVI C,0A
//load divisor decimal 10 in C register//
C00F
C010
MVI D,00
//initialize digit 1//
C011
C012
MVI E,00
//initialize digit 2//
C013
STEP1
C014
CMP B
//check if number <decimal 100//
C015
JC STEP2 (C01D)
//if yes go to step 2//
C016
C017
C018
SUB B
//subtract decimal 100//
C019
INR E
//increment register E by 1//
C01A
JMP STEP1 (C014)
// go to step 1//
C01B
C01C
STEP2
C01D
CMP C
//check if number < decimal 10//
C01E
JC STEP3 (C026)
//if yes go to step 3//
C01F
C020
C021
SUB C
//subtract decimal 10//
C022
INR D
//increment register by 1//
C023
JMP STEP2 (C01D)
//go to step 2//
C024
C025
STEP3
C026
STA D100 H
//store digit 0//
C027
C028
C029
MOV A,M
//get digit 1//
C02A
STA D101 H
//store digit 1//
C02B
C02C
C02D
MOV A,E
//get digit 2//
C02E
STA D102 H
//store digit 2//
C02F
C030
C031
POP D
//restore DE register pair//
C032
POP B
//restore BC register pair//
C033
RST 1
//terminate program execution//
·        Input:-
·        Output:-
Program No. -08
Write a program to convert the ASCII number in memory to equivalent decimal.
Program:-
Label
Address
Hex
Code
Nemonics
Comment’s
Remarks
C000
LXI H,C050H
//point to data//
C001
C002
C003
MOV A,M
//get operand//
C004
SUI 30H
//convert to decimal//
C005
C006
CPI 0AH
//check whether it is valid decimal number//
C007
C008
JC LOOP (C00D)
//yes, store result//
C009
C00A
C00B
MVI A,FFH
//no, make result=FF H//
C00C
LOOP:
C00D
INX H
//increment in register pair HL//
C00E
MOV M,A
//move content of accumulator into memory//
C00F
RST 1
//terminate program execution//
·         Input:-
·        Output:-
Program No. 9
Two ten bytes are residing at location starting from C050 & D050 respectively. Write a program to add them up & store the result starting from C090.
Program:-
Label
Address
Hex Code
Nemonics
Comment’s
Remarks
C000
21
LXI H,C050 H
//initialize memory pointer one//
C001
50
C002
C0
C003
01
LXI B,D050 H
//initialize memory pointer two//
C004
50
C005
D0
C006
11
LXI D,C090 H
//initialize result pointer//
C007
90
C008
C0
BACK:
C009
0A
LDAX B
//get the number from array two//
C00A
86
ADD M
//add it eight number in array one//
C00B
12
STAX D
//store the addition in array three//
C00C
23
INX H
//increment pointer one//
C00D
03
INX B
//increment pointer two//
C00E
13
INX D
//increment result pointer//
C00F
7D
MOV A,L
//move the content of L in accumulator//
C010
FE
CPI 0AH
//check pointer one for last number//
C011
0A
C012
C2
JNZ BACK (C009)
//if not repeat step four//
C013
09
C014
C0
C015
CF
RST 1
//terminate program execution//
·        Input:- E_C050 [C050-1,51-2,52-3,53-4,54-5,55-6,56-7,57-8,58-9,59-A]
·        Output:- D_D050 [D050-A,51-9,52-8,53-7,54-6,55-5,56-4,57-3,58-2,59-1]
A=0A B=D C=0A D=C E=4A F=54 I=0F H=C1 L=0A M=C10A S=FFEB P=C016
Program No. 10
Write a program for a block of 16 signed binary numbers is residing at location starting from C050 add them up & store the result in D050.
Program:
Label
Address
Hex
Code
Nemonics
Comment’s
Remarks
C000
21
LXI H,C050 H
//initialize the pointer//
C001
50
C002
C0
C003
01
LXI B,D050 H
//initialize second pointer//
C004
50
C005
D0
C006
16
MVI D,10 H
//Initialize the counter//
CO07
10
C008
7E
MOV A,M
//loading the number in accumulator//
LOOP
C009
23
INX H
//incrementing the pointer//
C00A
86
ADD M
//adding the binary number to the last number//
C00B
15
DCR D
//decrementing the counter//
C00C
C2
JNZ LOOP (C009)
//if not zero jump to loop//
C00D
09
C00E
C0
C00F
02
STAX B
//saving the addition to a new memory location//
C010
CF
RST 1
//terminate program execution//
·        Input:- E C050- 1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,10
·        Output:-
A=89 B=D0 C=50 D=00 E=00 F=54 I=0F H=C0 L=60 M=C060 S=FFEB P=C011
Program No. 11
Write a program to calculate the sum of series of number. The length of the series is in memory location C050 & the series begins from memory location C090.
Program:
Label
Address
Hex Code
Nemonics
Comment’s
Remarks
C000
LDA C050 H
//load accumulator with number//
C001
50
C002
C0
C003
MOV C,A
//initialize counter//
C004
LXI H,C050 H
//Initialize pointer//
C005
50
C006
C0
C007
SUB A
//sum low=0//
C008
MOV B,A
//sum high=0//
BACK:
C009
ADD M
//sum=sum + data//
C00A
JNC SKIP (C00E)
//jump on no carry//
C00B
C00C
C00D
INR B
//increment in B//
SKIP
C00E
INX H
//increment pointer //
C00F
DCR C
//decrement counter//
C010
JNZ BACK (C009)
//check if counter zero repeat//
C011
C012
C013
STA C300 H
//store lower byte//
C014
00
C015
C3
C016
MOV A,B
//move counting of register B into accumulator//
C017
STA D050 H
//store higher byte//
C018
C019
C01A
RST 1
//terminate program execution//
·        Input:-
·        Output:-

Comments