MacInsiders Logo

Similar Threads
Review Review Starter Category Comments Last Post
SFWR ENG 3GA3/CS 2CA3 - Computer Architecture and Graphics Processors Ownaginatios 3rd Year Course Reviews 5 01-03-2012 07:43 PM
Mac Computer Science from College Computer Technology steve2345 Academics 3 10-17-2010 07:20 PM
They Took the ITG machine! Selks General Discussion 3 01-16-2008 08:43 AM

SFWR ENG 3F03 - Machine-level Computer Programming

 
SFWR ENG 3F03 - Machine-level Computer Programming
It doesn't get much lower-level than this...
Published by Ownaginatios
01-14-2012
Published by
Ownaginatios's Avatar
Trolling ain't easy
Join Date: Jul 2008
Posts: 3,190

Author review
Overall Rating
80%80%80%
8
Professor Rating
60%60%60%
6
Interest
80%80%80%
8
Easiness
80%80%80%
8
Average 75%
SFWR ENG 3F03 - Machine-level Computer Programming

Software Engineering 3F03 is a course shared by both third year software engineering students and third year mechatronics students. The class is relatively large coming in at about 100 or so people.

If you are a software engineering student who took SFWR ENG 3GA3 with Dr. Karakostas, then you can consider SFWR ENG 3F03 to be a hands-on or practical version of that course. While 3GA3 was concerned with the actual design of a computer processor (using generalized MIPS processors as the in-course example), 3F03 is concerned with writing assembly level programs using the x86 instruction set. The x86 instruction set is what actual desktop and laptop Intel and AMD machines use (MIPS is mostly for teaching and specific embedded applications) and is vastly more complex than the MIPS instruction set. Fortunately though, there is no concern for the actually design of the processor in this course and all that matters is the general principles learned in 3GA3, which apply to any processor.

Now if you're in mechatronics - don't be too scared. Although software engineers covered details a lot more precisely than mechatronics engineers, people in mechatronics got a decent enough look at the whole thing in MECH TRON 3TA4. People in software engineering and embedded systems took both courses, so I like to think they're the most prepared for this course .

The course begins by teaching the basics of number representation in a computer. Of course, the computer stores everything in binary, but those binary numbers can be 'simplified' for human reading by changing from base 2 to base 8 (octal) and base 16 (hexidecimal). Basic base conversion (base 16 to base 2 . etc) should already be known by anyone taking this course. So if you're in the course and you don't know this - learn it now!

Following that, there is a brief introduction to the history of the x86 architecture. You learn the difference between protected vs. unprotected mode vs. real mode and the registers available in all 32-bit x86 processors. This is rather complicated information explained briefly, so don't worry if you don't understand. The only thing really important is knowing the registers for future use.

After that, you begin with the actual x86 assembly language in the NASM style. There are several 'dialects' of x86 assembly, AT&T's being most popular in the real world - but NASM is the easiest for teaching. There is a TON of information to be learned here, so I'm going to briefly cover everything. You start with basic instructions of the form "instruction register1, register2". This means 'perform instruction 1 on register1 and register2, and then store the results in register 1.

For example,

add ebx, ecx

This means, "ebx = ebx + ecx".

Gradually you move on to not only working with registers, but also working with RAM. Registers are just an extremely high-speed scratch space where the CPU gets work done, but the RAM is where the results typically end up in larger programs. Typically one stores the results of adding two registers, a register and a constant, or a register and a memory location into a register - and then moves it to memory.

After that, you learn about branching statements (what looks to you like IF statements and loop statements). Interestingly enough, you want to avoid branching statements because they create a lot of extra work for the CPU. I'm not going to go into detail about it here, but the CPU can end up wasting a lot of time processing things that don't matter when excessive branching statements are used.

Finally after learning basic assembly, you move on to subprograms. These are programs written in assembly intended to be called by C programs. You learn the C calling conventions (storing values on the stack. etc) and how to even call C programs from within assembly.

Finally it ends with arrays and floating point operations using the floating point registers. It also goes into optimization using loop-unrolling and fortran structures a little bit.

When I took this course, it was taught by Dr. Nedialkov. To be honest, I didn't listen to him at all throughout the entire course. I spent most of his classes just playing angry birds on my phone, so I can't really tell you whether or not he's a good professor. What I did was just learn from the book, which can be found for free here. Ned's lessons come entirely from this book and he basically follows it word for word.

He deviated from the book at the end of the course and started teaching C++. It wasn't on the exam, so I didn't really listen. It seemed to be just basic object oriented stuff in C++. Nothing fancy.

The course breakdown when I took it was like this:

2 x midterms (15% each)
4 x assignments (6%, 6%, 8%, 10%)
1 x final exam (40%)

I found the course overall pretty easy. If you actually read the book and are good with programming, it shouldn't be too much trouble. I wouldn't recommend leaving the assignments to the very end, because strange little bugs can take hours to fix. If you honestly do the assignments, the midterms should be relatively straight-forward as well. The only thing about them is that you're a little time constrained; so don't waste a lot of time. For all midterms and the exam, you're allowed a printout of the x86 instruction set on the last few pages of the PDF text book.

The exam was very easy - almost a joke. It involved a lot of simple questions like "What is 0x0043 AND 0x1110?" and a couple straight forward assembly programs similar to past assignments or examples. Almost everyone was done in about an hour. I would recommend looking over any past midterms/exams you can get your hands on for practice. They're quite helpful in ensuring you can write out assembly code at high speed.

At the end of this course you might think to yourself, "But we have compilers that do a better job than people, why do I need to learn assembly?". Assembly isn't to be learned for practical reasons really as it's highly unlikely that you will ever be required to write raw assembly in the real world. The reason it's good to learn assembly is to understand how a computer works and how to make your programs more efficient for the processor at the higher level. It teaches you that things that may be simple in a higher level language like C are actually more complicated when finally executed.

I got a 12 in the end, and a lot of other people got high marks as well. Just read the book and understand it, and you should be fine.

kanishka says thanks to Ownaginatios for this post.

kanishka, Rstevenson like this.
Deleted Post
Edit/Delete Message
Click here to add your own review for SFWR ENG 3F03 - Machine-level Computer Programming!

Old 01-14-2012 at 09:33 PM   #2
kanishka
winning
Posts: 762

Thanked: 37 Times
Liked: 39 Times
Great review. Thanks!
  Reply With Quote
Old 03-14-2014 at 01:54 AM   #3
MrPlinkett
Account Locked
Posts: 524

Thanked: 20 Times
Liked: 199 Times
Class of 2013
Another turd class from our friend Ned.

Again same old crap.

- he doesn't really teach, if what he does at lectures is teaching (explaining) then he totally sucks at i
it. he just gets very, very simple things explained, then brings a very hard example, asks the class, "do you get it?", hears complete and utter silence, and just keeps going.

- relies on books, rather than examples. granted the book is helpful, but seeing how many of us had no previous experience with low level languages before, largely theoretical examples given in the book are not very helpful

- he doesn't know what students learned before, like mentioned above, he uses examples (so much needed in software) from the book, rather than making them himself in order to make the material more accessible to not very experienced students.

- when i asked him to provide better material, he said we must learn it on our own. Now im all for self-studying, but at least when basics are provided and when questions are clearly answered. He does none of those things, so basically you are paying a full price of a course for reading the book.

I recently noticed that the professors that were teaching this course are still working at McMaster but teach other courses. Their ratings are much higher no matter where you look. Thus I really want someone else to teach this course.

Avoid Ned like plague.

PS. Compared to the course rating from 2012 provided by Ownaginatios, tests and midterms are fucking murderers. First midterm had average of below 40%. Assuming Ned didn't change much, seeing how he didn't really change anything else, it really shows that something changed in the curriculum of Software Engineering program, making students not prepared for the class.
  Reply With Quote



Review Tools Search this Review
Search this Review:

Advanced Search

Posting Rules
You may not post new reviews
You may not post comments
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



McMaster University News and Information, Student-run Community, with topics ranging from Student Life, Advice, News, Events, and General Help.
Notice: The views and opinions expressed in this page are strictly those of the student(s) who authored the content. The contents of this page have not been reviewed or approved by McMaster University or the MSU (McMaster Students Union). Being a student-run community, all articles and discussion posts on MacInsiders are unofficial and it is therefore always recommended that you visit the official McMaster website for the most accurate up-to-date information.

Copyright © MacInsiders.com All Rights Reserved. No content can be re-used or re-published without permission. MacInsiders is a service of Fullerton Media Inc. | Created by Chad
Originally Powered by vBulletin®, Copyright © 2019 MH Sub I, LLC dba vBulletin. All rights reserved. | Privacy | Terms