- Related Questions & Answers
- C Program for Tower of Hanoi
- C++ Program for Dijkstra’s shortest path algorithm?
- C/C++ Program for nth Catalan Number?
- C Program to Multiply two Floating Point Numbers?
- C program to find the length of a string?
- C Program to Check if all digits of a number divide it
- C Program to Check if a Given String is a Palindrome?
- Write a program to Delete a Tree in C programming
- Write a C program to print “ Tutorials Point ” without using a semicolon
- Sum of the nodes of a Singly Linked List in C Program
- Sum of first n natural numbers in C Program
- C Program for simple interest?
- Area of a n-sided regular polygon with given Radius in C Program?
- Area of a leaf inside a square in C Program?
- C Program for Area of a square inscribed in a circle which is inscribed in a hexagon?

- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who

Here we will see how to find the HCF or GCD of two given bytes using 8085. The numbers are 8-bit numbers, nor larger than that.

**Problem Statement**−

Write an 8085 Assembly language program to find the HCF or GCD of two numbers stored at memory location 8000H and 8001H.

**Discussion**−

Here we will use the Euclidean algorithm to find HCF. This algorithm is very simple. We have to follow these steps−

- If first number and second number are same, then

a) go to step 3.

Else if first number < second number, the

b) exchange no1 and no2.

- first-number <- first-number – second-number; go to step 1
- Display result as first-number

The values are stored at location 8000H and 8001H, and the result will be stored at location 8050H.

**First Input**

Address | Data |
---|---|

… | … |

8000 | 2D |

8001 | 69 |

… | … |

8050 | 0F |

… | … |

**Second Input**

Address | Data |
---|---|

… | … |

8000 | 25 |

8001 | 35 |

… | … |

8050 | 01 |

… | … |

Address | HEX Codes | Labels | Mnemonics | Comments | |
---|---|---|---|---|---|

F000 | 21, 00, 80 | | LXI H,8000H | Point to the first number | |

F003 | 7E | | MOV A,M | Load the first number into Acc | |

F004 | 23 | | INX H | Point to next location | |

F005 | 46 | | MOV B,M | Load the second number | |

F006 | B8 | LOOP | CMP B | Compare B with A | |

F007 | CA, 17, F0 | | JZ STORE | When A and B are same, store the result | |

F00A | DA, 11, F0 | | JC EXG | If B > A, then exchange B and A | |

F00D | 90 | | SUB B | if B < A, subtract B from A | |

F00E | C3, 06, F0 | | JMP LOOP | Jump to LOOP | |

F011 | 48 | EXG | MOV C,B | Load C with B | |

F012 | 47 | | MOV B,A | Move A to B | |

F013 | 79 | | MOV A,C | Move C to A | |

F014 | C3, 06, F0 | | JMP LOOP | Jump to LOOP | |

F017 | 32, 50, 80 | STORE | STA 8050H | Store the value into memory | |

F01A | 76 | | HLT | Terminate the program | |

| | | | | |

**First Output**

Address | Data |
---|---|

… | … |

8050 | 0F |

… | … |

**Second Output**

Address | Data |
---|---|

… | … |

8050 | 01 |

… | … |

Advertisements