EE 308 -- LAB 3
Assembly Language Programming
Introduction and Objectives

The purpose of this lab is to write a few assembly language programs and test them on the simulator and on your EVBU.

Pre-Lab

Make sure you have the programs clearly thought out and written down before you come to lab. You should put all your code starting at memory location 0x0100. You are encouraged to bring the programs in on disk.

The Lab

  1. Write a program which increments address 0x1004 indefinitely. (Note: this is a two-line program.)

    Test your program both on the simulator and the EVBU. Report what happens to port B when you run this program on the simulator. Check that the port B lines are being asserted on your EVBU. (Use a logic probe to verify that the Port B lines are toggling.)

  2. Write a program to swap the last element of an array with the first element, the next-to-last element with the second element, etc. The array should have 0x20 eight-bit numbers and should start at 0x0000. (This is a problem from the homework due Jan. 31.)

    Check that your program works both on the simulator and the EVBU. Us the following data for your test:


    0 1 2 3 4 5 6 7 8 9 A B C D E F
    000 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
    001 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F

  3. Write a program to compute the sum of the positive numbers of an array with 0x30 eight-bit numbers. Store the sum at 0x0000--0x0001. The array starts at 0xe000. (This is a problem from the homework due Jan. 31.)

    Test your program on the simulator and the EVBU. Note that it is inconvenient to check this program on the simulator. Why? What must you do to use the simulator the test your program?

  4. Write a program that puts the greatest one-byte 2's complement number from memory locations 0xE000 through 0xE01F in accumulator A and memory location 0x0000. Test your program on the EVBU. (Why can't you use the simulator to test your program?) The answer I got is 0x7E.

  5. Write a program that puts the greatest unsigned number from memory locations 0xE000 through 0xE01F in accumulator A and memory location 0x0001. Test your program on the EVBU. The answer I got is 0xE3.

Loading Programs into EEPROM

You can load programs into the on-chip EEPROM. When loaded in EEPROM your program will remain on your HC11 even after turning off power. Before loading your program into EEPROM, you must re-assemble it after instructing the assembler to start your code at address 0xB600.

The details of how to download your program into EEPROM are given in the Universal Evaluation Board User's Manual in Section 4.4.2. Basically, you will use BUFFALO to change the baud rate of the HC11 to 300 baud; then you will change the baud rate of your Windows Terminal to 300 baud, and download your program to the HC11. After your program is downloaded, you can change the baud rate of your Terminal back to 9600, and reset or power cycle your HC11 to restore 9600 baud communications. (Make sure BUFFALO confirms that your program has been downloaded before you reset your HC11.)

After the code is in the EEPROM, you can run it in one of two ways -- 1) From BUFFALO, set the program counter to 0xB600 and `g` (or `g B600`); or 2) Move jumper J2 from MONITOR to EEPROM, and reset or power-cycle the EVBU. (Note that if you run your program using method 2, you cannot easily re-enter BUFFALO to check the results of your program. We will use method 2 in later labs where we won't need to re-enter BUFFALO after running a program.)

  1. Load your last program (which finds the greatest unsigned number) into EEPROM. Run it by giving the G B600 command from BUFFALO. Verify that the performance is the same as when you ran it from RAM.

  2. Turn off power to your EVBU. Turn power back on, and rerun your program by giving the g B600 command from BUFFALO. Verify that your program stayed in EEPROM.



Bill Rison, <rison@ee.nmt.edu >
Thr Jan 30 1997

© 1997, New Mexico Tech