Integer Representation and Arithmetic
Integer Representation
- Bit-- Binary Digit
- 1 byte = 8 bits
- 1 word = 2 bytes
- Integer takes up two bytes; can be signed or unsigned.
Unsigned Integers
- Can represent whole numbers from 0 to 65,535
- In binary, this is from
- Internally, binary representation of decimal value as 16 bits.
Signed Integers
- Need to reserve one bit for the sign.
- Three ways:
- Sign-Magnitude
- 1's Complement
- 2's Complement
Sign-Magnitude
- Uses most significant bit of the word to represent the sign.
- 0 - Positive
- 1 - Negative.
- Rest of the number is encoded in magnitude part
37 = 00000000 00100101
-37 = 10000000 00100101
6712 = 00011010 00111000
-6712 = 10011010 00111000
- Can represent numbers from -32,767 to 32,767.
- But, two representations for zero:
0 = 00000000 00000000
-0 = 10000000 00000000
Arithmetic can be cumbersome.
1's Complement
- Negative number is stored as bit-wise complement of corresponding positive
number.
- Leftmost bit of positive number is 0. That of negative number is 1.
196 = 00000000 11000100
-196 = 11111111 00111011
- Can represent numbers from -32,767 to 32,767.
- Arithmetic is easier than sign-magnitude.
- But, still have two representations for zero:
0 = 00000000 00000000
-0 = 11111111 11111111
2's Complement
- Modern Method
- Positive number represented in same way as other two methods
- Negative number obtained by taking 1's Complement of positive number
and adding 1.
6713 = 00011000 00011101
1's Comp = 11100111 11100010
2's Comp = 11100111 11100011
- Word integer can represent numbers from -32,768 to 32,767.
- Byte integer can represent numbers from -128 to 127.
- One version of zero:
00000000 00000000
Conversion of Byte Integer to Word
- Sign Extension
- Copy sign bit of the byte into all the bits of the upper byte of the
word.
37 = 00100101 -> 00000000 00100101
-37 = 11011011 -> 11111111 11011011
cbw
- converts the signed byte in AL to a word in AX
Conversion of Word Integer to Byte
- Remove upper byte of word. Retain only the lower byte.
- Meaningful only if original number can be represented by a byte.
Integer Arithmetic (1's Comp and 2's Comp)
- Addition: Simply add the two binary representations.
- Subtraction: Find negative of one number, add to the second.
Addition in 1's Comp
- Add binary representations of the two numbers.
- If there is a carry, add it back in on the right side.
51 00110011
+ (-37) + 11011010
----------
1 00001101
+ 1
----------
14 00001110
Addition in 2's Comp
- Add binary representations of the two numbers.
- Disregard the carry.
51 00110011
+ (-37) + 11011011
----------
14 1 00001110
Subtraction in 2's Comp
Overflow
- If two numbers have different signs, their sum will never overflow.
- If they have the same sign, they might overflow.
- Overflow has occurred if sign of result is different than sign of addends.
Addition, Subtraction, Increment, Decrement, & Negation
add/sub reg/mem, reg/mem/constant
- Both operands must be the same size
- At most, one operand may be from memory
inc/dec reg/mem
- operands may be either byte or word
neg reg/mem
- Negates its byte or word operand
Multiplication
mov AX, Banana
imul Cherry
mov Apple, AX
DX contains all sign bits (hopefully)
Division
mov AX, Banana
cwd
idiv Cherry
mov AX, Apple
remainder is in DX