machine & assembly language. machine language computer languages cannot be read directly by the...
TRANSCRIPT
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
CPU
ControlUnit
ALU
Registers
Memory
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
LOAD contents of memory location into register
100000010 RR MMMMM
example:
R0 = Mem[3]
100000010 00 00011
Instruction ID Register # Memory Location
Machine Language
LOAD contents of memory location into register
100000010 RR MMMMM
ex: R0 = Mem[3]
100000010 00 00011
STORE contents of register into memory location
100000100 RR MMMMM
ex: Mem[4] = R0
100000100 00 00100
MOVE contents of one register into another register
100100010000 RR RR
ex: R0 = R1
100100010000 00 01
Machine Language
ADD contents of 2 registers, store result in third.
1010000100 RR RR RR
ex: R0 = R1 + R2
1010000100 00 01 10
SUBTRACT contents of 2 registers, store result into third
1010001000 RR RR RR
ex: R0 = R1 – R2
1010001000 00 01 10
Halt the program 1111111111111111
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.
Assembly Language
Load contents of memory location into register
LOAD [REG] [MEM]
ex: R0 = Mem[3]
LOAD R0 3
Store contents of register into memory location
STORE [REG] [MEM]
ex: Mem[4] = R0
STORE 4 R0
Move contents of second register into first register
MOVE [REG1] [REG2]
ie: R1 = R2
MOVE R1 R2
Assembly Language
Add contents of 2 registers, store result in third.
ADD [REG] [REG] [REG]
ex: R0 = R1 + R2
ADD R0 R1 R2
Subtract contents of 2 registers, store result into third
SUB [REG] [REG] [REG]
ex: R0 = R1 – R2
SUB R0 R1 R2
Halt the program HALT
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
Exercise
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
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
Some More Instructions…
We are missing some crucial functionality…
Loops!
Branch to a location in memory
BRANCH [MEM]
Branch if the ALU result is zero.
BZERO [MEM]
Branch if the ALU result is negative.
BNEG [MEM]
A More Complex Example
0 ADD R3 R2 R3
1 SUB R0 R0 R1
2 BZERO 4
3 BRANCH 0
4 MOVE R2 R3
5 HALT
R0 3
R1 1
R2 Number
R3 0
In Python
The same program in Python would be the following:z = 0x = 3while x != 0:
z += yx = 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.