ceg 320/520: computer organization and assembly language programmingflow control 1 flow control

24
CEG 320/520: Computer Organization and Assembly Language Programming Flow Control 1 Flow Control

Upload: holly-boone

Post on 15-Jan-2016

215 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: CEG 320/520: Computer Organization and Assembly Language ProgrammingFlow Control 1 Flow Control

CEG 320/520: Computer Organization and Assembly Language Programming Flow Control 1

Flow Control

Page 2: CEG 320/520: Computer Organization and Assembly Language ProgrammingFlow Control 1 Flow Control

CEG 320/520: Computer Organization and Assembly Language Programming Flow Control 2

Flow Control: Goals

• Branching– Condition code register

– Branch instructions• Conditional branches

• Unconditional branches

• Know how to implement:– For loops

– While loops

– if/then/else statements

• Assigned Reading: – HVZ: 3.11 Program Flow Control

Page 3: CEG 320/520: Computer Organization and Assembly Language ProgrammingFlow Control 1 Flow Control

CEG 320/520: Computer Organization and Assembly Language Programming Flow Control 3

Flow Control: The Condition Code Register• The Condition Code Register (CCR) holds

information about the result of the most recently executed arithmetic instruction.

• There are five bits that are set by the ALU.– N – 1 if the last result was Negative– Z – 1 if the last result was Zero– V – 1 if the last operation resulted in arithmetic overflow– C – 1 if the last operation produced a carry

• addition – 1 if there was a carry out from most significant bit• subtraction – 1 if there was a borrow required

– X – special operand for multiprecision computations. We won’t be using this bit.

ALU … N Z V C …

Page 4: CEG 320/520: Computer Organization and Assembly Language ProgrammingFlow Control 1 Flow Control

CEG 320/520: Computer Organization and Assembly Language Programming Flow Control 4

Table C.5

Page 5: CEG 320/520: Computer Organization and Assembly Language ProgrammingFlow Control 1 Flow Control

CEG 320/520: Computer Organization and Assembly Language Programming Flow Control 5

Table C.4

Page 6: CEG 320/520: Computer Organization and Assembly Language ProgrammingFlow Control 1 Flow Control

CEG 320/520: Computer Organization and Assembly Language Programming Flow Control 6

Flow Control: Branch Instructions

• The mnemonics for the branch instructions assume that you are following a SUB or a CMP instruction:– BEQ (branch when equal) Z=1

SUB.W D3,D4

BEQ LOOP

– when does Z=1? • When [D3] and [D4] are equal!

• RememberRemember that CMP and SUB compute that CMP and SUB compute[dest] – [src] [dest] – [src]

Page 7: CEG 320/520: Computer Organization and Assembly Language ProgrammingFlow Control 1 Flow Control

CEG 320/520: Computer Organization and Assembly Language Programming Flow Control 7

CMP & Bcc instructions

• CMP Operations performed: [d] – [s]– Result doesn’t go anywhere! Why?

• Bcc represents many instructions:– BEQ – branch when equal (Z=1)– BNE – branch when not equal (Z=0)– BVS – branch when overflow set (V=1)– BPL – branch when result positive (N=0)– BRA – always branch– See table C.6

Page 8: CEG 320/520: Computer Organization and Assembly Language ProgrammingFlow Control 1 Flow Control

CEG 320/520: Computer Organization and Assembly Language Programming Flow Control 8

Flow Control: Conditional Branch Instructions - Bcc

• CMP src, dest– BEQ – Branch to TARGET if src = dest– BNE – Branch to TARGET if src != dest– BLT – Branch to TARGET if dest is less than src– BLE – Branch to TARGET if dest is less than or

equal to src– BGT – Branch to TARGET if dest is greater than

src– BGE – Branch to TARGET if dest is greater than

or equal to src

Page 9: CEG 320/520: Computer Organization and Assembly Language ProgrammingFlow Control 1 Flow Control

CEG 320/520: Computer Organization and Assembly Language Programming Flow Control 9

Flow Control: Bcc

• You can also think of Bcc as comparing the result of the last operation to zero:

MOVE.W #-3,D0 ; D0 is a counter, startingLEA ARRAY,A0 ; … at the value -12

LOOP ADD.W (A0)+,D1ADDQ.W #1,D0 ;Add 1 to the counterBLT LOOP ;Loop while result < 0

ARRAY DC.W 12,4,8

Page 10: CEG 320/520: Computer Organization and Assembly Language ProgrammingFlow Control 1 Flow Control

CEG 320/520: Computer Organization and Assembly Language Programming Flow Control 10

Flow Control: for loops

• for(i=0; i<5; i++) {…}

CLR.B D0

LOOP …

ADDQ.B #1,D0

CMPI.B #5,D0

BLT LOOP

This is easy to read, This is easy to read, and necessary if and necessary if you want to use the you want to use the value of i.value of i.

However, you have to get the immediate value #5 from memory However, you have to get the immediate value #5 from memory repeatedly. There is a more efficient way to loop 5 times…repeatedly. There is a more efficient way to loop 5 times…

D0 - #5

Page 11: CEG 320/520: Computer Organization and Assembly Language ProgrammingFlow Control 1 Flow Control

CEG 320/520: Computer Organization and Assembly Language Programming Flow Control 11

Flow Control: Fixed loops

MOVEI.B #5,D0LOOP do something…

SUBQ.B #1,D0

BNE LOOP ; BRA if Z=0

move on…

• Using a down counter. A more efficient way to loop 5 times:

Page 12: CEG 320/520: Computer Organization and Assembly Language ProgrammingFlow Control 1 Flow Control

CEG 320/520: Computer Organization and Assembly Language Programming Flow Control 12

Flow Control: while loops• while (j < 5) {…} Test at beginning.• condition: (j < 5) opposite: (j 5)

MOVE.W j,D0 ;get j from memoryLOOP CMPI.W #5,D0

BGE NEXT ; exit loop if… ; condition falseADDQ #1,D0BRA LOOP

NEXT …j DC.W 2

Page 13: CEG 320/520: Computer Organization and Assembly Language ProgrammingFlow Control 1 Flow Control

CEG 320/520: Computer Organization and Assembly Language Programming Flow Control 13

Flow Control: Other ways to use branch• You don’t have to follow the mnemonics• The best thing to do is to look at the branch

condition in Table C.6• EXAMPLE: for(j=-5; j!=0; j++){…}

MOVE.B #-5,D0

LOOP BEQ DONE

do something…

ADDQ.B #1,D0

BRA LOOP

DONE move on…

BRA if Z=1

BRA doesn’t affect the CCR

We’ll use D0 for j

Page 14: CEG 320/520: Computer Organization and Assembly Language ProgrammingFlow Control 1 Flow Control

CEG 320/520: Computer Organization and Assembly Language Programming Flow Control 14

Flow Control: Conditionals

• if (x == 5) {…}

• The most efficient way to code this is to skip the code {…} if the condition is not true.

MOVE.W x,D2

CMPI.W #5,D2

BNE SKIP

… ; {…}

SKIP next instruction…

Page 15: CEG 320/520: Computer Organization and Assembly Language ProgrammingFlow Control 1 Flow Control

CEG 320/520: Computer Organization and Assembly Language Programming Flow Control 15

Flow Control: If…then…else• if (y > 3){ true-code}else{ false-code};

MOVE.W Y,D0

CMPI.W #3,D0

BLE ELSE

true-code

BRA NEXT

ELSE false-code

NEXT next-instruction

Again we test for the opposite of the if condition, and skip the true-code if necessary. At the end of the true-code, we use a BRA to avoid also executing the false code.

Page 16: CEG 320/520: Computer Organization and Assembly Language ProgrammingFlow Control 1 Flow Control

CEG 320/520: Computer Organization and Assembly Language Programming Flow Control 16

MEMORY

$1000 7 N$1002 3 NUM$1004 5$1006 8$1008 10$100A 5$100C 12$100E 14$1010 ? SUM

Example – Adding n integers

MOVE.W N,D1MOVE.W #NUM,A2CLR.W D0

LOOP ADD.W (A2)+,D0SUB.W #1,D1BGT LOOPMOVE.W D0,SUMENDORG $001000

N DC.W 7NUM DC.W 3,5,8,10,5,12,14SUM DS 1

Page 17: CEG 320/520: Computer Organization and Assembly Language ProgrammingFlow Control 1 Flow Control

CEG 320/520: Computer Organization and Assembly Language Programming Flow Control 17

Branches and Overflow

• In the 68000 the V bit is set on 2’s complement overflow for the operand size (B, W, L)– BGE (branch when greater or equal)

• Branch when NV = 0

– Example: SUB.B D1, D2 (DEST – SRC)• N=0 when D2 D1

• What if [D1] = 1, and [D2] = –128?

• Can we represent –129 in an 8-bit byte in 2’s complement? (10000000 + 11111111)

• The result is 127 (positive), N=0, V=1

• We don’t branch, which is good since –128 < 1 !

Page 18: CEG 320/520: Computer Organization and Assembly Language ProgrammingFlow Control 1 Flow Control

CEG 320/520: Computer Organization and Assembly Language Programming Flow Control 18

Operation sizes and Overflow

• In the 68000, the V-bit is set when there is a 2’s complement overflow for the size of operand specified in the instruction!

• In other words, suppose D0 = $00000063– ADD.B #$60,D0 sets V=1 and N=1– ADD.W #$60,D0 sets V=0 and N=0

• Same thing goes for the carry bit– If a byte operation would produce a carry into bit

8, the C bit is set, and bit 8 retains its old value.

Page 19: CEG 320/520: Computer Organization and Assembly Language ProgrammingFlow Control 1 Flow Control

CEG 320/520: Computer Organization and Assembly Language Programming Flow Control 19

Machine Code: Branches

• 0110 CCCC PPPP PPPP or

0110 CCCC 0000 0000PPPP PPPP PPPP PPPP

• Displacement can be an 8-bit or 16-bit value.– Determined by assembler– Dependent on the size of the jump

Page 20: CEG 320/520: Computer Organization and Assembly Language ProgrammingFlow Control 1 Flow Control

CEG 320/520: Computer Organization and Assembly Language Programming Flow Control 20

Machine Code: Branches - example

LOOP ADD.W D2,D3 1 word

SUB.W NUM, D1 3 words

BGE LOOP 1 word

• Assuming LOOP is at address 1000, then the PC contains 1008 after fetching the BGE instruction, so the offset is –10 or $F6

• The entire instruction is:0110 1100 1111 0110= $6CF6

Page 21: CEG 320/520: Computer Organization and Assembly Language ProgrammingFlow Control 1 Flow Control

CEG 320/520: Computer Organization and Assembly Language Programming Flow Control 21

Putting it together: Summing an array ORG $1000

CLR.W D3 ; The sum will go into D3

MOVEA.L #NUMS,A1 ; A1 -> current array element

MOVE.W LEN,D2 ; D2 = number of array elements remaining

LOOP ADD.W (A1)+,D3 ; Add the next element

SUBQ.W #1,D2 ; Now there is one less remaining

BNE LOOP ; Continue if D2 != 0

MOVE.B #EXIT,D7 ;

TRAP #14 ; Exit back to the simulator

;

EXIT EQU 228

;

LEN DC.W 5 ; LEN = Size of the array

NUMS DC.W 123,-56,453,-1045,765 ; NUMS = the array

End

Page 22: CEG 320/520: Computer Organization and Assembly Language ProgrammingFlow Control 1 Flow Control

CEG 320/520: Computer Organization and Assembly Language Programming Flow Control 22

Flow Control: In-Class Exercises

Page 23: CEG 320/520: Computer Organization and Assembly Language ProgrammingFlow Control 1 Flow Control

CEG 320/520: Computer Organization and Assembly Language Programming Flow Control 23

Did you know?

• You can give C a “hint” about which variables to keep in registers?

register int counter;

int i, j;

counter = 0;

for (i=0; i<100; i++) {

for (j=0; j<100; j++) {

counter += 3;

}

}

Page 24: CEG 320/520: Computer Organization and Assembly Language ProgrammingFlow Control 1 Flow Control

CEG 320/520: Computer Organization and Assembly Language Programming Flow Control 24

Flow Control: You Should Know…

• Review– Condition code register– LEA instructions– Branch instructions

• Know how to implement:– For loops– While loops– if/then/else statements– Unconditional branches

• Next Topic: – The Stack and Subroutines– HVZ: 3.13 Stacks and Subroutines