You are on page 1of 3

Trng i hc Bch khoa H Ni

Vin CNTT & TT

Trng b mn

Cn b ra thi

KIM TRA MN: Lp trnh h thng


Thi gian: 60 pht (c s dng ti liu)
1 Mt chng trnh C c dch thnh m Assembly nh di y, hy m t trng thi ca ngn xp ti cc thi
im sau dng 5, 30, 31 (Lu : v trng thi ngn xp theo trnh t thc hin chng trnh, dng no c thc
thi nhiu hn 1 ln th v nhiu ln)
int oddeven(int n) {
if (n == 0) return 0;
else if (n == 1) return 1;
else oddeven(n - 2);
}
int main() {
if (oddeven(5) == 0)
printf("5 is an even number");
else
printf("5 is an odd number");
return 0;
}
a ch thp
Hng m rng
ca stack

a ch cao

EBPSau lnh 28

ESP
EBP

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:

oddeven:
pushl
%ebp
movl %esp, %ebp
subl $4, %esp
cmpl $0, 8(%ebp)
jne .L2
movl $0, %eax
jmp .L3
.L2:
cmpl $1, 8(%ebp)
jne .L4
movl $1, %eax
jmp .L3
.L4:
movl 8(%ebp), %eax
subl $2, %eax
movl %eax, (%esp)
call oddeven
.L3:
leave
ret
.section
.rodata
.LC0: .string
"5 is an even number"
.LC1: .string
"5 is an odd number"
.text
main:
pushl
%ebp
movl %esp, %ebp
subl $4, %esp
movl $5, (%esp)
call oddeven
testl
%eax, %eax
jne .L7
movl $.LC0, %eax
movl %eax, (%esp)
call printf
jmp .L8
.L7:
movl $.LC1, %eax
movl %eax, (%esp)
call printf
.L8:
movl $0, %eax
leave
ret

2 Mt trnh lin kt mun to ra mt tp thc thi C t 2 m un A v B nh m t bng 1. Gi s quy tc cn


chnh t (word alignment) l 4 bytes v trang l 4Kbyte. Hy in cc gi tr (1), (2), (3), (4), (5) theo quy tc
hoch nh b nh.
Bng 1. Cu trc v kch thc
mi m un
Module
Module B
A
0x2017
0x182A
text

0x0

Text
segment

(1)
(2)

Data
segment

(3)
(4)

BSS

(5)

data

0xA9B

0x369

BSS

0x105

0x189

3 Hy in gi tr vo nhng im ti nh v (XXXX) cho cc lin kt (A,B,C,D) nh trong hnh v.


Trc lin kt:
0000

+---------------+
a+------o B
b| r

s| e

A o---+
o<--+ 0200
|

+---------------+ 0000
|

0c00

o| l+---o C

0e82

l| a| |

1000

u| t| +---------------+

+---------------+

t| i| |

e|ve+-->o C+900

1500
1600

D o------------------>o func()
|

+----->o

+---------------+
Sau lin kt:
1000

----------------+
+------o B

A o----+ XXXX

o<---+

| r

XXXX

a| e+---o C

D o----+

XXXX

b| l| |- - - - - - - -| |
s| a| |
o| t| |

XXXX

| |
func o<---+ XXXX

l| i| +---------------+
u| v| |

XXXX

t| e+-->o C+XXXX

XXXX

e+----->o

| 0700
| 0dd7

+---------------+

+---------------+

You might also like