Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


Presentation on theme: "CEG 320/520: Computer Organization and Assembly Language ProgrammingFlow Control 1 Flow Control."— Presentation transcript:

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

2 CEG 320/520: Computer Organization and Assembly Language ProgrammingFlow 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

3 CEG 320/520: Computer Organization and Assembly Language ProgrammingFlow 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 …

4 CEG 320/520: Computer Organization and Assembly Language ProgrammingFlow Control 4 Table C.5

5 CEG 320/520: Computer Organization and Assembly Language ProgrammingFlow Control 5 Table C.4

6 CEG 320/520: Computer Organization and Assembly Language ProgrammingFlow 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! Remember that CMP and SUB compute [dest] – [src]Remember that CMP and SUB compute [dest] – [src]

7 CEG 320/520: Computer Organization and Assembly Language ProgrammingFlow 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

8 CEG 320/520: Computer Organization and Assembly Language ProgrammingFlow 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

9 CEG 320/520: Computer Organization and Assembly Language ProgrammingFlow 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, starting LEAARRAY,A0; … at the value -12 LOOPADD.W(A0)+,D1 ADDQ.W#1,D0;Add 1 to the counter BLTLOOP;Loop while result < 0 ARRAYDC.W12,4,8

10 CEG 320/520: Computer Organization and Assembly Language ProgrammingFlow Control 10 Flow Control: for loops for(i=0; i<5; i++) {…} CLR.BD0 LOOP… ADDQ.B#1,D0 CMPI.B#5,D0 BLTLOOP This is easy to read, and necessary if you want to use the value of i. However, you have to get the immediate value #5 from memory repeatedly. There is a more efficient way to loop 5 times… D0 - #5

11 CEG 320/520: Computer Organization and Assembly Language ProgrammingFlow Control 11 Flow Control: Fixed loops MOVEI.B#5,D0 LOOPdo something… SUBQ.B#1,D0 BNELOOP; BRA if Z=0 move on… Using a down counter. A more efficient way to loop 5 times:

12 CEG 320/520: Computer Organization and Assembly Language ProgrammingFlow Control 12 Flow Control: while loops while (j < 5) {…} Test at beginning. condition: (j < 5) opposite: (j  5) MOVE.Wj,D0;get j from memory LOOPCMPI.W#5,D0 BGENEXT; exit loop if …; condition false ADDQ#1,D0 BRALOOP NEXT… jDC.W2

13 CEG 320/520: Computer Organization and Assembly Language ProgrammingFlow 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 LOOPBEQDONE do something… ADDQ.B#1,D0 BRALOOP DONEmove on… BRA if Z=1 BRA doesn’t affect the CCR We’ll use D0 for j

14 CEG 320/520: Computer Organization and Assembly Language ProgrammingFlow 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.Wx,D2 CMPI.W#5,D2 BNESKIP …; {…} … SKIPnext instruction…

15 CEG 320/520: Computer Organization and Assembly Language ProgrammingFlow Control 15 Flow Control: If…then…else if (y > 3) { true-code } else { false-code }; MOVE.WY,D0 CMPI.W#3,D0 BLEELSE true-code BRANEXT ELSEfalse-code NEXTnext-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.

16 CEG 320/520: Computer Organization and Assembly Language ProgrammingFlow Control 16 MEMORY $10007N $10023NUM $10045 $10068 $100810 $100A5 $100C12 $100E14 $1010?SUM Example – Adding n integers MOVE.W N,D1 MOVE.W #NUM,A2 CLR.W D0 LOOPADD.W (A2)+,D0 SUB.W #1,D1 BGT LOOP MOVE.W D0,SUM END ORG $001000 NDC.W 7 NUM DC.W 3,5,8,10,5,12,14 SUMDS1

17 CEG 320/520: Computer Organization and Assembly Language ProgrammingFlow 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 N  V = 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 !

18 CEG 320/520: Computer Organization and Assembly Language ProgrammingFlow 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.

19 CEG 320/520: Computer Organization and Assembly Language ProgrammingFlow Control 19 Machine Code: Branches 0110 CCCC PPPP PPPP or 0110 CCCC 0000 0000 PPPP PPPP PPPP PPPP Displacement can be an 8-bit or 16-bit value. –Determined by assembler –Dependent on the size of the jump

20 CEG 320/520: Computer Organization and Assembly Language ProgrammingFlow Control 20 Machine Code: Branches - example LOOPADD.WD2,D3 1 word SUB.WNUM, D1 3 words BGELOOP 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

21 CEG 320/520: Computer Organization and Assembly Language ProgrammingFlow 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

22 CEG 320/520: Computer Organization and Assembly Language ProgrammingFlow Control 22 Flow Control: In-Class Exercises

23 CEG 320/520: Computer Organization and Assembly Language ProgrammingFlow 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; }

24 CEG 320/520: Computer Organization and Assembly Language ProgrammingFlow 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


Download ppt "CEG 320/520: Computer Organization and Assembly Language ProgrammingFlow Control 1 Flow Control."

Similar presentations


Ads by Google