Multiplication of 8-Bit Numbers in 8085 Microprocessor: Illustration of 3 Different Cases

8085 is a very basic microprocessor with the capability of limited arithmetic and logical operations. It has dedicated arithmetic instructions for addition, subtraction, increment and decrement. If we want to perform a multiplication operation then we need to write a program for it. Multiplication is nothing but repeated addition. This post presents assembly language program for the multiplication of two 8-bits numbers with the illustration of 3 different cases.

The maximum result from the multiplication of two 8-bit numbers can be up-to 16-bits.

FFH x FFH = FE01H

The following three cases can arise for the multiplication of different 8-bit numbers:

(i) The generated result is a 8-bit number

eg: 02H x 03H = 06H

(ii) The generated result is a 9-bit number with “1” at the ninth bit

eg: FFH x 02H = 1FEH

(iii) The generated result is lager than 9-bit number

eg: A7H x F2H = 9DDEH


You might find Different Coding Styles of Verilog Language interesting


Let’s start with the 1st case and move on to the 3rd case:

The generated result is a 8-bit number:

Result below 8-bits

// Manually store the multiplicand and the multiplier in the memory locations 4200H & 4201H respectively
// For this case let's say multiplicand = 03H and the multiplier = 04H
// Store the result in the memory location 4202H and 4203H
// For this Example result will be 03H x 04H = 0CH
// 4202<-00H, 4203<-0CH

#ORG 0000H
#BEGIN 0000H

    LDA 4200H  // Fetched the Multiplicand
    MOV B,A    
    LDA 4201H  // Fetched the Multiplier
    MOV D,A
    MVI A,00H  // Cleared the Acuumulator for multiple addition of the Multiplicand
L1: ADD B
    DCR D
    JNZ L1     // Repeated Addition for multiplication
    STA 4203
    HLT

#ORG 4200H
#DB 03H, 04H

 Now when you would run the program it would give you the memory locations with the following values

Memory Location

Input

4200     4201

03         04

Output

4202     4203

00        0C

In this case we get 00H in 4202H as there is no carry generated in this example. Let’s consider the 2nd case example (FFH x 02H = 1FEH) where a carry would be generated. The above program would generate the result as FEH but the carry would be 00H. Let’s modify the program to deal with this type of situation.

The generated result is a 9-bit number with “1” at the ninth bit:

Result 9-bits

// For this case let's say multiplicand = FFH and the multiplier = 02H
// Result would be FFH x 02H = 1FEH
// 4202<-01H, 4203<-FEH

#ORG 0000H
#BEGIN 0000H

    MVI C,00H  // Preserves the Carry  
    LDA 4200H  // Fetched the Multiplicand
    MOV B,A    
    LDA 4201H  // Fetched the Multiplier
    MOV D,A
    MVI A,00H  // Cleared the Acuumulator for multiple addition of the Multiplicand
L1: ADD B
    DCR D
    JNZ L1     // Repeated addition for multiplication
    JNC L2     // Jump if no carry generated
    INR C
L2: STA 4203
    MOV A,C
    STA 4202
    HLT

#ORG 4200H
#DB FFH, 02H

Now when you would run the program it would give you the memory locations with the following values

Memory Location

Input

4200     4201

FF         02

Output

4202     4203

01        FE

In this case we get 01H in 4202H as there is a single carry generated in this example. Let’s consider the 3rd case example (A7H x F2H = 9DDEH) where multiple carries would be generated during the repeated additions. The above program would generate the result as DEH but the carry would be 01H. Let’s modify the program to deal with this type of situation.

The generated result is lager than 9-bit number:

Result more than 9-bits

// For this case let's say multiplicand = A7H and the multiplier = F2H
// Result would be A7H x F2H = 9DDEH
// 4202<-9DH, 4203<-DEH

#ORG 0000H
#BEGIN 0000H

    MVI C,00H  // Preserves the Carry  
    LDA 4200H  // Fetched the Multiplicand
    MOV B,A    
    LDA 4201H  // Fetched the Multiplier
    MOV D,A
    MVI A,00H  // Cleared the Acuumulator for multiple addition of the Multiplicand
L1: ADD B
    JC L2      // Jump if carry generated
    DCR D
    JNZ L1     // Repeated addition for multiplication
    JMP L3     // Jump after the repeated additions get completed
L2: INR C
    DCR D
    JNZ L1
L3: STA 4203
    MOV A,C
    STA 4202
    HLT

#ORG 4200H
#DB A7H, F2H

Memory Location

Input

4200     4201

A7         F2

Output

4202     4203

9D        DE

Note: The above Hex codes have been assembled and simulated on Jubin’s 8085 Simulator.

Hope the post would help you. If any doubt, please mention the same in the comment section, we would revert back to you.

Leave a Reply

Your email address will not be published. Required fields are marked *