300 likes | 608 Views
Machine & Assembly Language. Machine Language. Computer languages cannot be read directly by the computer – they are not in binary. All commands need to be translated into binary instructions called machine language. Each type of CPU has its own machine language. Von Neumann Architecture.
E N D
Machine Language • Computer languages cannot be read directly by the computer – they are not in binary. • All commands need to be translated into binary instructions called machine language. • Each type of CPU has its own machine language.
Von Neumann Architecture Memory CPU Control Unit Registers ALU
Slightly More Complete Picture Memory CPU Control Unit Registers ALU Secondary Storage
Von Neumann Architecture • Program and Data are both stored in memory. • Fetch, Decode, Execute cycle…
Machine Language • We will look at a simulated CPU provided by the author of our book… • This machine language has only 12 different instructions • Each instruction is 16 bits long. • Data values are also limited to 16 bits.
Sample Instruction Instruction ID Register # Memory Location
Sample Machine Language Program Add the contents of register 1 to the contents of register 2 and store it in register 0: 1010000100 00 01 10 1111111111111111
Sample Machine Language Program Add the contents of memory location 1 to the contents of register 2 and store it in register 0: 100000010 01 00001 1010000100 00 01 10 1111111111111111
Assembly Language • Set of mnemonic names for the instructions in a particular computer's machine language. • Works on registers and memory locations in the computer. • Translated into binary instructions.
Sample Assembly Language Add the contents of register 1 to the contents of register 2 and store it in register 0: ADD R0 R1 R2 HALT
Sample Machine Language Add the contents of memory location 1 to the contents of register 2 and store it in register 0: LOAD R1 1 ADD R0 R1 R2 HALT
Sample Program LOAD R2 5 ADD R2 R2 R2 LOAD R1 3 ADD R3 R1 R2 HALT What does this program do?
What would be the assembly instructions to swap the contents of registers 1 & 2? STORE [MEM] [REG] LOAD [REG] [MEM] MOVE [REG] [REG] ADD [REG] [REG] [REG] SUB [REG] [REG] [REG] HALT Exercise
Exercise Solution STORE 1 R1 MOVE R1 R2 LOAD R2 1 HALT
What would be the assembly instructions to do the following computation: R0 = Mem[7] + R2 - R3 STORE [MEM] [REG] LOAD [REG] [MEM] MOVE [REG] [REG] ADD [REG] [REG] [REG] SUB [REG] [REG] [REG] HALT Exercise
Exercise Solution SUB R2 R2 R3 LOAD R1 7 ADD R0 R1 R2 HALT (we want R0 = Mem[7] + R2 - R3)
Some More Instructions… • We are missing some crucial functionality… • ??
Some More Instructions… • We are missing some crucial functionality… • Loops!
In Python • The same program in Python would be the following: z = 0 x = 3 while x != 0: z += y x = x -1 y = z • Or the following: y = y*3
Compilers, Interpreters, Assemblers • Because it is not fun to program in Assembly, we have “high level” programming languages. • Python • Alice • C, C++, Java, Fortran, Cobol, Pascal, C++, M, Ada, lisp, Ruby, Smalltalk, C#, … • Compiler/Interpreter translates from the high-level language to machine language.
Program Translation z = 0 x = 3 while x != 0: z += y x = x -1 y = z 1010000100000110 1010001000000110 0000001000000100 0000000100000000 1001000100001011 1111111111111111 Compiler Assembler