Lecture09 assembly language

Post on 11-Jul-2015

25 views 2 download

Transcript of Lecture09 assembly language

COMPUTER ORGANIZATION

AND ASSEMBLY LANGUAGE

Lecture 9

Today

So far

Write any program in MIPS assembly language

Convert into binary instructions

Today

How are numbers represented

How are they added, subtracted, multiplied

divided

Numbers

Bits are just bits (no inherent meaning)

conventions define relationship between bits and numbers

Unsigned Numbers

0 - 231

Large Numbers

Avogadro's number

6.0221415 × 1023 ~ 64 bits

Signed Numbers

How to represent –ve numbers

Fractions

How to represent

14159265.3

Unsigned Numbers

Representation(d31 d30 … d2 d1 d0)2 = d31*2

31 + d30*230 + … d2*2

2 + d1 * 21 + d0*20

0000 0000 0000 0000 0000 0000 0000 0000 = 010

0000 0000 0000 0000 0000 0000 0000 0001 = 110

0000 0000 0000 0000 0000 0000 0000 0010 = 210

. . . . . . . . . .

1111 1111 1111 1111 1111 1111 1111 1111 = 4,294,967,29510

Minimum Number= 0 = (0000….0000)2

Maximum Number= (1111….1111)2 = (1 0000….0000)2 – 1 = 232-1

32

Addition of Unsigned Numbers

Addition0 0 1 1 3

+ 0 0 1 0 +2

---------------------

0 1 0 1 5

What happens when

Addition results in a number that does not fit in

32-bits

232-1 + 232-1 = 2*232 – 2 = 233 -2 -- needs 33 bits

Overflow

Subtraction of Unsigned

Numbers

Subtraction0 0 1 1 3

- 0 0 1 0 -2

---------------------

0 0 0 1 1

What happens when

You subtract greater number from smaller

number

Need –ve numbers

Signed Numbers

One simple strategy

Sign Magnitude Representation

Leftmost bit is sign bit

Rest 31-bits are unsigned

Representation (d31 d30 … d2 d1 d0)2 = (-1)*d31 + d30*2

30 + … d2*22 + d1 * 21 + d0*2

0

Number Range = -(231-1), …,-1, 0,+1, …, +(231-1)

How to find –ve of a number

Just change the sign-bit

Addition & Subtraction

Add/Sub the 31-bits, and change the sign bit logically

Need a seamless way to perform these very frequent operations

31-bit magnitude

1-bit sign

2s Complement Representation

Representation (d31 d30 … d2 d1 d0)2 = d31*(-2)31 + d30*2

30 + … d2*22 + d1 * 21 + d0*2

0

Examples

0000 0000 0000 0000 0000 0000 0000 0000two = 0ten0000 0000 0000 0000 0000 0000 0000 0001two = + 1ten0000 0000 0000 0000 0000 0000 0000 0010two = + 2ten...

0111 1111 1111 1111 1111 1111 1111 1110two = + 2,147,483,646ten0111 1111 1111 1111 1111 1111 1111 1111two = + 2,147,483,647ten

1000 0000 0000 0000 0000 0000 0000 0000two = – 2,147,483,648ten

1000 0000 0000 0000 0000 0000 0000 0001two = – 2,147,483,647ten1000 0000 0000 0000 0000 0000 0000 0010two = – 2,147,483,646ten...

1111 1111 1111 1111 1111 1111 1111 1101two = – 3ten1111 1111 1111 1111 1111 1111 1111 1110two = – 2ten1111 1111 1111 1111 1111 1111 1111 1111two = – 1ten

Add 2’s Complement Numbers

Just like unsigned numbers

7 + 6 = 13

-4 + -3 = -7

0 1 1 10 1 1 0+1 1 0 1

11

1 1 0 01 0 1 1+0 1 1 1

1

0

0

0

11

1

Subtract 2’s Complement

Numbers

A – B = A + (-B) = A + (!B + 1)

Just like unsigned numbers

6 – 7 = 6 + (~7 + 1) = -1

-3 – 5 = -3 + (~(5)+1) = -8

1 1 0 1

0 1 0 1-

1 0 0 0

0 1 1 0

0 1 1 1-

1 1 1 1

00

1

0 1 1 0

1 0 0 1+

1 1 1 1

01

1

10

1

1 1 0 1

1 0 1 1+

1 0 0 0

11

1

Overflow

When result of operation too large to fit in 32-bits7 – (-13) = 20

Detect Overflows Positive + Positive -> Negative

Negative + Negative -> Positive

Positive – Negative -> Negative

Negative – Positive -> Positive

Consider the operations A + B, and A – B Can overflow occur if B is 0 ?

Can overflow occur if A is 0 ?

0 1 1 10 0 1 1-

01

0 1 1 11 1 0 1+0 1 0 0

001

Effects of Overflow

An exception (interrupt) occurs

Control jumps to predefined address for exception

Interrupted address is saved for possible

resumption

Details based on software system / language

example: flight control vs. homework assignment

Don't always want to detect overflow

new MIPS instructions: addu, addiu, subu

note: addiu still sign-extends!

note: sltu, sltiu for unsigned comparisons