Transcript assembler
Computer Science 101
Assembly Language
Problems with Machine Language
Uses binary - No English-like words to make it
more readable
Only numeric memory addresses - Can not name
an instruction or data location
Difficult to change - If we leave out one
instruction, all addresses from that point on will
be incorrect.
Difficult to create data - Must use internal binary
representation
Assembly Language to the
Rescue!
Symbolic operation codes: Load, Store,
Symbolic names (user defined) for memory
addresses
Jump, Compare, etc.
Load Pay
Pseudo-operations provide services such as
data generation.
Assembler
An assembler is a program that takes a
source code program written in
assembly language and converts it to a
machine language object file.
Essentially a line by line translation.
Assembly lang
Source file
Assembler
Machine lang
Object file
Labels: Giving names to locations.
We can attach a symbolic name to any
instruction or data location by beginning the line
with a label with that name.
A label consists of the name followed by a colon.
You use labels in all of the places that addresses
would occur in machine language; i.e. you no
longer use numeric addresses.
– Address fields in instructions
Operands of computations
Targets of branch instructions
Pseudo-operations
Pseudo-operations are not statements that
are converted to machine code. They are
used to request services of the assembler.
Performed only when program assembled.
Hypothetical Machine Pseudo-Ops:
All of the pseudo-ops begin with a period.
.begin
-- required to mark beginning
.end
-- required to mark end
.data 30
-- puts a value at the memory
location; value in decimal
assembler converts to binary
Example: Add X to Y and Store in Z
Z=X+Y
.begin
load X
add Y
store Z
halt
X: .data 33
Y: .data 40
Z: .data 0
.end
Developing Assembly Programs
First write your algorithm in pseudocode.
Then convert to assembly.
Convert computations using labeled memory
locations and the register for variables document these.
We’ll look at techniques for converting
common control flow constructs to assembly
language.
Converting Set (Assignment)
Statements
Set <variable> to <expression>
Semantics:
Compute value of the expression
Give this value to the variable
Assembly language:
Accumulate value of expression in R
Store the value in the variable’s location
Example
Set X to 2Y + Z – 5
load Y
add Y
add Z
subtract FIVE
store X
…
X:
.data 0
Y:
.data 20
Z:
.data 30
FIVE: .data 5
…
Converting If-statements
If XY then
Statements A
Statements B
Cond
T
load X
compare Y
jumpgt BSpot
…
Translation of A
...
A Code
F
B Code
BSpot: …
Translation of B
If-statement example
.begin
User inputs number.
If number is greater
than 5 we output
the number.
Pseudocode:
Get N
If N>5 then
Print N
Stop
DONE:
N:
FIVE:
.end
in N
load N
compare FIVE
jumpgt DONE
jumpeq DONE
out N
halt
.data 0
.data 5
Converting If-else-statements
If XY then
Statements A
else
Statements B
Statements C
load X
compare Y
jumpgt Else
…
Translation of A
F
BCode
Cond T
A Code
...
jump CSpot
Else: …
Translation of B
…
…
C Code
CSpot: Translation of C
Converting While-statements
While XY Do
Statements A
Statements B
Cond
T
WHILE:
load X
compare Y
jumpgt BSpot
…
Translation of A
...
jump WHILE
F
A Code
BSpot: …
Translation of B
B Code
…
While-statement example
Program outputs sum of 10
numbers entered by the
user.
Pseudocode:
Set Ct to 10
Set Sum to 0
While Ct>0
Get Num
Set Sum to Sum+Num
Set Ct to Ct-1
Print Sum
Stop
.begin
WHILE:
PRNT:
load TEN
store CT
clear SUM
load CT
compare ZERO
jumpeq PRNT
in NUM
load NUM
add SUM
store SUM
decrement CT
jump WHILE
out SUM
halt
While-statement example
(cont.)
.begin
WHILE:
PRNT:
load TEN
store CT
clear Sum
load CT
compare ZERO
jumpeq PRNT
in NUM
load NUM
add SUM
store SUM
decrement CT
jump WHILE
out SUM
halt
TEN:
CT:
SUM:
NUM:
ZERO:
.end
.data 10
.data 0
.data 0
.data 0
.data 0