Asked by traxx

Write a procedure BCD to convert a hexadecimal number in RA into its BCD (binary-coded decimal) representation and place it in RB. The return address should be placed in RF. For example, if RA=0x0024 before the call, RB=0x0036 after the all.

// can someone tell me how to write that//

Answers

Answered by MathMate
0x0024 is 2*16+4=36, which is what is required in RB 0x0036.
Basically, the hex value is converted into decimal, and each decimal digit is stored as a byte in RB.

The algorithm to do this is to divide the hex number by 10 (decimal), store the integer quotient in a register, and the remainder is the first byte in RB.
Repeat the process, i.e. divide the quotient by 10(dec.). However, the remainder must be shifted 8 bits to the left before adding to RB to get the next digit.

Repeat, if necessary, until the quotient is zero.

Example:
RA = 0x0024
RB = 0x0000
Divide by 0x000A to get
RA = 0x0003 (quotient)
RC = 0x0006 (remainder)
Add rb,rc
RB = 0x0006

if RA≠0, Repeat division
RA = 0x0000
RC = 0x0003 (remainder)
shift left 8 bits
RC = 0x0030
add rb,rc
RB = 0x0036

etc.

You will have to do some register management to put the quotient and remainder in the right places.
There are no AI answers yet. The ability to request AI answers is coming soon!

Related Questions