Data Representation
• Binary Numbers
• Translating between binary and decimal
• Binary Addition
• Integer Storage Sizes
• Hexadecimal Integers
• Translating between decimal and hexadecimal
• Hexadecimal subtraction
• Signed Integers
• Binary subtraction
• Character Storage
Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003. 21
Binary Numbers
• Digits are 1 and 0
• 1 = true
• 0 = false
• MSB – most significant bit
• LSB – least significant bit
MSB LSB
• Bit numbering: 1011001010011100
15 0
Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003. 22
Binary Numbers
• Each digit (bit) is either 1 or 0 1 1 1 1 1 1 1 1
• Each bit represents a power of 2: 27 26 25 24 23 22 21 20
Every binary
number is a
sum of powers
of 2
Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003. 23
Translating Binary to Decimal
Weighted positional notation shows how to calculate the
decimal value of each binary bit:
dec = (Dn-1 × 2n-1) + (Dn-2 × 2n-2) + ... + (D1 × 21) + (D0 × 20)
D = binary digit
binary 00001001 = decimal 9:
(1 × 23) + (1 × 20) = 9
Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003. 24
Translating Unsigned Decimal to Binary
• Repeatedly divide the decimal integer by 2. Each
remainder is a binary digit in the translated value:
37.6875 = 100101.1011
Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003. 25
Exercises
Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003. 26
Binary Addition
• Starting with the LSB, add each pair of digits, include
the carry if present.
carry: 1
0 0 0 0 0 1 0 0 (4)
+ 0 0 0 0 0 1 1 1 (7)
0 0 0 0 1 0 1 1 (11)
bit position: 7 6 5 4 3 2 1 0
Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003. 27
Integer Storage Sizes
byte 8
word 16
Standard sizes:
doubleword 32
quadword 64
What is the largest unsigned integer that may be stored in 20 bits?
Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003. 28
Hexadecimal Integers
Binary values are represented in hexadecimal.
Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003. 29
Translating Binary to Hexadecimal
• Each hexadecimal digit corresponds to 4 binary bits.
• Example: Translate the binary integer
000101101010011110010100 to hexadecimal:
Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003. 30
Converting Hexadecimal to Decimal
• Multiply each digit by its corresponding power of 16:
dec = (D3 × 163) + (D2 × 162) + (D1 × 161) + (D0 × 160)
• Hex 1234 equals (1 × 163) + (2 × 162) + (3 × 161) + (4 × 160), or
decimal 4,660.
• Hex 3BA4 equals (3 × 163) + (11 * 162) + (10 × 161) + (4 × 160), or
decimal 15,268.
Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003. 31
Powers of 16
Used when calculating hexadecimal values up to 8 digits
long:
Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003. 32
Converting Decimal to Hexadecimal
decimal 422 = 1A6 hexadecimal
Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003. 33
Convert Decimal Fraction to Octal Fraction
Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003. 34
Hexadecimal Addition
• Divide the sum of two digits by the number base (16). The quotient
becomes the carry value, and the remainder is the sum digit.
1 1
36 28 28 6A
42 45 58 4B
78 6D 80 B5
21 / 16 = 1, rem 5
Important skill: Programmers frequently add and subtract the
addresses of variables and instructions.
Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003. 35
Hexadecimal Subtraction
• When a borrow is required from the digit to the left, add 16
to the current digit's value:
16 + 5 = 21 – 7 = 14 = E
−1
C6 75
A2 47
24 2E
Practice: The address of var1 is 00400020. The address of the next
variable after var1 is 0040006A. How many bytes are used by var1?
Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003. 36
Addition and Multiplication Examples
Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003. 37
Hexadecimal Complement
Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003. 38
Signed Integers
The highest bit indicates the sign. 1 = negative,
0 = positive
sign bit
1 1 1 1 0 1 1 0
Negative
0 0 0 0 1 0 1 0 Positive
If the highest digit of a hexadecimal integer is > 7, the value is
negative. Examples: 8A, C5, A2, 9D
Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003. 39
Ranges of Signed Integers
The highest bit is reserved for the sign. This limits the range:
Practice: What is the largest positive value that may be stored in 20 bits?
Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003. 40