Search code examples
assembly8085

How do we compare two 2-byte binary numbers in 8085?


I have to write microprocessor 8085 assembly language code for the following:

Population censuses of 6 countries are stored in 18 locations starting from 2400H/0C20H. The first byte is the code number (which can be from 00H to 05H) and the next 2 bytes are the population of the country in binary (so that each country occupies 3 locations). I have to find the country that has the maximum population, and store its country code number in location 2500H/0C90H.

I have searched all over the internet but couldn't find how do we compare two 2-byte binary numbers in 8085. I would be very thankful if you could help.


Solution

  • On a 8-bit CPU you compare the first (= highest) byte. If it is equal you compare the second (= lower) byte. When comparing 32- or 64-bit numbers you continue with the third byte and so on. You stop comparison when the bytes are not equal.

    On the Z80 you could also use the instruction "SBC HL,DE" to do a 16-bit comparison. However this instruction is not present on 8085.

    An example for 8-bit processors:

     LOAD register1, [high byte of A]
     LOAD register2, [high byte of B]
     COMPARE register1, register2
     JUMP_IF_EQUAL was_equal
       // -- This is used for 32- and 64-bit numbers only --
     LOAD register1, [second byte of A]
     LOAD register2, [second byte of B]
     COMPARE register1, register2
     JUMP_IF_EQUAL was_equal
       ...
       // -- --
     LOAD register1, [low byte of A]
     LOAD register2, [low byte of B]
     COMPARE register1, register2
    was_equal:
      // Here the status flags are set as if a 16-bit UNSIGNED
      // COMPARE had been done.
    

    Replace the instructions "LOAD" etc. by the correct instructions of your processor!

    A signed number comparison is more difficult!