download

Matakuliah
Tahun
Versi
: T0324 / Arsitektur dan Organisasi Komputer
: 2005
:1
Pertemuan 6
Bahasa Rakitan: II
1
Learning Outcomes
Pada akhir pertemuan ini, diharapkan mahasiswa
akan mampu :
• Mendemonstrasikan penggunaan bahasa
rakitan dalam instruksi mesin ( C3 ) ( No
TIK : 3 )
2
Chapter 2.
Assembly Language: II
3
Calling program
Move
Move
Call
Move
..
.
N,R1
#NUM1,R2
LISTADD
R0,SUM
R1 servesas a counter.
R2 pointsto thelist.
Call subroutine.
Save result.
Clear
Add
Decrement
Branch>0
Return
R0
(R2)+,R0
R1
LOOP
Initialize sumto 0.
Add entry from list.
Subroutine
LISTADD
LOOP
Return to calling program.
Figure 2.25. Program of Figure 2.16 written as a subroutine; parameters passed through registers.
4
Assume
top of stac k is at lev el 1 belo w.
Mo v e
Mo v e
Call
#NUM1, – (SP)
N, – (SP)
LIST ADD
Mo v e
Add
4(SP),SUM
#8,SP
..
.
LIST ADD
LOOP
Mo v eMultiple
R0 – R2, – (SP)
Mo v e
Mo v e
Clear
Add
Decremen t
Branc h > 0
Mo v e
Mo v eMultiple
Return
16(SP),R1
20(SP),R2
R0
(R2)+,R0
R1
LOOP
R0,20(SP)
(SP)+,R0 – R2
Push parameters
on to stac k.
Call subroutine
(top of stac k at lev el 2).
Sav e result.
Restore top of stac k
(top of stac k at lev el 1).
Sav e registers
(top of stac k at lev el 3).
Initialize
coun ter to n .
Initialize
p oin ter to the list.
Initialize
sum to 0.
Add en try from list.
Put result on the stac k.
Restore registers.
Return to calling program.
(a) Calling program and subroutine
Lev el 3

Lev el 2

Lev el 1

[R2]
[R1]
[R0]
Return address
n
NUM1
(b) Top of stack at various times
Figure 2.26. Program of Figure 2.16 written as a subroutine; parameters passed on the stack.
5
SP
(stack pointer)
saved [R1]
saved [R0]
localvar3
localvar2
localvar1
FP
(frame pointer)
saved [FP]
Return address
Stack
frame
for
called
subroutine
param1
param2
param3
param4
Old TOS
(top-of-stack)
Figure 2.27. A subroutine stack frame example.
6
Memory
lo cation
Main
Instructions
program
2000
2004
2008
2012
2016
2020
First
2100
2104
2108
2112
3000
P ARAM2, – (SP)
P ARAM1, – (SP)
SUB1
(SP),RESUL T
#8,SP
Place parameters
FP ,– (SP)
SP ,FP
R0 – R3, – (SP)
8(FP),R0
12(FP),R1
Sav e frame poin ter register.
Load the frame poin ter.
Sav e registers.
Get first parameter.
Get second parameter.
Store result.
Restore stack
on stack.
lev el.
subroutine
SUB1
2160
2164
Second
..
.
Mo v e
Mo v e
Call
Mo v e
Add
next instruction
..
.
Commen ts
Mo v e
Mo v e
Mo v eMultiple
Mo v e
Mo v e
..
.
Mo v e
Call
Mo v e
..
.
Mo v e
Mo v eMultiple
Mo v e
Return
P ARAM3,
SUB2
(SP)+,R2
R3,8(FP)
(SP)+,R0
(SP)+,FP
– (SP)
– R3
Place a parameter
on stack.
Pop SUB2
in to R2.
result
Place answ er on stack.
Restore registers.
Restore frame p oin ter register.
Return to Main program.
subroutine
SUB2
Mo v e
Mo v e
Mo v eMultiple
Mo v e
..
.
Mo v e
Mo v eMultiple
Mo v e
Return
FP ,– (SP)
SP ,FP
R0 – R1, – (SP)
8(FP),R0
Sav e frame p oin ter register.
Load the frame p oin ter.
Sav e registers R0 and R1.
Get the parameter.
R1,8(FP)
(SP)+,R0
(SP)+,FP
Place SUB2 result on stack.
Restore registers R0 and R1.
Restore frame p oin ter register.
Return to Subroutine
1.
– R1
Figure 2.28. Nested subroutines.
7
FP
[R1] from SUB1
[R0] from SUB1
[FP] from SUB1
2164
param3
[R3] from Main
FP
[R2] from Main
[R1] from Main
[R0] from Main
[FP] from Main
2012
Stack
frame
for
second
subroutine
Stack
frame
for
first
subroutine
param1
param2
Old TOS
Figure 2.29. Stack frames for Figure 2.28.
8
C
R0
0
before:
0
0
1
1
1
0
.
.
.
0
1
1
after:
1
1
1
0
.
.
.
0
1
1
0
0
(a) Logical shift left
LShiftL
0
#2,R0
R0
C
before:
0
1
1
1
0
.
.
.
0
1
1
0
after:
0
0
0
1
1
1
0
.
.
.
0
1
(b) Logical shift r
ight
LShiftR #2,R0
R0
C
before:
1
0
0
1
1
.
.
.
0
1
0
0
after:
1
1
1
0
0
1
1
.
.
.
0
1
(c) Ar ithmetic shift r
ight
AShiftR #2,R0
Figure 2.30. Logical and arithmetic shift instructions.
9
Move
MoveByte
LShiftL
MoveByte
And
Or
MoveByte
#LOC,R0
(R0)+,R1
#4,R1
(R0),R2
#$F,R2
R1,R2
R2,PACKED
R0 points to data.
Load first byte into R1.
Shift left by 4 bit positions.
Load secondbyte into R2.
Eliminate high-order bits.
ConcatenatetheBCD digits.
Store the result.
Figure 2.31. A routine that packs two BCD digits.
10
C
R0
before:
0
0
1
1
1
0
.
.
.
0
1
1
after:
1
1
1
0
.
.
.
0
1
1
0
1
(a) Rotate left without carr
y
RotateL
C
#2,R0
R0
before:
0
0
1
1
1
0
.
.
.
0
1
1
after:
1
1
1
0
.
.
.
0
1
1
0
0
(b) Rotate left with carr
y
RotateLC #2,R0
R0
C
before:
0
1
1
1
0
.
.
.
0
1
1
0
after:
1
1
0
1
1
1
0
.
.
.
0
1
(c) Rotate r
ight without carr
y
RotateR #2,R0
R0
C
before:
0
1
1
1
0
.
.
.
0
1
1
0
after:
1
0
0
1
1
1
0
.
.
.
0
1
ight with carr
y
(d) Rotate r
RotateRC #2,R0
Figure 2.32. Rotate instructions.
11