machine & assembly language. machine language computer languages cannot be read directly by the...

27
Machine & Assembly Language

Upload: brianna-ballam

Post on 14-Dec-2015

224 views

Category:

Documents


2 download

TRANSCRIPT

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

CPU

ControlUnit

ALU

Registers

Memory

Slightly More Complete Picture

CPU

ControlUnit

ALU

Registers

Memory

SecondaryStorage

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

Sample Program

LOAD R2 5ADD R2 R2 R2 LOAD R1 3ADD R3 R1 R2HALT

What does this program do?

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 Solution

STORE 1 R1

MOVE R1 R2

LOAD R2 1

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

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!

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.

Program Translation

z = 0

x = 3while x != 0:

z += yx = x -1

y = z

ADD R3 R2 R3

SUB R0 R0 R1

BZERO 4

BRANCH 0

MOVE R2 R3

HALT

1010000100000110

1010001000000110

0000001000000100

0000000100000000

1001000100001011

1111111111111111

Compiler Assembler