EL - 262 / E1 Fall 2001
Introduction to Microprocessors and Microassembly Programming
Professor: Case
Submitted By:
Andrew Buettner
Lab #2: Addressing Modes, Branching, and the ASM Command
Table Of Contents
1) Cover Page...............................1
2) Table of Contents.....................2
3) Objective..................................3
4) Components Used....................4
5) Procedures................................4
6) Lab Data /
Results.....................5
1) Table 1...........................................5
2) Table 2...........................................5
3) Table 3...........................................5
4) Table 4...........................................5
5) Table 5...........................................6
6) Table 6...........................................6
7) Table 7...........................................6
8) Table 8...........................................6
9) Table 9...........................................6
10) Table 10........................................6
11) Table 11........................................7
12) Table 12........................................7
13) Table 13........................................7
14) Table 14........................................7
15) Table 15........................................7
16) Table 16........................................7
17) Table 17........................................8
18) Table 18........................................8
19) Table 19........................................8
20) Table 20........................................8
21) Table 21........................................8
22) Table 22........................................8
23) Table 23........................................9
24) Table 24........................................9
25) Table 25........................................9
26) Table 26........................................9
27) Table 27........................................9
28) Table 28......................................10
Table Of Contents (Continued)
29) Table 29......................................10
30) Table 30......................................10
31) Table 31......................................10
32) Table 32......................................10
33) Table 33......................................10
34) Table 34.......................................11
7) Answers to Lab Questions.......11
8) Conclusions.............................12
9) Attachments.............................12
Objective
The objective of this lab is to learn how to use the ASM command on the 68HC11 for on line assembly of programs. Additionally, to learn the syntax of the various branch commands to control program flow. Lastly to be able to write code that involves various branch commands and to use the Trace command to observe command - level program flow.
Components Used
1) Computer station with connected BUFFALO client. #D
Procedures
1) Bring the stations up.
2) Using MM set the following stack into memory at &HB600: 45, 56, 65, 76, 87, AB
3) Using RM set the IX register to &HB600, and the program counter to &H0100
4) Using MM set the following stack into &H0100: F6, B6, 02.
5) Use STOPAT to execute the code, record results.
6) Use RM to set the program counter back to &H0100 and IX to &HB600
7) Use the ASM program to enter the following code after the current stack:
a) LDX #B602
b) LDX B602
c) LDAA 3,X
d) LDX 4,X
e) STX B604
f) STX 3,X
8) Record Stack
9) Using MM enter the following stack at &H0100 B6, B6, 00, BB, B6, 01, B7, 01, 0C, 7E, 01, 20
10) Store at memory &H1020: 7E, 01, 00
11) Use the Trace (T) command to step through the code and observe results.
12) Set the program counter to &H0100
13) Load the following into stack at &H0100: B6, B6, 03, 81, 76, 27, F9, 7E, 01, 07
14) Trace the program's execution and note results.
15) Change &H0104 to something other than 76 and repeat step 14.
Lab Data / Results
1) Table 1: Stack of &HB600 Before Program Execution
|
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
A |
B |
C |
D |
E |
F |
B60x |
45 |
56 |
65 |
76 |
87 |
AB |
23 |
12 |
5D |
28 |
50 |
10 |
2A |
A7 |
0D |
B1 |
B61x |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
B62x |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
2) Table 2: Stack of &H0100 Before Program Execution
|
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
A |
B |
C |
D |
E |
F |
010x |
F6 |
B6 |
02 |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
011x |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
012x |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
013x |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
014x |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
015x |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
016x |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
017x |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
018x |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
3) Table 3: Registers Before Program Execution
Register: |
PC |
IY |
IX |
AA |
AB |
CCR |
SP |
Value: |
0100 |
FFFF |
B600 |
FF |
FF |
D0 |
0041 |
4) Table 4: Stack After Program Execution (&H0100)
|
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
A |
B |
C |
D |
E |
F |
010x |
F6 |
B6 |
2 |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
011x |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
012x |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
013x |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
014x |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
015x |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
016x |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
017x |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
018x |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
5) Table 5: Stack After Program Execution (&HB600)
|
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
A |
B |
C |
D |
E |
F |
B60x |
45 |
56 |
65 |
76 |
87 |
AB |
23 |
12 |
5D |
28 |
50 |
10 |
2A |
A7 |
0D |
B1 |
B61x |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
B62x |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
6) Table 6: Registers After Program Execution
Register: |
PC |
IY |
IX |
AA |
AB |
CCR |
SP |
Value: |
0103 |
FFFF |
B600 |
FF |
65 |
D0 |
0041 |
7) Table 7: Stack for Step 7 Before any Trace
|
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
A |
B |
C |
D |
E |
F |
010x |
CE |
B6 |
02 |
FE |
B6 |
02 |
A6 |
03 |
EE |
04 |
FF |
B6 |
04 |
EF |
03 |
FF |
011x |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
012x |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
013x |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
014x |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
015x |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
016x |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
017x |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
018x |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
8) Table 8: Registers Before Trace
Register: |
PC |
IY |
IX |
AA |
AB |
CCR |
SP |
Value: |
0100 |
FFFF |
B600 |
FF |
FF |
D0 |
0041 |
9) Table 9: Registers After First Trace *Note: If Stack is unlisted, no change occurred*
Register: |
PC |
IY |
IX |
AA |
AB |
CCR |
SP |
Value: |
0103 |
FFFF |
B602 |
FF |
FF |
98 |
0041 |
10) Table 10: Registers After Trace 2
Register: |
PC |
IY |
IX |
AA |
AB |
CCR |
SP |
Value: |
0106 |
FFFF |
6576 |
FF |
FF |
90 |
0041 |
11) Table 11: Registers After Trace 3
Register: |
PC |
IY |
IX |
AA |
AB |
CCR |
SP |
Value: |
0108 |
FFFF |
6576 |
00 |
FF |
94 |
0041 |
12) Table 12: Registers After Trace 4
Register: |
PC |
IY |
IX |
AA |
AB |
CCR |
SP |
Value: |
010A |
FFFF |
0000 |
00 |
FF |
94 |
0041 |
13) Table 13: Registers After Trace 5 *Stack does not change*
Register: |
PC |
IY |
IX |
AA |
AB |
CCR |
SP |
Value: |
010D |
FFFF |
6576 |
00 |
FF |
94 |
0041 |
14) Table 14: Registers After Trace 6 *Stack does not change*
Register: |
PC |
IY |
IX |
AA |
AB |
CCR |
SP |
Value: |
010F |
FFFF |
6576 |
00 |
FF |
94 |
0041 |
15) Table 15: Stack for Trace / Jump Operation
|
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
A |
B |
C |
D |
E |
F |
010x |
B6 |
B6 |
00 |
BB |
B6 |
01 |
B7 |
01 |
0C |
7E |
01 |
20 |
04 |
EF |
03 |
FF |
011x |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
012x |
7E |
01 |
00 |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
013x |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
014x |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
015x |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
016x |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
017x |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
018x |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
16) Table 16: Registers Before Trace Operations
Register: |
PC |
IY |
IX |
AA |
AB |
CCR |
SP |
Value: |
0100 |
FFFF |
0000 |
00 |
FF |
94 |
0041 |
17) Table 17: Registers After Trace 1
Register: |
PC |
IY |
IX |
AA |
AB |
CCR |
SP |
Value: |
0103 |
FFFF |
0000 |
45 |
FF |
90 |
0041 |
18) Table 18: Registers After Trace 2
Register: |
PC |
IY |
IX |
AA |
AB |
CCR |
SP |
Value: |
0106 |
FFFF |
0000 |
9B |
FF |
9A |
0041 |
19) Table 19: Registers After Trace 3
Register: |
PC |
IY |
IX |
AA |
AB |
CCR |
SP |
Value: |
0109 |
FFFF |
0000 |
9B |
FF |
98 |
0041 |
20) Table 20: Stack After Trace 3 Illustrating Changes
|
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
A |
B |
C |
D |
E |
F |
010x |
B6 |
B6 |
00 |
BB |
B6 |
01 |
B7 |
01 |
0C |
7E |
01 |
20 |
9B |
EF |
03 |
FF |
011x |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
012x |
7E |
01 |
00 |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
013x |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
014x |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
015x |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
016x |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
017x |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
018x |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
21) Table 21: Registers After Trace 4
Register: |
PC |
IY |
IX |
AA |
AB |
CCR |
SP |
Value: |
0120 |
FFFF |
0000 |
9B |
FF |
98 |
0041 |
22) Table 22: Registers After Trace 5
Register: |
PC |
IY |
IX |
AA |
AB |
CCR |
SP |
Value: |
0109 |
FFFF |
0000 |
9B |
FF |
98 |
0041 |
23) Table 23: Registers After Trace 6
Register: |
PC |
IY |
IX |
AA |
AB |
CCR |
SP |
Value: |
0100 |
FFFF |
0000 |
9B |
FF |
98 |
0041 |
24) Table 24: Registers After Trace 7
Register: |
PC |
IY |
IX |
AA |
AB |
CCR |
SP |
Value: |
0103 |
FFFF |
0000 |
45 |
FF |
90 |
0041 |
*Note: This is the same as the first step and returns to repeat at that point*
25) Table 25: Stack for Compare Program
|
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
A |
B |
C |
D |
E |
F |
010x |
B6 |
B6 |
00 |
BB |
B6 |
01 |
B7 |
01 |
0C |
7E |
01 |
20 |
9B |
EF |
03 |
FF |
011x |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
012x |
7E |
01 |
00 |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
013x |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
014x |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
015x |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
016x |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
017x |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
018x |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
B60x |
45 |
56 |
65 |
76 |
87 |
AB |
23 |
12 |
5D |
28 |
50 |
10 |
2A |
A7 |
0D |
B1 |
B61x |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
B62x |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
26) Table 26: Registers Before Compare Program
Register: |
PC |
IY |
IX |
AA |
AB |
CCR |
SP |
Value: |
0100 |
FFFF |
0000 |
45 |
65 |
90 |
0041 |
27) Table 27: Registers After Trace 1
Register: |
PC |
IY |
IX |
AA |
AB |
CCR |
SP |
Value: |
0103 |
FFFF |
0000 |
76 |
65 |
90 |
0041 |
28) Table 28: Registers After Trace 2
Register: |
PC |
IY |
IX |
AA |
AB |
CCR |
SP |
Value: |
0105 |
FFFF |
0000 |
76 |
65 |
94 |
0041 |
29) Table 29: Registers After Trace 2
Register: |
PC |
IY |
IX |
AA |
AB |
CCR |
SP |
Value: |
0100 |
FFFF |
0000 |
76 |
65 |
94 |
0041 |
*Note: This is identical to the initial trace and loops to that point*
30) Table 30: Stack With Altered &HB603 Value
|
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
A |
B |
C |
D |
E |
F |
010x |
B6 |
B6 |
00 |
BB |
B6 |
01 |
B7 |
01 |
0C |
7E |
01 |
20 |
9B |
EF |
03 |
FF |
011x |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
012x |
7E |
01 |
00 |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
013x |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
014x |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
015x |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
016x |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
017x |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
018x |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
B60x |
45 |
56 |
65 |
70 |
87 |
AB |
23 |
12 |
5D |
28 |
50 |
10 |
2A |
A7 |
0D |
B1 |
B61x |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
B62x |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
31) Table 31: Registers Before Trace Operations
Register: |
PC |
IY |
IX |
AA |
AB |
CCR |
SP |
Value: |
0100 |
FFFF |
0000 |
76 |
65 |
94 |
0041 |
32) Table 32: Registers After First Trace
Register: |
PC |
IY |
IX |
AA |
AB |
CCR |
SP |
Value: |
0103 |
FFFF |
0000 |
70 |
65 |
90 |
0041 |
33) Table 33: Registers After Trace 2
Register: |
PC |
IY |
IX |
AA |
AB |
CCR |
SP |
Value: |
0105 |
FFFF |
0000 |
70 |
65 |
99 |
0041 |
34) Table 34: Registers After Trace 3 and All Subsequent Traces
Register: |
PC |
IY |
IX |
AA |
AB |
CCR |
SP |
Value: |
0107 |
FFFF |
0000 |
70 |
65 |
99 |
0041 |
Answers to Lab Questions
1) Q: Write code that will place the smallest number (Unsigned Binary) of a stack in &HB600 - &HB606 into memory location &H01C0.
A: 1) 0100 LDAB #$FF
2) 0102 LDX #$B600
3) 0105 STAB $01C0
4) 0108 INCB
5) 0109 CMPB #06
6) 010B BGT $0121
7) 010D LDY #B600
8) 0111 ABY
9) 0113 LDAA 0,Y
10) 0116 CMPA $01C0
11) 0119 BHI $0108
12) 011B STAA $01C0
13) 011E JMP $0108
14) 0121 STOP
2) Q: Write code that will place the smallest number (Signed Binary) of a stack in &HB600 - &HB606 into memory location &H01C0.
A: 1) 0100 LDAB #$FF
2) 0102 LDX #$B600
3) 0105 STAB $01C0
4) 0108 INCB
5) 0109 CMPB #06
6) 010B BGT $0121
7) 010D LDY #B600
8) 0111 ABY
9) 0113 LDAA 0,Y
10) 0116 CMPA $01C0
11) 0119 BGT $0108
12) 011B STAA $01C0
13) 011E JMP $0108
14) 0121 STOP
Conclusions
From this lab it is shown that ASM can be used to enter code using the 68HC11's assembly language, instead of directly programming it with machine code. Additionally the Trace command was observed as it stepped through the program code. Also, the various branching instructions were implemented and produced the correct results. Through this lab I learned the syntax of the ASM command (ASM <starting address>). Also I stepped through the code produced by step seven to prove that the stack at &HB600 did not change even though the command was a write. I believe that the reason for the no change condition is because the memory locations specified are EEPROM memories, and can not be directly written to. The results from that trace consist of tables 7 - 14. Another problem that was encountered was the fact that B could not be added to X to form an address. I discovered this problem while working with the two lab questions. In order to compensate for this problem, I used Y as a temporary register and added B to it, then used that as the stack point address. This workaround successfully solved the problem and the submitted code in this lab performed optimally. Other than that there were no other problems with this lab.
Attachments
Original lab handout
Original lab data
Calculations