CS255 Syllabus & Progress

CS255 Syllabus & Progress


Material covered are displayed in blue.



    Intro to CS255:

    Logistics:



    Part 1: Fundamental knowledge of the Computer
  1. Intro to the Computer

  2. The computer memory (RAM):

  3. Storing information using Binary numbers (codes + context = information):  



    The different types of codes used in a computer system to represent various kinds of information

  4. Storing Boolean data inside a computer



  5. Representing and storing unsigned integer (= whole) numbers inside a computer
    Homework 1: computer architecture click here



  6. Representing and storing signed integer (whole) numbers inside a computer


  7. Representing and storing fractional numerical values inside a computer:


    Homework 2 re-enforces number system concepts: click here




  8. Representing and storing text data inside the computer

  9. Input and output operations in a computer program


    Homework 3 re-enforces string ⟷ int conversion: click here




  10. Representing computer instructions inside the computer (intro to hardware):





    Part 2: C programming

  11. Introduction to C for Java programmers

  12. The C Pre-processor:



    I will first discuss language features that are similar in C and Java to get you programming in C quickly.

  13. First: some things in C that you must be always remember (very different from Java):

  14. C's data types and variables:

  15. High level operators (quick review - they are same as Java):



  16. Statements (quick review - they are same as Java):
    Homework 4 introduces you the features in C that are similar to Java by writing 2 C functions click here



  17. Arrays: (C has static arrays, Java has dynamic arrays)



  18. Functions (= methods):



  19. Debugging techniques for C programs: (debugging will not be covered in tests)



  20. Multi-files C programs - the importance of declaring functions:


  21. The make (UNIX) utility: (Make will not be covered in tests)

  22. Low level operators:
    Homework 5 reinforces bit operations and using a bit array click here


    Language features that are both available in C and Java but differ slightly

  23. User-defined types in C (i.e.: structures)

  24. The life time and scope of the different kinds of variables in C:



    Advanced C language features that are not found in Java (pointer data type !)

  25. The reference data type and reference (pointer) variables

  26. Pointer to a user-defined type:

  27. Using pointers to create and maintain linked lists in C:

  28. Pointer arithmetic and accessing array elements



  29. Strings in C:
    Homework 7 shows you how write a "class" in C -- it's all about organization using header files and C program files click here


    C documentations:




    Part 3: Assembler Programming (complete understanding of how a computer works)
  30. Prelude to assembler programming: internal details of the CPU

  31. Intro to assembler programming using the ARM processor




  32. The text and data assembler program sections/segments





  33. Assembler programming with integer constants and simple integer variables





  34. The array data structure (teach with demo/asm/3-array/demo.s)





  35. The linked list data structure (teach with demo/asm/4-linked-list/demo1.s and demo2.s)


    Homework 9 re-enforces access technique to structured variables (arrays and linked lists): click here





    Now you know what the computer actually does when it executes an assignment statement: how it evaluates an expression and assigns the result to a variable in a high level programming language. We will discuss various program flow control structures next.





  36. The Selection (if, if-else) Statements:





  37. The Loop Statements:


    Homework 10 re-enforces the use of compare and branching in writing your first assembler program containing a while loop and if-statements: click here


    Now you know what the computer actually does when it runs a program. The only thing that you still do not know is what happens in a function call (there is still a lot to learn...).





  38. Subroutines (a.k.a. methods, procedures, functions)





  39. Leaf functions with parameters and local variables in CPU registers

    **** The final will cover upto this point ****


    Project 7 (Bubblesort) re-enforces the use of registers for passing parameters and storing local variables: click here ****** NOT ASSIGNED

  40. Non-Leaf functions with parameters and local variables in the runtime stack



  41. Recursive subroutines/methods: (are always non-leaf functions !)



    Programming project pj9 is another recursion project --- inserting a new list element in an ordered linked list: click here



  42. Parameter passing techniques:


    If you understand everything so far, you now know exactly what is going on when a computer executes a program. You can apply what you learn and write assembler programs in any assembler language, e.g., Intel. To program with a new chip, all you need to learn are:

    I have Intel assembler programming material after the C lecture notes to demonstrate this process. (These notes are not part of the CS255 curriculum - it's "for your eyes only")



    That's all, Folks !





  43. Additional Enrichment Material: Intel 80x86 programming (not covered in CS255)


    Rough notes on Intel Assemler programming:

    Other resources:

    • Matloff GNU assembler programming tutorial: click here
    • Sourceforge GNU assembler programming tutorial: click here

    • Free Intel Macro Assembler (if you want to write assembler on your PC): RIGHT click here and SAVE AS
    • Intel Assembler Programming book - this book is like the CS255 course using Intel Assembler code: click here
    • Step by step Windows programming tutorial shows you how to write window programs, menus, call backs, etc: click here
    • The Art of Assembly Programming (a very good online book, but the 32 bit version uses a non-standard assembler called "HLA" - High Level Assemble language) click here