Assembly Programming

Download Report

Transcript Assembly Programming

Assembly Language Programming
CPU
CPU

The CPU contains a Control Unit, Arithmetic Logic
Unit (ALU) and a small number of memory locations
called Registers.

Different registers perform different tasks such:
– as manipulating data,
– keeping track of the results of decision making operations,
– and pointing to the next instruction to be executed.
CPU Registers

The Instruction Register (IR) contains the
actual instruction which is currently being
executed by the CPU.

The Status Register records the result of
comparing the contents of register A with the
contents of register B.

The Program Counter (PC) contains the
address of the next instruction to be
executed by the program.
CPU Registers

Registers A & B hold the operands for each
arithmetic operation (ie. the values on which
the operation will be performed). After the
operation has been carried out, the result is
always stored in Register B.

Therefore, after an arithmetic operation has
been performed, the second operand is no
longer stored in Register B, because it has
been overwritten by the result of the
operation.
CPU Registers

The computer also has a Compare instruction that
can be used to compare the contents of register A
with those of register B.

The comparison can have three possible outcomes:
– the contents of register A < B;
– the contents of the register A = B;
– the contents of the register A > B.
CPU Registers

After a comparison has been done, the
Status Register will hold a code that stores
the results of the comparison.

The results are coded as follows:
• -1
• 0
• 1
if (A < B);
if (A = B);
if (A > B).
Assembly language.

Assembly language allows us to use convenient
abbreviations (called mnemonics) for machine
language operations and memory locations.

Each assembly language is specific to a particular
hardware architecture, and can only be used on a
machine of that architecture.

An assembly language program must be translated
into machine code before it can be executed. The
program that tells the computer how to perform the
translation is called an assembler.
Assembly language.




When a processor chip is designed, it is designed to
understand and execute a set of machine code
instructions (OpCodes) unique to that chip.
One step up from machine code is assembly code.
Each machine code instruction is given a mnemonic
(name), so that it is easier for human beings to write
code.
There is a one-to-one correspondence between the
assembly languages mnemonic instructions and the
machine language numeric instructions.
A list of assembly code instructions that will perform
a task is called an assembly program.
Assembly language.
Operation
What it means to the CPU
STP Stop the program
LDA Load register A with contents of a specified
memory location
LDB
Load register B with contents of a specified
memory location
STR
Store register B contents to a specified
memory location
INP
Store data input by user to a specified
memory location
PNT
Print the contents of a specified memory
location to the screen
Assembly language.
Operation
JLT
What it means to the CPU
Jump if less than (Status register = -1)
to a specified memory location
JGT
Jump if greater than (Status register = 1)
to a specified memory location
JEQ
Jump if equal (Status register = 0)
to a specified memory location
JMP
Unconditional jump to a specified
memory location
CMP Compare register A to register B and set Status
Register value
Assembly language.
Operation
What it means to the CPU
ADD Add (register A + register B) and
store sum in register B
SUB Subtract (register A - register B) and
store difference in register B
MUL Multiply (register A * register B) and
store product in register B
DIV
Divide for quotient (register A / register B)
and store quotient in register B
MOD Divide for remainder (register A / register B)
and store remainder in register B
Steps to write Assembly Programs

Create Pascal Program
 translate each Pascal statement to the equivalent
assembly statement(s)
 Number the assembly language program starting
from 0
 Replace Memory names by number of empty
memory cell
 Resolve jumps ( replace with number of memory
cell jumping to)
Pascal to Assembly language.
Statement
program
const
var
readln
writeln
assignment (:=)
val3 = val1 + val2
End.
Assembly equivalent
none
put value in memory cell
put address of memory cell
INP
PNT
LDA Val1
LDB Val2
ADD
STR Val3
STP
Assembly language.
Program #1.
Write an assembly language program that will get a
number as input from the user, and output its
square to the user.
Assembly language.
step 1: algorithm to describe the steps needed to solve
our problem.
Assembly language.
step 1: algorithm to describe the steps needed to solve
our problem.
1. Input a number and store it in memory.
2. Compute the square by multiplying
the number times itself.
3. Output the results.
Assembly language.
Step 2: write Pascal code
Assembly language.
Step 2: write Pascal code
Var
number , square: integer;
begin
readln ( number);
square := number * number ;
writeln (square);
end.
Assembly Language
begin
readln ( number);
INP number
square := number*number;
LDA number
LDB number
MUL
STR square
writeln (square);
end.
PNT square
STP
Assembly language.
Step 4: Number assembly code lines starting from 0
0
1
2
3
4
5
6
INP number
LDA number
LDB number
MUL
STR square
PNT square
STP
Assembly language.
Step 5: Replace memory names by cell numbers after
STP
0
1
2
3
4
5
6
INP number
LDA number
LDB number
MUL
STR square
PNT square
STP
7
7
7
8
8
Assembly language.
Step 6: Final Assembly code
INP 07
LDA 07
LDB 07
MUL
STR 08
PNT 08
STP
Pascal to Assembly language.
Statement
if ( N < 10 ) then
writeln (N)
Assembly equivalent
LDA N (condition expression)
LDB Ten
CMP
JOP (operation) (Then Block)
JMP to statement after then block
PNT N ( then block)
Pascal to Assembly language.
Statement
if ( N < 10 ) then
writeln (N)
else writeln (‘0’);
Assembly equivalent
LDA N (condition expression)
LDB Ten
CMP
JOP (operation) (Then Block)
PNT Zero ( else Block)
JMP to statement after then block
PNT N ( then block)
Assembly language.
Program #2.
Write an assembly program that will get a number
from the user, and determine if the number is evenly
divisible by 5. Output zero (false) if the number is
NOT evenly divisible by 5 or one (true) if the
number IS evenly divisible.
Assembly language.
step 1: algorithm to describe the steps needed to solve
our problem.
Assembly language.
step 1: algorithm to describe the steps needed to solve our
problem.
1. Input a number and store it in memory.
2. Determine if the input number is evenly divisible by 5.
2.1Divide the input number by 5 to get the remainder.
2.2 Compare the remainder to 0.
If remainder equals 0, the number
is evenly divisible.
If the remainder does not equal 0,
the number NOT evenly divisible.
3. Output the results
3.1 If evenly divisible, output 1.
3.2 If NOT evenly divisible, output 0.
Assembly language.
Step 2: write Pascal code
Assembly language.
Step 2: write Pascal code
Const
Zero = 0; One =1; Five = 5;
Var
number , rem: integer;
begin
readln ( number);
rem := number MOD Five ;
if (rem = Zero) then
writeln (One);
else writeln (Zero)
end.
Assembly language.
Step 3: translate Pascal code to assembly
Const
Zero = 0; One =1; Five = 5;
Var
number , rem: integer;
begin
readln ( number);
INP number
rem := number MOD Five ;
LDA number
LDB Five
MOD
STR rem
Assembly language.
Step 3: translate Pascal code to assembly
if (rem = Zero) then
condition exp
writeln (One);
else writeln (Zero)
LDA Zero
LDB rem
CMP
JEQ then block
end.
else block
PNT Zero
then block
JMP after then
PNT One
STP
Assembly language.
Step 4: Number assembly code lines starting from 0
0 INP number
condition exp
else block
then block
1
2
3
4
5
6
7
8
LDA number
LDB Five
MOD
STR rem
LDA Zero
LDB rem
CMP
JEQ then block
9 PNT Zero
10 JMP after then
11 PNT One
12 STP
Assembly language.
Step 5: Replace memory names by cell numbers after STP
0 INP number 16
condition exp
else block
then block
1
2
3
4
5
6
7
8
LDA number 16
LDB Five 13
MOD
STR rem 17
LDA Zero 14
LDB rem 17
CMP
JEQ then block
9 PNT Zero 14
10 JMP after then
11 PNT One 15
12 STP
13 5
14 0
15 1
Assembly language.
Step 5: Replace jumps by instruction numbers
0 INP 16
1
2
3
4
5
6
7
8
else block
then block
LDA 16
LDB 13
MOD
STR 17
LDA 14
LDB 17
CMP
JEQ then block 11
9 PNT 14
10 JMP after then 12
11 PNT 15
12 STP
13 5
14 0
15 1
Assembly language.
Step 6: Final Assembly code
INP 16
LDA 16
LDB 13
MOD
STR 17
LDA 14
LDB 17
CMP
JEQ 11
PNT 14
JMP 12
PNT 15
STP
5
0
1
Assembly language.
Statement
While (N < 10 ) do
begin
writeln (N)
end;
Assembly equivalent
LDA N (condition expression)
LDB Ten
CMP
JOP (operation) (While Block)
JMP to statement after while block
PNT N ( while block statements)
JMP Condition
Assembly language.


Program #3.
Write an assembly program that will add up a series of
positive numbers entered by the user, until the user enters
a negative number, then display the total.
Assembly language.
step 1: algorithm to describe the steps needed to solve
our problem.
Assembly language.
step 1: algorithm to describe the steps needed to solve
our problem.

1.
2.
Input a value and store it in memory.
While the Input Value is not a negative number:
– 2.1 Add the Input Value to the Running Total and store
–
the sum back into the Running Total.
– 2.2 Input another value and store it in memory.

3.
Output the contents of the Running Total.
Assembly language.
Step 2: write Pascal code
Assembly language.
Step 2: write Pascal code
Const
Zero = 0;
Var
sum , number: integer;
begin
sum := zero;
readln ( number);
While ( number >= Zero) do
begin
sum := sum + number;
readln (number);
end;
writeln (sum)
end.
Assembly language.
Step 3: translate Pascal code to assembly
begin
LDB Zero
sum := zero;
STR sum
readln ( number);
INP number
condition LDA number
LDB Zero
While ( number >= Zero) do
CMP
JGT (While Block)
JEQ (While Block)
JMP after while block
Assembly language.
Step 3: translate Pascal code to assembly
begin
sum := sum + number;
LDA sum
LDB number
ADD
STR sum
readln (number);
INP number
end;
writeln (sum)
end.
JMP Condition
PNT sum
STP
Assembly language.
Step 4: Number assembly code lines starting from 0
0 LDB Zero
1 STR sum
2 INP number
9 LDA sum
10 LDB number
11 ADD
12 STR sum
13 INP number
condition 3 LDA number
4 LDB Zero
5 CMP
14 JMP Condition
15 PNT sum
6 JGT (While Block)
7 JEQ (While Block)
8 JMP after while block
16 STP
Assembly language.
Step 5: Replace memory names by cell numbers after
STP
0 LDB Zero
1 STR sum
2 INP number
17
18
while body 9 LDA sum
18
10 LDB number 19
11 ADD
12 STR sum
18
19
13 INP number
condition 3 LDA number 19
4 LDB Zero 17
5 CMP
6 JGT (While Block)
7 JEQ (While Block)
8 JMP after while block
19
end while 14 JMP Condition
15 PNT sum
16 STP
17 0
18
Assembly language.
Step 5: Replace jumps by cell numbers
0 LDB 17
1 STR 18
while body 9 LDA 18
10 LDB 19
11 ADD
12 STR 18
2 INP 19
13 INP 19
condition 3 LDA 19
4 LDB 17
5 CMP
6 JGT (While Block) 9
7 JEQ (While Block) 9
8 JMP after while block 15
end while 14 JMP Condition 3
15 PNT 18
16 STP
17 0
Assembly language.
Step 6: Final Assembly code
LDB 17
STR 18
INP 19
LDA 19
LDB 17
CMP
JGT 9
JEQ 9
JMP 15
LDA 18
LDB 19
ADD
STR 18
INP 19
JMP 3
PNT 18
STP
0