Statement: Exchange the contents of memory locations 2000H and 4000H

Program 1:

 

  LDA 2000H        : Get the contents of memory location 2000H into accumulator

  MOV B, A        : Save the contents into B register

  LDA 4000H        : Get the contents of memory location 4000Hinto accumulator

  STA 2000H         : Store the contents of accumulator at address 2000H

  MOV A, B        : Get the saved contents back into A register

  STA 4000H        : Store the contents of accumulator at address 4000H

 

Program 2:

       LXI H 2000H            : Initialize HL register pair as a pointer to memory  location 2000H.

       LXI D 4000H                : Initialize DE register pair as a pointer to memory location 4000H.

       MOV B, M                 : Get the contents of memory location 2000H into B register.

       LDAX D                : Get the contents of memory location 4000H into A register.

       MOV M, A                : Store the contents of A register into memory location 2000H.

       MOV A, B                : Copy the contents of B register into accumulator.

       STAX D                : Store the contents of A register into memory location 4000H.

       HLT                        : Terminate program execution.

 

In Program 1, direct addressing instructions are used, whereas in Program 2, indirect addressing instructions are used.

 

 

 

Statement: Store the data byte 32H into memory location 4000H

 

Program 1:

 

MVI A, 52H        : Store 32H in the accumulator

STA 4000H                : Copy accumulator contents at address 4000H

HLT                        : Terminate program execution

 

Program 2:

 

LXI H                : Load HL with 4000H

MVI M          : Store 32H in memory location pointed by HL register pair (4000H)

HLT                : Terminate program execution

 

The result of both programs will be the same. In program 1 direct addressing instruction is used, whereas in program 2 indirect addressing instruction is used.

 

 

 

 

Statement: Calculate the sum of series of numbers. The length of the series is in memory location 4200H and the series begins from memory location 4201H.

a. Consider the sum to be 8 bit number. So, ignore carries. Store the sum at memory location 4300H.

b. Consider the sum to be 16 bit number. Store the sum at memory locations 4300H and 4301H.

 

a. Sample problem

 

4200H  = 04H

4201H  = 10H

4202H  = 45H

4203H  = 33H

4204H  = 22H

Result = 10 +41 + 30 + 12 =  H

4300H  =  H

 

Source program:

 

LDA 4200H

MOV C, A                : Initialize counter

SUB A                        : sum = 0

LXI H, 420lH                : Initialize pointer

BACK:        ADD M                : SUM = SUM + data

INX H                        : increment pointer

DCR C                        : Decrement counter

JNZ BACK                : if counter  0 repeat

STA 4300H                : Store sum

HLT                        : Terminate program execution

 

 

 

b. Sample problem

 

4200H =  04H        

420lH  = 9AH

4202H = 52H

4203H = 89H

4204H = 3EH

Result = 9AH + 52H + 89H + 3EH = H

4300H = B3H Lower byte

4301H = 0lH Higher byte

 

Source program:

 

               LDA 4200H

               MOV C, A                : Initialize counter

               LXI H, 4201H                : Initialize pointer

               SUB A                        :Sum low = 0

               MOV B, A                : Sum high = 0

       BACK: ADD M                        : Sum = sum + data

               JNC SKIP                

               INR B                        : Add carry to MSB of SUM

       SKIP: INX H                        : Increment pointer

               DCR C                        : Decrement counter

               JNZ BACK                : Check if counter 0 repeat

               STA 4300H                : Store lower byte

               MOV A, B

               STA 4301H                : Store higher byte

               HLT                        :Terminate program execution

 

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

 

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

 

 

 

شکوفه رضایی پور   sh.sare@yahoo.com