CSC 3300
Programming Languages
An elective course in the FSU CS or CIS BS programs
Fall 2016 -- 3 credit hours

Meeting 9:30PM-10:45PMSep 6-Dec 6 in Edgerly 207
Final 5PM Tuesday Dec 13 online in Blackboard

Contact Information

Instructor:Stephen Taylor
Office: Edgerly 312A
Office hours: Wed and Thurs 11AM, ...
Web page:
Office phone: 978-665-3704
Home phone: 508-867-9288

Catalog description

Assembly language provides the means for programming a computer at the most basic machine level. In this course, we explore the fundamental operations of a modern computer system using software tools. Topics examined include numerical and character representations, microprocessor register usage, machine instructions, addressing modes, input/output processing, parameter passing, interrupt processing and simple data structure realizations on the Intel 80x86 processor.

Course goals

Learn some of the architectural support for higher-level languages; Learn some of the low-level debugging tools which are required for machine language, but still useful for higher-level languages. Learn several different machine architectures. Learn some of the background for writing compilers and interpreters.

Course Objectives

After finishing this course, students will be able to:

Attendance policy

Ten percent of the grade is based on class-room participation. During the first several meetings of the course, I call the roll. Once I learn names and faces I stop calling the roll, but I continue to be interested in your presence.

So do other students. Don't deprive them of your insights!

Course resources
The product overview webpage for one of Microchips $1 microcontrollers. Has links to some datasheet, some comparable devices, etc. The 12F683 has 3.5KW of instruction flash, 256 bytes of EPROM, and 128 bytes of RAM. It has dozens of built-in peripherals, including an analog-to-digital converter, several timers. One of the several packages in which this chip is available is a DIP chip which fits in our familiar prototyping boards.
The datasheet for the Microchip PIC12F638. Describes the machine language and assembly language used on the chip, and its various peripherals.
This page is the product overview page for the PIC32MX110F016B.

This is among the smallest and cheapest of Microchip's 32-bit micro-controllers. It is an implementation of an industry-standard architecture called the MIPS instruction set architecture. This chip is available in a DIP package suitable for prototyping boards." This data sheet describes the peripheral devices for all the different devices in the same family as the PIC32MX110F016B. (Some of the devices described in the datasheet are not present on this chip.)
mips architecture
Programmers reference manual and mips instruction set; a description of the instruction set used in the Microchip 32-bit series of chips.
An article about enabling use of MASM, the MicroSoft assembler for the PC, in Visual Studio. (Note that I'm pushing NASM, next link, as a preferable option.)
The site for NASM, a free assembler for 16, 32, and 64-bit PCs. We'll use all of these (briefly) in the course.
The Intel architecture manual, which describes 16, 32, and 64-bit environments in gory detail.
The Intel instruction set reference manual, covering 16-bit, 32-bit, and 64-bit instructions.
A semi-friendly extraction of the Intel instruction set into a much quicker reference.
Intel Systems programming reference for 16, 32, 64-bit architectures.
Paul Clark's PC assembler resources and textbook for 32-bit x86 processors (80386-Pentium.)

From time to time I will put programs from lectures on the web.


I am going to assign programming homework almost every lecture. Unless you are a very unusual person, you will find it impossible to catch up if you fall behind.

We'll be talking about five different machine architectures over the course of the term. Any one of them might have filled a whole course, back in the days when you might have been likely to become a professional assembly language programmer (as I was back in the sixties and seventies.)

Each of these interesting machines strongly stresses some ideas which are not as central in the others, and you'll need to absorb a lot of new concepts. The best way to do so is to write programs.

Final Exam

There is a final exam, and two or three mid-term exams, all of which are in very similar formats. Because the time available for an exam is short, I usually test code reading skills, rather than writing skills, on exams.

Topics and course schedule

Tentative lecture schedule
Fall 2016

datetopicassigned reading before lecture
Tues Sep 6 Syllabus. Sidetrack to the PIC 12F583
Thur Sep 8 PIC 12F683 : "Your name in lights"
Tues Sep 13 Computer architecture: Instruction formats. Memory and Code addresses. The Register file. Bytes and numbers.
Thur Sep 15 Simple arithmetic. Bit operations. Loops. Double precision numbers.
Tues Sep 20 Functions and subroutines. The CALL instruction.
Thur Sep 22 Interrupts. Timer Device on PIC: Tone from Timer
Tues Sep 27 Dit Dah, Dit Dah. Our first embedded system for the PIC 12F683
Thur Sep 29 Hour exam on PIC 12F683.
Tues Oct 4 On to MIPS architecture. Words and bytes. Registers and memory.
Thur Oct 6 Your name in lights.
Tues Oct 11 No class. [Friday schedule]
Thur Oct 13 Quick review of 32-bit arithmetic, loops, subroutines
Tues Oct 18 Analog Keyboard: timer interupts, analog inputs,
Thur Oct 20 indexing and arrays. fixed and floating point.
Tues Oct 25 Tone detector. software filters. Complex arithmetic...
Thur Oct 27 Hour exam on MIPS and PIC12F683
Tues Nov 1 Introducing the 8086: 16-bit code for the PC. Registers, Memory, segments. Real mode and protected mode. Operating systems. 8086 instructions.
Thur Nov 3 Systems 'interrupts' -- talking to the PC hardware.
Tues Nov 8 byte, word, double-word, quad-word data. CALL instruction
Thur Nov 10 A silly adding machine: Console interactions and number conversions
Tues Nov 15 .com and .exe file formats for Windows. linking libraries and Object files
Thur Nov 17 A line-oriented text editor: Strings. Disk operations.
Tues Nov 22 Hour exam contrasting PC environment, MIPS, PIC12F683
Thur Nov 24 No class -- T-day
Tues Nov 29 32-bit programs. 32-bit registers. The "unsegmented 32-bit API" vs "segmented memory model"
Thur Dec 1 64-bit programs. 64-bit registers. Backward compatibility.
Tues Dec 6 SIMD instructions.
Tues Dec 12 5PM Final Exam administered through Blackboard

Grading policy

Class Participation: 10%
In-class labs and quizzes: 20%
All exams: 30%
Programming Projects: 40%

Late work

Deadlines are made to be bent, but exceptions create extra work for me. Assignments are due at the beginning of class. Work received after 9:35 AM is late, unless Blackboard is down. I may give credit or partial credit for late work, but you should talk to me as soon as you know it will be late. I will always give at least partial credit for partial work, so turning in something incomplete but on time is a sensible strategy. I almost always allow you to submit a homework as many times as you want, grading only the last submission. I would *always* do this, but Blackboard sometimes fights back.

I do not consider homework which is emailed to me to be turned in on time, no matter when you sent it. Unless the stupid thing is down, use the Blackboard dropbox.

There are no makeup or early exams, but I may excuse an exam for a good story, presented in advance, like your grandmother getting married that day in Provincetown.

Peculiar procedures

There are non-programming activities which are included in each project. Sometimes I will ask you to interpret your results, or provide charts or graphs.

For every assignment, I expect you to turn in a Development diary. The development diary will be at least half a page long, and I actually like longer ones better. It will be neatly word-processed and beautifully formated. It will tell me about your successes and frustrations in coding up the program, which blind allies you went up, how you figured out where you went wrong, etc. If you never make any mistakes at all, you can tell me how how avoid them, because I'd sure like to know! Part of your grade for the project will be based on this development diary.

Each student is responsible for completing all course requirements and for keeping up with all activities of the course (whether a student is present or not).

Academic Honesty

I expect you to be so interested in your projects and homeworks that you discuss them with everyone, including your mom, your little brother, and other members of the class (who will at least know what they're being sympathetic about.) So I won't be too surprised if several people come up with the same idea, or even the same programming trick. But I want you to do each homework yourself, and I don't want you to share typing, even if you both worked on the problem together, and you can't really tell anymore who came up with what. (Except of course for group projects, for which the group will be designated in advance.) To keep from confusing me, you should mention everyone you talked to and every web site you looked at in your development diary. You can skip mentioning your little brother, if you think he wasn't any help at all...

I consider it plagiarism to share typing or fail to give credit to other peoples' ideas.

Fitchburg State University has an Academic Dishonesty policy, which can be found in the college catalog. Penalties for academic dishonesty, including submitting work which is not your own, and assisting other students on examinations, can be severe.


If you require course adaptations or accommodation because of a disability or acute medical condition or if you require assistance in the event of an emergency evacuation of the classroom, please see the instructor as soon as possible. Students with disabilities are encouraged to register with the Office of Disability Services on the 3rd floor of the Hammond Building.