Difference between revisions of "CSC231 Class Page 2015"
(→ ) |
(→ ) |
||
Line 361: | Line 361: | ||
:* [[Speed of Instructions: Nasm, Java, C++ and Python comparison| Comparing execution speed of Java vs C++, vs Nasm, vs Python]]. | :* [[Speed of Instructions: Nasm, Java, C++ and Python comparison| Comparing execution speed of Java vs C++, vs Nasm, vs Python]]. | ||
:* '''Addressing modes''': the response of processor designers to the complexity of high-level languages. | :* '''Addressing modes''': the response of processor designers to the complexity of high-level languages. | ||
+ | :: [[Media:CSC231AddressingModes.pdf| Slides on addressing modes]] | ||
::*inherent | ::*inherent | ||
::*register | ::*register |
Revision as of 06:53, 21 October 2015
--D. Thiebaut (talk) 11:28, 26 August 2015 (EDT)
Week 1 Sept 7 |
Topics: Introduction, Python, Idle, Piazza, Moodle submission Lab/Hw Reading - Wednesday
- Syllabus
- Class accounts
- The main players for this semester:
- PC
- Processor
- Memory
- Disk
- First program in assembly: recognize the different elements:
- Structure
- Presentation
- Documentation
- Skeleton program
- Hello World! on Linux (and its Mac version)
- Reading
- Chapter 1 in the Art of Assembly.
- Also Chapter 3, Sections 0 to 3.1.2.
- Sections 1.3.1, 1.3.2, 1.3.3, 1.3.4, and 1.3.5 in Carter's PC Assembly Language. Note, Carter uses 1A92h to represent a hexadecimal number. I prefer 0x1A92.
- Wednesday
Week 2 Sept. 14 |
Topics: Processor and Memory, working with the shell, and emacs. Lab/Hw Reading - Monday:
- Review PC destruction lab. Main players: Processor, cores, RAM, motherboard, crystal
- How would Richard Tuttle see a computer motherboard? This is some of his artwork.
- First diagram of a computer as seen by an assembly language programmer
- Review Hello World program with this new knowledge
Notice how the main character uses all kinds of software packages to solve his problem. It includes working in a shell, using shell commands, and mixing the results with various programming techniques.
- Wednesday
- Linux System Calls. See Slide 5 of this presentation
- Working in a shell
- The bash shell
- Playing with the shell using 231a-xx accounts
- Useful commands
- ls, cd, pwd, mkdir, rm, rmdir, cp
- history, !, !!, alias, w, ps, who am i
- grep, wc, head, tail
- Redirection
- Pipes
- Emacs
- quick overview (see this page)
- set of commands
- Lab
- Homework
Week 3 Sept. 21 |
Topics: Number Systems, the MOV instruction Lab/Hw Reading - Monday:
- Let's talk about the crystal
- Relationship with instructions
- Power-law for increase in processor speed
- Ray Kurzweil on Power Laws (go to marker 3:30 min in video)
- Playing a game of numbers
- Hexadecimal system:
for i in range( 256 ): print( i, format( i, '02X' ) )
- Assembly:
- Review nasm, ld
- Understanding how data fits in memory: printing strings defined by db
- Size of a program: data + code
size helloWorld2 text data bss dec hex filename 34 14 0 48 30 helloWorld2
- Listing of the assembly and its code:
nasm -f elf -l helloWorld2.lst helloWorld2.asm ls ... helloWorld2.lst ...
- Wednesday
- Quick check of number conversion skills
- Observe output of nasm -l (helloWorld2.lst)
- Another way to look at the executable file with hexdump
hexdump -v -C helloWorld2 00000000 7f 45 4c 46 01 01 01 00 ... ... 000002b0 74 61 00 5f 65 6e 64 00 |ta._end.| 000002b8
- Observe the output of hexdump command
- Finish the reading assigned for Week 1.
- The mov instruction
Week 4 Sept. 28 |
Topics: The Mov instruction. Arithmetic instructions. Addressing Modes. Lab/Hw Reading - Monday:
- Wednesday
- A script to automatically assemble and link assembly programs
- Review: MOV instruction: direct and immediate modes of addressing data
- Examples: copying a string to another string
- Exercises with the MOV instruction
- The ADD instruction
- Overly-simplified encryption of a string
- Chapter 3, Section 1 in The Art of Assembly, to Section 3.2.2.
Week 5 Oct 5 |
Topics: Lab/Hw Reading - Monday:
- Arithmetic instructions: ADD, SUB, INC, DEC. Skip MUL and DIV for right now.
- A quick introduction to calling functions: CALL and RET
- Printing decimal numbers in assembly
- A first look at what is behind code like this:
int a; int b; int c; a = 3; b = 5; c = a + b;
- Example of what the GNU cc compiler would have generated
- Exercise 1: "Compile" the following statements to assembly:
int a; int b; int c; int d; a = 3; b = 5; c = a*2 + b; d = (a + b + 10 + 2*c ) * 2 - 20;
- Exercise 2: translate the following code in assembly. If you need to refresh your memory on Java types, check this document out:
int a = 3, b = 5, c; short d = 10, e = 0xff, f = 0; c = ( a * 2 + b ) * 3; f = d + (e-1); c = a * 2* d;
- Wednesday
- Mountain Day?
- Big Endian vs. Little Endian hardware. Why does it matter?
- page with some little-endian and big-endian architectures.
- Section 4.1 of Paul Carter's ebook presents indirect addressing. Read this first. Read also Section 5.1.3 about more sophisticated indirect addressing modes.
- The CALL and RET instructions
Week 6 Oct. 12 |
Topics: call/ret, looping, mul/div Lab/Hw Reading - Monday: Fall Break
- Wednesday
- Back to call and ret instructions: defining and using functions.
- Exercise 1: Create a function that adds two int variables together
- Exercise 2: Add a function that prints the two variables and their sum
- mul and div: multi-register instructions. EDX:EAX used as default registers.
- Exercise 3: Write a Teller-Machine program
- LOOP: Read Section 2.2.3 (Page 41) in Paul Carter's book.
- MUL: Read Section 2.1.3 (Page 33) in Paul Carter's book. Do not worry about the mention of 2's complement. Just concentrate on the registers that are used.
- CALL/RET: Section 4.4 (Page 65) in Paul Carter's book.
Week 7 Oct 19 |
Topics: Lab/Hw Reading - Monday:
- Back to mul and div: Java and Python multiply ints differently
- Exercise 1: Write a Teller-Machine program
- The loop instruction: ECX is the counter
- Exercise 2: Compute the sum of all ints between 1 and n. (There are many possible answers)
- Exercise 4: What is the largest amount of looping we can do with the loop instructions?
- Exercise 5: How long does it take a loop to accumulate the sum of all the ints between 1 and 1,000,000? Any particular issues one should be worried about?
- Program 3: Teller machine program.
- Program 4: Teller machine with function.
- Wednesday
- Comparing execution speed of Java vs C++, vs Nasm, vs Python.
- Addressing modes: the response of processor designers to the complexity of high-level languages.
- Slides on addressing modes
- inherent
- register
- immediate
- direct
- indirect/based/indexed
- indirect with displacement
- base-indexed
- base-indexed with displacement
- Exercises on Loops
- Exercises on Loops and Addressing Modes (Problems 2 to 6)
- Lab
- Homework
Week 8 Oct. 26 |
Topics: Lab/Hw Reading - Monday: Midterm Exam: in class, on paper, closed everything.
- Wednesday
- Lab
- Homework
Week 9 Nov. 2 |
Topics: Lab/Hw Reading - Monday:
- Wednesday
- Lab
- Homework
Week 10 Nov 9 |
Topics: Lab/Hw Reading - Monday:
- Wednesday
- Lab
- Homework
Week 11 Nov 16 |
Topics: Lab/Hw Reading - Monday:
- Wednesday
- Lab
- Homework
Week 12 Nov 23 |
Topics: Lab/Hw Reading - Monday:
- Wednesday: Thankgiving Break
- Lab
- Homework
Week 13 Nov 30 |
Topics: Lab/Hw Reading - Monday:
- Wednesday
- Lab
- Homework
Week 14 Dec 7 |
Topics: Lab/Hw Reading - Monday:
- Wednesday
- Lab
- Homework
Week 15 Dec 14 |
Topics: Lab/Hw Reading - Monday: Last Class
- Final Exam
Links and Resources
- Notes on Assembling 32-bit Code on 64-bit Machines
- Hello Word in assembly running on Mac OS and on Linux