Jeff Meunier, jeffm@engr.uconn.edu
University of Connecticut, Spring 2000
Questions and answers about the course.
This course will tach you how to program a computer at the lowest level, speaking to it in its native language, and also how to listen to it when it talks back. You will develop an emulator (a virtual machine, or VM) for a MIPS microprocessor (this is a RISC processor for those of you who know what that means) using the high level language ML (which is functional, if you know what that means), and then program the emulator in assembly language. You will learn all sorts of neat things along the way.
This course has been completely re-designed for this semester, and this is the first time I have taught this course (but I have been a TA for the old CSE240). If you've had CSE240 before, and I hope not too many of you have, it may seem as though you are taking a different course, which isn't too far from the truth. I'm not saying it will be easy, but the time you spend on it will be different, more productive. Assembly language programming can be very frustrating, mostly because program bugs can be extremely difficult to find. In previous semesters, some students would spend days or even weeks trying to find bugs in their programs. This is mostly what made the course difficult. This will not happen in this course. You will spend less time debugging, and more time writing programs.
No. I'd like to keep the writing to a minumum. This is a programming class, after all!
That's not entirely true. Many of you will have successful and enjoyable careers never writing a single line of assembly language. But a few of you will join firms developing ebedded systems, or you may even work at Intel, Motorola, MIPS, or IBM, where a lot of low level design and programming takes place. When a brand new microprocessor or computer system is developed, often all you start out with is an assembler--and maybe not even that. Working with something new is very exciting, and knowing assembly language qualifies you for this kind of work.
Using a VM will make your life significantly easier for the following reasons: (1) if your program crashes on the VM, you don't have to reboot the machine, (2) you can run a VM on any kind of computer, including your Windows or Linux PC at home, (2a) which means you won't be fighting over computers, or waiting for someone to unlock the lab, and (3) you will learn a whole lot more this way, which means you'll be more competitive in the job market.
The MIPS processor is a far cleaner design. It has its own little quirks, but it will take you far less time to learn it than the 80x86. We can then spend the rest of the time writing fun programs.
The way the industry is going, almost all of the assembly programmers are coding for embedded systems. The MIPS microprocessor rules the world in this doimain. If you're on an 80x86 machine, you're probably going to write C++, Java, or Visual Basic under Windows. Writing assembly language under Windows is just not an effective use of time.
You will spend far less time debugging ML programs than you would C/C++/Java programs. Presumably, you're a CS major because you like to write programs and want to do it for a living someday. Programming does not need to be a matter of spending all your time chasing bugs. That's typically what happens in C or C++, and sometimes even Java. That's enough to make anyone change their major. ML is so powerful that you can have a working VM in far less code than you would in C/C++/Java. And smaller programs are easier to write, and easier to debug.
No. ML is a programming language, and not related to either XML, SGML, or HTML, which are all document markup languages. UML is also something completely different.
No. Only projects.