As we wrap up pnc0, we start delving into the aspects related to pnc1:
compiler optimizations
implementations in different languages
runtime performance
we started looking at assembly language last week (gcc -S), we may delve a bit deeper writing our first program in assembly.
Week 1
Welcome to the Spring 2018 semester!
Our approach to Computer Organization will be as follows:
comprehension of lower level operations: take a familiar process, study how its implementation can perform in various environments. Our initial projects will focus on this.
collaboration/documentation: to ensure everyone (as best as possible) is participating time and effort, my plan is to release projects verbally, yet require the class to compose all the project pages. The readability, correctness, organization, usefulness of the resulting documents will be evaluated and count as discrete project alongside other projects.
learning/implementing assembly language(s): our ultimate tangible goal is to learn assembly language. There are two obvious candidates:
Intel/amd64 64-bit CISC assembly (on lab46) using as and nasm.
ARM/ARM64 64-bit RISC assembly (on a Raspberry Pi 3) using as and nasm. Or maybe to get added exposure, 32-bit ARM assembly on a Raspberry Pi 2.
We will probably start with Lab46. Time and ability permitting, I'd like to expand to ARM. Having a familiarity with both can prove most insightful.
interactive: I've grown tired of preparing and polishing things only to have so many ignoring my efforts, seeking out only the shortest path to jump through the latest hoop. I would like us all to do the legwork necessary to figure stuff out (also where some of the documentation efforts will come in handy).
Knowing a language coming into Computer Organization can be both helpful and limiting:
helpful: if you understand how to communicate math, logic, decisions, repetition, modularity, those are major concepts that do not need to be freshly learned AND immediately applied using a new syntax/structure.
limiting: if you only have a brute-force/syntactical memorization of things from another language, you've really not learned the concept as an isolated thing, and you'll likely be your own worst enemy as you confuse specific syntax with concept.
also limiting: those who know higher level languages and not lower level/hybrid languages like C. If you've done memory management, MANY aspects of assembly language will become apparent in short order, often with blinding bouts of enlightenment thundering into your realization. Knowing C can really aid you in understanding assembly and therefore truly realizing how the computer works.
but again: KNOWING C and its concepts, vs. merely having memorized syntax that you try to deploy in automatic/recipe fashion.
Note that there are THREE (3) things due before the end of Wednesday this first week:
coi0
wcp1
week1 journal entry (which I plan to count as bonus; at the very least earn yourself a few points by removing the filler text).