EE 308

Exam 1

February 13, 1998

 Name:

You may use any of the Motorola data books. No calculators allowed. Show all work. Partial credit will be given. No credit will be given if an answer appears with no supporting work.

1. Show the value in accumulator A and the indicated condition code flags after an HC11 carries out the indicated instructions. Before the first instruction in each part, assume all the flags are zero.
2.  (a) ACCA N Z V C ldaa #0x7c 7c 0 0 0 0 adaa #0x84 00 0 1 0 1

 (b) ACCA N Z V C ldaa #0xa7 a7 1 0 0 0 adaa #0x95 3c 0 0 1 1

 (c) ACCA N Z V C ldaa #0x3e 3e 0 0 0 0 adaa #0x6d ab 1 0 1 0

 (d) ACCA N Z V C ldaa #0x6e 6e 0 0 0 0 suba #0x92 dc 1 0 1 1

 (e) ACCA N Z V C ldaa #0x00 00 0 1 0 0 suba #0x92 6e 0 0 0 1

3. Convert the following eight-bit hexadecimal numbers to decimal numbers.
4.  Hex Unsigned Decimal Signed Decimal (a) 27 39 39 (b) AC 172 -84 (d) 7F 127 127

5. The following shows some data in an HC11’s memory. Reverse assemble the first seven instructions starting at address 0x0100. That is, write down the op codes and operands which the hex numbers represent. Also indicate the starting address of and addressing mode used by each instruction. I’ve done the first instruction for you.
6.  0 1 2 3 4 5 6 7 8 9 A B C D E F 0100 8E 01 2F CE 00 10 DC 23 3C BD 01 1A 38 20 F4 DE 0110 20 EC 02 BD 01 1E 96 2C C6 1A 94 10 8B 0C 88 AA 0120 39 FE 12 34 CC 33 44 5C E7 0A B6 FF E2 B7 E0 15

 Starting Address Op Code Operand Addressing Mode 0x0100 lds #0x012F IMM (a) 0x0103 ldx #0x0010 IMM (b) 0x0106 ldd *0x23 DIR (c) 0x0108 pshx INH (d) 0x0109 jsr 0x011A EXT (e) 0x010C bra -12 REL (f) 0x010D pulx INH 0x010F ldx *0x20 DIR

7. Using the same data in the HC11’s memory as in Problem 3, indicate the values in the registers after the HC11 executes the following instructions. Also, write down the number of cycles needed to execute each instruction.
8.  Instruction A B D X Y SP Cycles 00 00 0000 0000 0000 0127 (a) ldx #0x0125 0125 3 (b) ldd 0x0125 33 44 3344 5 (c) addb 4,x 4E 334E 4 (d) eora #0x55 66 664E 2 (e) puly E70A 0129 6 (f) rts 012B 5

9. What happens to the stack, stack pointer and program counter when you execute the instruction
10. jsr 0x0125

Before the instruction is executed assume the program counter is 0x0100 and the stack pointer is 0x01FF.

The address of the next instruction (0x0103) will be pushed onto the stack – 0x03 will go into memory location 0x01FF, and 0x01 will go into memory location 0x01FE. The stack pointer will be decremented by two to 0x01FD. The program counter will be loaded with the new instruction address 0x0125.

11. Write a flow chart and assembly language program to meet this specification: K1 and K2 are sixteen-bit unsigned variables.

START PROGRAM

IF K1 < K2

THEN PORTB = 0

ELSE PORTB = 127

ENDIF

END PROGRAM

Make sure this is a complete assembly language program – be sure to include .org statements, etc. Make sure the program will be placed in the HC11’s RAM. K1 and K2 should be located at 0x1010 and 0x1012 respectively.

Special things to look for: 16-bit registers should be used for K1 and K2. Branches should be done with unsigned instructions (e.g., blo or bhs).

One way:

```K1    = 0x1010
K2    = 0x1012
PORTB = 0x1004

.area  CODE (ABS)
.org   0x0100
ldx    K1
cpx    K2
blo    l1
ldaa   #127
staa   PORTB
bra    l2
l1:   clr    PORTB
l2:   swi
```

Another way:

```PORTB = 0x1004

.area  CODE (ABS)
.org   0x0100
ldd    K1
cpd    K2
blo    l1
ldaa   #127
staa   PORTB
bra    l2
l1:   clr    PORTB
l2:   swi

.area  DATA (ABS)
.org   0x1010
K1    .ds    2
D2    .ds    2
```