BCD

Table 15-1: ASCII numerical digit to hex and decimal values

ASCII

1

2

3

4

5

6

7

8

9

Hex

0x30

0x31

0x32

0x33

0x34

0x35

0x36

0x37

0x38

0x39

Decimal

48

49

50

51

52

53

54

55

56

57

BCD

1

2

3

4

5

6

7

8

9

Binary

0000

0001

0010

0011

0100

0101

0110

0111

1000

1001

Converting a BCD value from ASCII to a nibble is as easy as subtracting the hex value of 0x30, '0', or 48 decimal from the ASCII numerical value and get the resulting value with a range of {09}.

 byte ASCIItoBCD(char c) {   ASSERT(('0' <= c) && (c <= '9'));       return (byte)(c - '0'); } 
No 64-bit 

The general-purpose BCD instructions are not available in 64-bit mode.

When the 8086 processor was first manufactured the FPU was a separate optional chip (8087). There was a need for some BCD operations similar to other processors and so it was incorporated into the CPU. The 8087 had some BCD support as well. When the 64-bit processor was developed, it was decided that BCD support was not required anymore as the FPU was an alternative method.

The FPU uses the first nine bytes to support 18 BCD digits. The uppermost bit of the 10 th byte indicates the value is negative if set or positive if the bit is clear.

image from book
Figure 15-1: Ten-byte BCD data storage. MSB in far left byte (byte #9) is the sign bit and the rightmost eight bytes (#8...0) contain the BCD value pairs. The 18 th BCD digit resides in the upper nibble of byte #8 and the 1 st BCD digit resides in the lower nibble of byte #0.

Setting the upper nibble of a byte is merely the shifting left of a BCD digit by four bits, then logical ORing (or suming) the lower nibble.

 byte BCDtoByte(byte lo, byte hi) {   return   (hi << 4)  lo; } 

DAA Decimal Adjust AL (After) Addition

Mnemonic

P

PII

K6

3D!

3Mx+

SSE

SSE2

A64

SSE3

E64T

DAA



32.64-Bit 80X86 Assembly Language Architecture
32/64-Bit 80x86 Assembly Language Architecture
ISBN: 1598220020
EAN: 2147483647
Year: 2003
Pages: 191

Similar book on Amazon

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net