1 / 24

Flow Control

Flow Control. 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. ALU.

terri
Télécharger la présentation

Flow Control

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Flow Control Flow Control 1

  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 Flow Control 2

  3. ALU 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. … N Z V C … Flow Control 3

  4. Table C.5 Flow Control 4

  5. Table C.4 Flow Control 5

  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] Flow Control 6

  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 Flow Control 7

  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 Flow Control 8

  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 LEA ARRAY,A0 ; … at the value -12 LOOP ADD.W (A0)+,D1 ADDQ.W #1,D0 ;Add 1 to the counter BLT LOOP ;Loop while result < 0 ARRAY DC.W 12,4,8 Flow Control 9

  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, and necessary if you want to use the value of i. D0 - #5 However, you have to get the immediate value #5 from memory repeatedly. There is a more efficient way to loop 5 times… Flow Control 10

  11. Flow Control: Fixed loops MOVEI.B #5,D0 LOOP 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: Flow Control 11

  12. Flow Control: while loops • while (j < 5) {…} Test at beginning. • condition: (j < 5) opposite: (j  5) MOVE.W j,D0 ;get j from memory LOOP CMPI.W #5,D0 BGE NEXT ; exit loop if … ; condition false ADDQ #1,D0 BRA LOOP NEXT … j DC.W 2 Flow Control 12

  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… We’ll use D0 for j BRA if Z=1 BRA doesn’t affect the CCR Flow Control 13

  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… Flow Control 14

  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. Flow Control 15

  16. Example – Adding n integers MOVE.W N,D1 MOVE.W #NUM,A2 CLR.W D0 LOOP ADD.W (A2)+,D0 SUB.W #1,D1 BGT LOOP MOVE.W D0,SUM END ORG $001000 N DC.W 7 NUM DC.W 3,5,8,10,5,12,14 SUM DS 1 MEMORY $1000 7 N $1002 3 NUM $1004 5 $1006 8 $1008 10 $100A 5 $100C 12 $100E 14 $1010 ? SUM Flow Control 16

  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 ! Flow Control 17

  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. Flow Control 18

  19. Machine Code: Branches • 0110 CCCC PPPP PPPP or0110 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 Flow Control 19

  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 Flow Control 20

  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 Flow Control 21

  22. Flow Control: In-Class Exercises Flow Control 22

  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; } } Flow Control 23

  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 Flow Control 24

More Related