You are on page 1of 17

úpovìtoìqpto

13/11/2014
1t 0o 0uµq0ouµc....
1. zuµµóoctç koìo¿upqìuv
2. Caller - Callee save koìo¿upqìcç
3. k\qoq ouvópìqoqç
4. xpqoq oìotµoç
3. Acoµcuoq Mvqµqç
6. Assembly l/C
7. Ascll ntvokoç
8. Þopóôctyµo
zuµµóoctç koìo¿upqìuv (1/2)
MlÞS
32 koìo¿upqìcç
Cvoµooto koìo¿upqìuv
An\q ovoµooto, n.¿. $1, $2 kì\
zuµµo\tkq ovoµooto, n.¿. $L0, $a1, kì\
zuµµo\tkq ovoµootouaooqìevouv tqv
¿pqoq touç otiç ouµµuociç ¿pqoqç
zuµµóoctç koìo¿upqìuv (2/2)
ïuµµoktxq Cvoµoo|o
korogæpqræv
Actroupy|o
$zero Þcptc¿ct ìqv ìtµq 0
$v0, $v1 l/C kot cntoìpc¢oµcvq ìtµq ono ouvópìqoq
$a0..$a3 Cptoµoìo ouvopìqocuv
$t0..$t9 1ontkot koìo¿upqìcç
$s0..$s7 Saved koìo¿upqìcç
$sp SLack polnLer
$ra Actu0uvoqç cntoìpo¢qç
$Ip lrame polnLer
$k0, $k1 kernel reglsLers (lnLerrupLs)
$gp Clobal polnLer
$at Assembler temporary register
Þopoôctyµoìo ¿pqoqç koìo¿upqìuv
1. $v0, $v1
2. $a0, ., $a3
3. $sp
|| 5v0, 4
|a 5a0, str1
sysca||
|| 5v0, 1 # pr|nt |nteger
|a 5a0, 1S00 # |nteger to pr|nt
sysca||
|| 5a0, 4
|| 5a1, 10
Ia| func
Add| 5sp, 5sp, -4
Sw 5t0, 0(5sp)
....
|w 5t0, 0(5sp)
add| 5sp, 5sp, 4
Caller - Callee koìo¿upqìcç (1/2)
Callee-Save koìo¿upqìcç
$s0-$s7
Caller-Save koìo¿upqìcç
$L0-$L9
P kó0c ouvópìqoq ôtvct cyyuqoq oìt ôcv 0o
o\\óçct ìouç $s0-$s7
P kó0c ouvópìqoq µnopct vo o\\óçct ìouç
uno\otnouç koìo¿upqìcç: $L0-$L7, $a0-$a3,
$v0, $v1, $aL, $ra
Caller - Callee koìo¿upqìcç (2/2)
Actìoupyto
Cìov µto ouvópìqoq ¿pqotµonotct oìo ouµo ìqç ìouç
koìo¿upqìcç 5s 0o npcnct vo ìouç ono0qkcuouµc
oìov npo\oyo kot vo ìouç cnovo¢cpouµc oìov
cnt\oyo ìqç ouvópìqoqç
Cìov µto ouvópìqoq 0c\ct vo ôtoìqpqoct ìqv ìtµq yto
kónotouç ono ìouç koìo¿upqìcç 5t µcìó ìqv k\qoq
µtoç ó\\qç ouvópìqoqç ìoìc 0o npcnct vo
ono0qkcuouµc ìouç koìo¿upqìcç nptv ìqv k\qoq ìqç
ó\\qç ouvópìqoqç kot vo ìouç cnovo¢cpouµc o¢ou
cntoìpc¢ouµc.
Cµoto yto ìouç koìo¿upqìcç: $ra, $v, $a.
k\qoq ouvópìqoqç
1. Cptoµoìo
koìo¿upqìcç $a0,.,$a3
2. Lntoìpc¢oµcvq ìtµq
$v0
3. k\qoq
[al func
1t okptµuç kóvct q cvìo\q [al?
4. 8eLurn
!r $ra
xpqoq zìotµoç
Þou ono0qkcuouµc ìtç ìtµcç ìuv caller-save q
ìuv callee-save koìo¿upqìuv?
ï1CI8A!!
zìotµo
LIFO: Last-In, First-Out.
Hpuçciç: (ciou¸e¸q otoi¿ciou otqv otoiµu),
(uçuipcoq otoi¿ciou uao tqv otoiµu)
Top oI
Stack
100
33
-3706
100
33
Top oI
Stack
100
33
Top oI
Stack
100
Top oI
Stack

push(-3706)

pop

pop
1ponoç ypo¢qç kuôtko
kpqoq Ca||er-save
xorogæpqræv
kpqoq Ca||ee-save
xorogæpqræv
lunc0:
addl $sp, $sp, -4
sw $ra, 0($sp)
move $L0, $a0
...
addl $sp, $sp, -4
sw $L0, 0($sp)
[al func1
lw $L0, 0($sp)
addl $sp, $sp, 4
...
lw $ra, 0($sp)
addl $sp, $sp, 4
[r $ra
lunc0:
addl $sp, $sp, -8
sw $ra, 0($sp)
sw $s0, 4($sp)
move $s0, $a0
...
[al func1
...
lw $s0, 4($sp)
lw $ra, 0($sp)
addl $sp, $sp, 8
[r $ra
HPY201 © A. Hvcuµutikutoç 2010 LEA. 11
Ooq¸icç ¸iu Acoµcuoq Mvqµqç
.word 1 [,., n] Acoµcuci ¿epo ¸iu n ìcçciç oaou kui
uao0qkcuci tiç tiµcç w1, ., wn.
.byte b1 [,., bn] Acoµcuci ¿epo ¸iu n bytes oaou kui
uao0qkcuci tiç tiµcç b1, ., bn.
.asciiz str Oaeç kui q .ascii uììu µc cvu µqocv µctu tov
tcìcutuio ¿upuktqpu (¸iu ¸ìeoocç oaeç «C»)
.space n Acoµcuci ¿epo ¸iu n bytes (¿epiç
up¿ikoaoiqoq)
.aIign n Eu0u¸puµµi¸ci tqv oicu0uvoq tou caoµcvou
ocooµcvou oc aoì/oio tou 2
n
. (.align 2 ÷~
oicu0uvoq aoì/oio tou 4).
l/C MlÞS
Serv|ce System Ca|| Code Arguments kesu|t
prlnL lnLeger 1 $a0 = value (none)
prlnL floaL 2 $f12 = floaL value (none)
prlnL double 3 $f12 = double value (none)
prlnL sLrlng 4 $a0 = address of sLrlng (none)
read lnLeger 3 (none) $v0 = value read
read floaL 6 (none) $f0 = value read
read double 7 (none) $f0 = value read
read sLrlng 8
$a0 = address where sLrlng Lo
be sLored
$a1 = number of characLers Lo
read + 1
(none)
memory allocaLlon 9
$a0 = number of byLes of
sLorage deslred
$v0 = address of block
exlL (end of program) 10 (none) (none)
read characLer 12 (none) char ln $v0
prlnL characLer 11 $a0 = lnLeger (none)
Þtvokoç Ascll
Þopóôctyµo
lpó¢ìc cvo npoypoµµo assembly onou o ¿pqoìqç
0o cnt\cyct:
1: Av 0o ôtoµó(ct cvov opt0µo kot 0o ìov
onokpunìoypo¢ct oc ypóµµo.
2: Av 0o ôtoµó(ct µto ouµµo\ooctpó kot 0o ìqv
kpunìoypo¢ct oc µto o\\q\ou¿to opt0µuv.
P onokpunìoypó¢qoq kot q kpunìoypó¢qoq 0o
ytvcìot µc ìov cçqç ìpono:
kpunìoypó¢qoq: a 0, b 1, ., A 26, 827
Anokpunìoypó¢qoq: 0 a, 1 b, ., 26 A,
278
#lnclude <sLdlo.h>
char sLr[100],
char decode_func(lnL a),
vold encode_func(char *sLr),
lnL maln()
[
lnL cholce, encoded, decoded,
prlnLf("Þlease glve your cholce (1 or 2): "),
scanf("°d", &cholce),
lf(cholce == 1)
[
prlnLf("Þlease glve Lhe number:"),
scanf("°d",&encoded),
decoded = decode_func(encoded),
prlnLf("1he decoded characLer ls: °c", decoded),
}
else lf(cholce == 2)
[
prlnLf("Þlease glve Lhe sLrlng:"),
scanf("°s", sLr),
encode_func( &sLr[0]),
}
reLurn(0),
}
Maln luncLlon
luncLlon Lncodlng
vold encode_func(char *sLr)
[
lnL l,
lnL resulL,
l = 0,
whlle(sLr[l] != 0)
[
lf(sLr[l] >= 97)
resulL = sLr[l] - 97,
else
resulL = sLr[l] - 63 + 26,
prlnLf("°d ",resulL),
l++,
}
}
luncLlon uecodlng
char decode_func(lnL a)
[
char sLarL,
lf(a > 23)
[
sLarL = 63,
sLarL = sLarL + (a - 26),
}
else
[
sLarL = 97,
sLarL = sLarL + a,
}
reLurn(sLarL),
}

You might also like