Anda di halaman 1dari 7

Soal 1 Array

a. Diketahui suatu fungsi dengan prototype sebagai berikut:


void SoalArray (arr A)
Setelah fungsi tersebut dikompilasi menjadi kode assembly, dihasilkan:
movl 8(%ebp), %ecx
movl $10, %eax
.L3:
movl (%ecx, %eax, 4), %edx
leal (%edx, %edx, 2), %edx
sall $2, %edx
movl %edx, (%ecx, %eax, 4)
subl $1, %eax
jne .L3
Berdasarkan kode assembly tersebut, lengkapi kode pemograman bahasa C berikut:
#define LEN __________
typedef ________ arr [LEN];
void SoalArray (arr A)
{
int i;
_______________________
{
_______________;
}
}

b. Perhatikan deklarasi berikut:


short A[5][8]
int B[9] = {2, 3, 5, 1, 5, 6, 7, 8, 4};

Apabila diketahui dalam memori, kedua array tersebut terletak berurutan, sehingga array
B terletak pada alamat memory tepat setelah array A. Serta diketahui elemen A kolom 3
baris 2 terletak pada alamat x, Lengkapilah tabel berikut:

Referensi Tipe Nilai


B[3] 1
&(A[2][3])
B+7
*(B+3)
B+c
A

Ukuran total Array A adalah ______________ byte


B terletak pada alamat _____________
Soal 2 Cache
Diketahui sebuah memori dengan lebar alamat 5 bit memiliki isi sebagai berikut (seluruh
bilangan dalam hexadecimal)

Alamat Isi Alamat Isi


00 AA 10 00
01 BB 11 11
02 CC 12 22
03 DD 13 33
04 EE 14 44
05 FF 15 55
06 00 16 66
07 11 17 77
08 DE 18 88
09 AD 19 99
0A BE 1A 12
0B EF 1B 34
0C CO 1C 56
0D OF 1D 78
0E FE 1E 89
0F EE 1F 9A

Lakukan simulasi pengisian cache secara berurutan sesuai dengan alamat yang diacu pada soal
berikut ini, dengan menuliskan status (Hit atau Miss) da nisi cache. Apabila kedua line dalam
satu set penuh, lakukan penggantian pada line tertua (not recently used).

Kondisi cache tergantung soal sebelumnya, untuk soal a diasumsikan diawali dengan kondisi
cold cache.

a. Alamat 0x02
Status: ____________
Isi cache (dalam hexadecimal
Line 0 Line 1
Set Tag V B0 B1 Tag V B0 B1
index
0
1

b. Alamat 0x06
Status: ____________
Isi cache (dalam hexadecimal

Line 0 Line 1
Set Tag V B0 B1 Tag V B0 B1
index
0
1

c. Alamat 0x11
Status: ____________
Isi cache (dalam hexadecimal

Line 0 Line 1
Set Tag V B0 B1 Tag V B0 B1
index
0
1

d. Alamat 0x10
Status: ____________
Isi cache (dalam hexadecimal

Line 0 Line 1
Set Tag V B0 B1 Tag V B0 B1
index
0
1

e. Alamat 0x1B
Status: ____________
Isi cache (dalam hexadecimal
Line 0 Line 1
Set Tag V B0 B1 Tag V B0 B1
index
0
1

f. Alamat 0x02
Status: ____________
Isi cache (dalam hexadecimal

Line 0 Line 1
Set Tag V B0 B1 Tag V B0 B1
index
0
1

Soal 3

Diberikan kode aasembly sebagai berikut (note: jae: jump if above ord equal)

loop:
pushl %ebp
movl %esp, %ebp
movl 0x8(%ebp), %edx
movl %edx, %eax
addl 0xc(%ebp), %eax
leal 0xffffffff (%eax), %ecx
cmpl %ecx, %edx
jae .L4
L6:
movb (%edx), %al
xorb (%ecx), %al
movb %al, (%edx)
xorb (%ecx), %al
movb %al, (%ecx)
xorb %al, (%edx)
incl %edx
decl %ecx
cmpl %ecx, %edx
jb .L6
.L4:
movl %ebp, %esp
popl %ebp
ret

Berdasarkan kode diatas, isilah bagian kosong pada kode C berikut:

void loop (char *h, int len) {


char *t;
for ( _________ ; ____________ ; h++, t--) {
________________ ;
________________ ;
________________ ;
}
return;
}

Soal 4

Diberikan struktur data sebagai berikut:


typedef struct { typedef struct {
short code; short code;
long start; short start;
char raw[3]; char raw[5];
double data; short sense;
} OldDataFormat; shot ext;
double data;
} NewDataFormat;

a. Buatlah layout alokasi memory untuk kedua struktur diatas pada mesin Linux x86 [32bit]

b. Diberikan kode berikut:


void foo (OldDataFormat *oldData) {
NewDataFormat *newData;

/* mengosongkan isi oldData */


bzero (void *) oldData, sizeof(oldData));

oldData -> code = 0x104f;


oldData -> start = 0x80501ab8;
oldData -> raw[0] = 0xe1;
oldData -> raw[1] = 0xe2;
oldData -> raw[2] = 0x8f;
oldData -> raw[-5] = 0xff;
oldData -> data = 1.5;

newData = (NewDataFormat *) oldData;


Setelah kode ini dijalankan, tuliskanlah isi variabel newData di bawah ini (pada mesin
Linux x86, menggunakan Little Endian. Perhatikan aturan byte ordering)

newData -> start = 0x ______________ ;


newData -> raw[0] = 0x ______________ ;
newData -> raw[2] = 0x ______________ ;
newData -> raw[4] = 0x ______________ ;
newData -> sense = 0x ______________ ;

Anda mungkin juga menyukai