9/20/6Lecture 3 - Instruction Set - Al1 Program Design Examples.
-
Upload
rolf-logan -
Category
Documents
-
view
231 -
download
0
Transcript of 9/20/6Lecture 3 - Instruction Set - Al1 Program Design Examples.
9/20/6 Lecture 3 - Instruction Set - Al 2
Lecture Overview Have seen the initial part of
Top down design Modular design Parameter Passing Stack and Local Variables
Today Structured Programming continued HLL Structures to assembler
Example
9/20/6 Lecture 3 - Instruction Set - Al 3
Assembler for HLL Expressions HLL: IF (cond L) THEN Action_S
Assume data, result of evaluating condition L, to be tested in D0. It has a value of either 1 (true) or 0 (false).
TST.B D0 test low byte DO BEQ.S EXIT action_SEXIT
The BEQ.S is a short 8-bit branch where the target address displacement is <= what can be specified by 8-bits
If the data L to be tested in reg If the data L to be tested is in register D0 and the
test is L = 0 with action S if L=0 Could do
CMPI.W #0, D0 BNE around action S around following_instructions
Note: This does explain how to do a test with the results of the test in D0. That would take a couple of instructions to do. Ref page 66.
9/20/6 Lecture 3 - Instruction Set - Al 4
9/20/6 Lecture 3 - Instruction Set - Al 5
Assembler for HLL Expressions 2 Here D0 has result of test of condition HLL: IF (cond L) THEN S1 ELSE S2
TST.B D0 BEQ.S ELSE S1_actions BRA.S EXIT ELSE S2_actions … EXIT
9/20/6 Lecture 3 - Instruction Set - Al 6
Assembler for HLL Expressions 3 HLL: FOR I = N1 TO N2 DO S
MOVE.B #N1,D1 d1 is loop cntr NEXT S_actions ADDQ.B #1,D1 inc loop cntr CMP.B #N2+1,D1 test BNE NEXT EXIT
9/20/6 Lecture 3 - Instruction Set - Al 7
Assembler for HLL Expressions 4 HLL: WHILE L DO S
REPEAT TST.B DO BEQ.S EXIT if 0 quit S_actions within actions will perform a compare that leaves the TRUE(1) or FALSE(0) in D0 BRA REPEAT EXIT
NOTE: A while loop may or may not execute once. Why TST is at start.
9/20/6 Lecture 3 - Instruction Set - Al 8
Assembler for HLL Expressions 5 HLL: REPEAT S UNTIL L
NEXT S_actions --and code that puts
result of ‘L’ in D0 as T/F (F=0) TST.B D0 BEQ NEXT EXIT
9/20/6 Lecture 3 - Instruction Set - Al 9
Assembler for HLL Expressions 6 HLL: FOR I=N DOWNTO -1 DO S
MOVE.W #n,D1 NEXT S_actions DBRA D1,NEXT
Decrement D1 and loop if not -1
9/20/6 Lecture 3 - Instruction Set - Al 10
Testability In the real world $$$ come into play Could test to degree that errors never occur Test to degree that is rational Structured code is more testable than
alternatives Modules are units to be tested Interaction of modules is tested
9/20/6 Lecture 3 - Instruction Set - Al 11
Recoverabiltiy Also called exception handling What does the system do with erroneous data What does system do in response to certain
classes or errors. Decision on what action to take when these
conditions occur, such as divide by 0. A poorly designed plan may be far worse than
no plan at all.
9/20/6 Lecture 3 - Instruction Set - Al 12
Pseudocode (PDL) PDL is a way to write down an algorithm
A compromise between HLL and assembler Facilitates the production of reliable code Much like modern HLLs
9/20/6 Lecture 3 - Instruction Set - Al 13
Program Specs D0 used for character input and output – low
order byte of D0 D1 contains code of 0,1, or 2
0 – clear the buffer and reset pointers 1 – place character in D0 into buffer 2 – remove character from buffer to D0
Buffer starts at $01 0000 and is 1,024 bytes
9/20/6 Lecture 3 - Instruction Set - Al 14
Program Specs 2 Scratch storage may be placed after the end of
the buffer – up to 32 bytes When buffer is full oldest data is overwritten
– bit 31 of D0 is set to indicate overflow Underflow action – D0.B set to 0 – msb set No other register modified
9/20/6 Lecture 3 - Instruction Set - Al 16
PDL Level 1
Module: Circular_buffer Save working registers Select one of:
Initialize System Input a character Output a character
Restore working registers End Circular_buffer
9/20/6 Lecture 3 - Instruction Set - Al 17
PDL Level 2
Module: Circular_buffer Save working registers IF [D1]=0 THEN Initialize END IF IF [D1]=1 THEN Input_char END IF IF [D1]=2 THEN Output_char END IF End Circular_buffer
9/20/6 Lecture 3 - Instruction Set - Al 18
PDL – level 2 continued Initialize
Count=0 In_pointer := Start
Out_pointer := Start
End Initialize
9/20/6 Lecture 3 - Instruction Set - Al 19
PDL – level 2 cont. Input_character
Store new character Deal with any overflow
End Input_character
Routine is still a level too high to encode
9/20/6 Lecture 3 - Instruction Set - Al 20
PDL – level 3 Input_character
Store new character at in_pointer In_pointer := In_pointer + 1 If In_pointer>End THEN In_pointer:=Start endif If Count < Max THEN Count:=Count+1
ELSE BEGIN Set overflow flag ; Out_pointer := Out_pointer + 1)