8085.zip
File Size: 2217 kb
File Type: zip
Download File

PROGRAMS/ALP FOR 8085

1.      Statement: Add the contents of memory locations 4000H and 4001H and place the result in memory location 4002H.

Sample problem
       (4000H) = 14H

       (4001H) = 89H

       Result     = 14H + 89H = 9DH

         Source program

               LXI H 4000H                : HL points 4000H

               MOV A, M                : Get first operand

               INX H                        : HL points 4001H

               ADD M                        : Add second operand

               INX H                        : HL points 4002H

               MOV M, A                : Store result at 4002H

               HLT                        : Terminate program execution

 

2.      Statement: Subtract the contents of memory location 4001H from the memory location 2000H and place the result in memory location 4002H.

Sample problem:

(4000H)        = 51H

(4001H)        = 19H

Result           = 51H - 19H = 38H

Source program:
       LXI H, 4000H                : HL points 4000H

       MOV A, M                : Get first operand

       INX H                        : HL points 4001H

       SUB        M                : Subtract second operand

       INX H                        : HL points 4002H

       MOV M, A                : Store result at 4002H.

       HLT                        : Terminate program execution

 
3.      Statement: Add the 16-bit number in memory locations 4000H and 4001H to the 16-bit number in memory locations 4002H and 4003H. The most significant eight bits of the two numbers to be added are in memory locations 4001H and 4003H. Store the result in memory locations 4004H and 4005H with the most significant byte in memory location 4005H.

                 Sample problem:

(4000H) = 15H

(4001H) = 1CH

(4002H) = B7H

(4003H) = 5AH

Result = 1C15 + 5AB7H = 76CCH

(4004H) = CCH

(4005H) = 76H

Source Program 1:

LHLD 4000H                : Get first I6-bit number in HL

XCHG                        : Save first I6-bit number in DE

LHLD 4002H                : Get second I6-bit number in HL

MOV A, E                : Get lower byte of the first number

ADD L                        : Add lower byte of the second number

MOV L, A                : Store result in L register

MOV A, D                : Get higher byte of the first number

ADC H                        : Add higher byte of the second number with CARRY

MOV H, A                : Store result in H register

SHLD 4004H                : Store I6-bit result in memory locations 4004H and 4005H.

HLT                        : Terminate program execution

 
4.      Statement:  Subtract the 16-bit number in memory locations 4002H and 4003H from the 16-bit number in memory locations 4000H and 4001H. The most significant eight bits of the two numbers are in memory locations 4001H and 4003H. Store the result in memory locations 4004H and 4005H with the most significant byte in memory location 4005H.

               Sample problem

(4000H) = 19H

(400IH) = 6AH

(4004H) = I5H (4003H) = 5CH

Result    = 6A19H - 5C15H = OE04H

(4004H) = 04H

(4005H) = OEH

Source program:

LHLD 4000H                : Get first 16-bit number in HL

XCHG                        : Save first 16-bit number in DE

LHLD 4002H                : Get second 16-bit number in HL

MOV A, E                        : Get lower byte of the first number

SUB L                        : Subtract lower byte of the second number

MOV L, A                        : Store the result in L register

MOV A, D                        : Get higher byte of the first number

SBB H                        : Subtract higher byte of second number with borrow

MOV H, A                        : Store l6-bit result in memory locations 4004H and 4005H.

SHLD 4004H                : Store l6-bit result in memory locations 4004H and 4005H.

HLT                        : Terminate program execution.

 

5. Statement: Pack the two unpacked BCD numbers stored in memory locations 4200H and 4201H and store result in memory location 4300H. Assume the least significant digit is stored at 4200H.        

  

Sample problem:

       (4200H) = 04

       (4201H) = 09

               Result = (4300H) = 94

Source program


LDA 4201H                : Get the Most significant BCD digit

RLC

RLC

RLC

RLC                        : Adjust the position of the second digit (09 is changed to 90)

ANI FOH                : Make least significant BCD digit zero

MOV C, A                : store the partial result

LDA 4200H                : Get the lower BCD digit

ADD C                        : Add lower BCD digit

STA 4300H                : Store the result

HLT                        : Terminate program execution

  6.      Statement: Two digit BCD number is stored in memory location 4200H. Unpack the BCD number and store the two digits in memory locations 4300H and 4301H such that memory location 4300H will have lower BCD digit.

 
Sample problem

       (4200H) = 58

               Result = (4300H) = 08 and

                               (4301H) = 05

Source program

  LDA 4200H                        : Get the packed BCD number

ANI FOH                        : Mask lower nibble

RRC                                

RRC

RRC

RRC                                : Adjust higher BCD digit as a lower digit

STA 4301H                        : Store the partial result

LDA 4200H                        : .Get the original BCD number

ANI OFH                        : Mask higher nibble

STA 4201H                        : Store the result

HLT                                : Terminate program execution

 

7.      Statement:Divide 16 bit number stored in memory locations 2200H and 2201H by the 8 bit number stored at memory location 2202H. Store the quotient in memory locations 2300H and 2301H and remainder in memory locations 2302H and 2303H.

         Sample problem

       (2200H) = 60H

       (2201H) = A0H

       (2202H) = l2H

               Result = A060H/12H = 8E8H Quotient and 10H remainder

       (2300H) = E8H

        (2301H) = 08H

       (2302H= 10H

       (2303H) 00H

Source program
         LHLD 2200H                : Get the dividend

       LDA 2202H                : Get the divisor

       MOV C, A

       LXI D, 0000H                : Quotient = 0

BACK: MOV A, L

       SUB C                        : Subtract divisor

       MOV L, A                : Save partial result

       JNC SKIP                : if CY  1 jump

       DCR H                : Subtract borrow of previous subtraction

SKIP: INX D                        : Increment quotient

       MOV A, H

       CPI, 00                : Check if dividend < divisor

       JNZ BACK                : if no repeat

       MOV A, L

       CMP C

       JNC BACK

       SHLD 2302H                : Store the remainder

       XCHG

       SHLD 2300H                : Store the quotient

       HLT                        : Terminate program execution


8.      Statement: Multiply two 8-bit numbers stored in memory locations 2200H and 2201H by repetitive addition and store the result in memory locations 2300H and 2301H.

                Sample problem:
       (2200H) = 03H

       (2201H) = B2H

               Result = B2H + B2H + B2H = 216H

                      = 216H

       (2300H) = 16H

       (2301H) = 02H

  Source program

                 LDA 2200H

               MOV E, A

               MVI D, 00                : Get the first number in DE register pair

               LDA 2201H                

               MOV C, A                : Initialize counter

               LX I H, 0000 H        : Result = 0

       BACK: DAD        D                : Result = result + first number

               DCR        C                : Decrement count

               JNZ        BACK                : If count   0 repeat

               SHLD 2300H                : Store result

               HLT                        : Terminate program execution
 
9.      Statement:Find the largest number in a block of data. The length of the block is in memory location 2200H and the block itself starts from memory location 2201H.

Store the maximum number in memory location 2300H. Assume that the numbers in the block are all 8 bit unsigned binary numbers.

Sample problem

       (2200H) =  04

       (2201H) = 34H

       (2202H) = A9H

       (2203H) = 78H

       (2204H) =56H

               Result = (2202H) = A9H

  Source program

                 LDA 2200H

               MOV C, A                : Initialize counter

               XRA A                        : Maximum = Minimum possible value = 0

               LXI H, 2201H        : Initialize pointer

       BACK: CMP M                        : Is number> maximum

               JNC SKIP                : Yes, replace maximum

               MOV A, M

       SKIP: INX H

               DCR C

               JNZ BACK

               STA 2300H                : Store maximum number

               HLT                        : Terminate program execution

  10.Statement:Write a program to sort given 10 numbers from memory location 2200H in the ascending order.

          MVI B, 09                : Initialize counter     

                LXI H, 2200H            : Initialize memory pointer

               MVI C, 09H                : Initialize counter 2

       BACK: MOV A, M                : Get the number

               INX H                        : Increment memory pointer

               CMP M                : Compare number with next number

               JC SKIP                : If less, don't interchange

               JZ SKIP                : If equal, don't interchange

               MOV D, M

               MOV M, A

               DCX H

               MOV M, D

               INX H                        : Interchange two numbers

       SKIP:DCR C                        : Decrement counter 2

               JNZ BACK                : If not zero, repeat

               DCR B                : Decrement counter 1

               JNZ START

               HLT                         : Terminate program execution

 
11.Statement:Calculate the sum of series of even numbers from the list of numbers. The length of the list is in memory location 2200H and the series itself begins from memory location 2201H. Assume the sum to be 8 bit number so you can ignore carries and store the sum at memory location 2210H.

  Source program:

               LDA 2200H

               MOV C, A                : Initialize        counter

               MVI B, 00H                : sum = 0

               LXI H, 2201H                 : Initialize pointer

       BACK: MOV A, M                : Get        the        number

               ANI        0lH                : Mask        Bit l        to        Bit7

               JNZ SKIP                : Don't add if number is ODD

               MOV A, B                : Get        the        sum

               ADD        M                : SUM        = SUM        + data

               MOV B, A                : Store        result        in        B        register

       SKIP: INX H                        : increment pointer

               DCR        C                : Decrement        counter

               JNZ        BACK                : if counter  0 repeat

               STA        2210H                : store        sum

               HLT                        : Terminate program execution

 

12.Statement: Search the given byte in the list of 50 numbers stored in the consecutive memory locations and store the address of memory location in the memory locations 2200H and 2201H. Assume byte is in the C register and starting address of the list is 2000H. If byte is not found store 00 at 2200H and 2201H.

Source program:

               LX I H, 2000H        : Initialize memory pointer 52H

               MVI B, 52H                : Initialize counter

       BACK: MOV A, M                : Get the number

               CMP C                 : Compare with the given byte

               JZ LAST                 : Go last if match occurs

               INX H                  : Increment memory pointer

               DCR B                        : Decrement counter

               JNZ B                : I f not zero, repeat

               LXI H, 0000H

               SHLD 2200H

               JMP END                : Store 00 at 2200H and 2201H

       LAST: SHLD 2200H                : Store memory address

       END:  HLT                        : Stop

 

13.Statement: Write an assembly language program to separate even numbers from the given list of 50 numbers and store them in the another list starting from 2300H. Assume starting address of 50 number list is 2200H.

  Source Program:

               LXI H, 2200H                : Initialize memory pointer l

               LXI D, 2300H                : Initialize memory pointer2

               MVI C, 32H                : Initialize counter

       BACK:MOV A, M                : Get the number

               ANI 0lH                : Check for even number

               JNZ SKIP                : If ODD, don't store

               MOV A, M                : Get the number

               STAX        D                : Store the number in result list

               INX D                        : Increment pointer 2

       SKIP: INX H                        : Increment pointer l

               DCR C                        : Decrement counter

               JNZ BACK                : If not zero, repeat

               HLT                        : Stop

 

14.Statement:Write an assembly language program to generate fibonacci number.

 MVI D, COUNT        : Initialize counter

       MVI B, 00                : Initialize variable to store previous number

       MVI C, 01                : Initialize variable to store current number

       MOV A, B                :[Add two numbers]

BACK: ADD C                        :[Add two numbers]

       MOV B, C                : Current number is now previous number

       MOV C, A                : Save result as a new current number

       DCR D                        : Decrement count

       JNZ BACK                : if count  0 go to BACK

       HLT                        : Stop.

15.Statement: Arrange an array of 8 bit unsigned no in descending order

  START:MVI B, 00                ; Flag = 0

               LXI H, 4150                ; Count = length of array

               MOV C, M                

               DCR C                        ; No. of pair = count -1

               INX H                        ; Point to start of array

       LOOP:MOV A, M                ; Get kth element

               INX H                

               CMP M                        ; Compare to (K+1) th element

               JNC LOOP 1                ; No interchange if kth >= (k+1) th

               MOV D, M                ; Interchange if out of order

               MOV M, A                ;

               DCR H                

               MOV M, D                

               INX H                

               MVI B, 01H                ; Flag=1

       LOOP 1:DCR C                ; count down

               JNZ LOOP                ;

               DCR B                        ; is flag = 1?

               JZ START                ; do another sort, if yes

               HLT                        ; If flag = 0, step execution

 

16.Statement:Write a program to find the Square Root of an 8 bit binary number. The binary number is stored in memory location 4200H and store the square root in 4201H.

Source Program:

               LDA 4200H                : Get the given data(Y) in A register

               MOV B,A                : Save the data in B register

               MVI C,02H                : Call the divisor(02H) in C register

               CALL DIV                : Call division subroutine to get initial value(X) in D-reg

       REP: MOV E,D                : Save the initial value in E-reg

               MOV A,B                : Get the dividend(Y) in A-reg

               MOV C,D                : Get the divisor(X) in C-reg

               CALL DIV                : Call division subroutine to get initial value(Y/X) in D-reg

               MOV A, D                : Move Y/X in A-reg

               ADD E                        : Get the((Y/X) + X) in A-reg

               MVI C, 02H                : Get the divisor(02H) in C-reg

               CALL DIV                : Call division subroutine to get ((Y/X) + X)/2 in D-reg.This is XNEW

               MOV A, E                : Get Xin A-reg

               CMP D                        : Compare X and XNEW

               JNZ REP                : If XNEW is not equal to X, then repeat

               STA 4201H                : Save the square root in memory

               HLT                        : Terminate program execution

  Subroutine:

       DIV: MVI D, 00H                : Clear D-reg for Quotient

       NEXT:SUB C                        : Subtact the divisor from dividend

               INR D                        : Increment the quotient

               CMP C                        : Repeat subtraction until the

               JNC NEXT                : divisor is less than dividend                

               RET                        : Return to main program