tugas 3 oganisasi komputer 23510310

10
Tugas 3 11516 Organisasi Sistem Komputer Machine Level Programming and Assembly Language oleh : I Putu Agus Eka Pratama 23510310 Dosen : Dr. Kusprasapta Mutijarsa Magister Teknologi Informasi Sekolah Teknik Elektro dan Informatika Institut Teknologi Bandung 2011

Upload: putu-shinoda

Post on 22-May-2015

518 views

Category:

Technology


0 download

DESCRIPTION

Pemrograman C dan Assembly di Linux.

TRANSCRIPT

Page 1: Tugas 3 oganisasi komputer 23510310

Tugas 3 11516 Organisasi Sistem Komputer

Machine Level Programming and Assembly Language

oleh :I Putu Agus Eka Pratama

23510310

Dosen :Dr. Kusprasapta Mutijarsa

Magister Teknologi InformasiSekolah Teknik Elektro dan Informatika

Institut Teknologi Bandung2011

Page 2: Tugas 3 oganisasi komputer 23510310

1. Soal :

Practice problem 3.1

Assume the following values are stored at the indicated memory addresses and registers :

Address Value

0x100 0xFF

0x104 0xAB

0x108 0x13

0x10C 0x11

Address Value

%eax 0x100

%ecx 0x1

%edx 0x3

Fill the following table showing the values for the indicated operands :

Operand Value

%eax

0x104 0xAB

$0x108

(%eax)

4(%eax)

Operand Value

9(%eax,%edx)

260(%ecx,%edx)

0xFC(, %ecx,4)

(%eax,%edx,4)

Jawab :

Operand Value Keterangan

%eax 0x100 Nilai dari %eax adalah 0x100 (register).

0x104 0xAB Nilai dari register 0x104 adalah 0xAB (absolut address).

$0x108 0x108 Tanda $ menyatakan bahwa data integer konstan sehingga

data tetap (immediate).

(%eax) 0xFF %eax = 0x100, sehingga value 0xFF (address 0x100).

Page 3: Tugas 3 oganisasi komputer 23510310

4(%eax) 0xAB 0x104 = 0x100 + 4 dan value 0xAB (address 0x104).

Operand Value Keterangan

9(%eax,%edx) 0x11 0x10C = (0x9 + 0x3) + 0x100 = C + 0x100 , value

0x11 (address 0x10C).

260(%ecx,%edx) 0x13 260 = 0x104.

0x104 + 0x1 + 0x3 = 0x108, value 0x13 (adress

0x108).

0xFC(, %ecx,4) 0xFF 0xFC + (1*4).

0xFC + 0x4 = 0x100 (address 0x100).

(%eax,%edx,4) 0x11 (0x1 * 4) + 0x100 = 0x10C, value 0x11 (address

0x10C).

2. Soal :

[Practice Problem 3.2]

You are given the following information. A function with prototype void decode1(int *xp, int *yp, int

*zp); is compiled into assembly code. The body of the code is as follows:

1. movl 8(%ebp), %edi

2. movl 12(%ebp), %ebx

3. movl 16(%ebp), %esi

4. movl (%edi), %eax

5. movl (%ebx), %edx

6. movl (%esi), %ecx

7. movl %eax, (%ebx)

8. movl %edx, (%esi)

9. movl %ecx, (%edi)

Parameters xp, yp, and zp are stored at memory locations with offsets 8, 12, and 16, respectively,

relative to the address in register %ebp.

Write C code for decode1 that will have an effect equivalent to the assembly code above.

You can test your answer by compiling your code with the –S switch.

Your compiler may generate code that differs in the usage of registers or the ordering of memory

references, but is should still be functionally equivalent.

Jawab :

Code Assembly :

movl 8(%ebp), %edi

movl 12(%ebp), %ebx

Page 4: Tugas 3 oganisasi komputer 23510310

movl 16(%ebp), %esi

movl (%edi), %eax

movl (%ebx), %edx

movl (%esi), %ecx

movl %eax, (%ebx)

movl %edx, (%esi)

movl %ecx, (%edi)

void decode1(int *xp, int *yp, int *zp);

Code C :

void decode1(int *xp, int *yp, int *zp)

{

int tx = *xp;

int ty = *yp;

int tz = *zp;

*yp = tx;

*zp = ty;

*xp = tz;

}

Pembuktian :

Membuat file jawabansoalno2.c

putu-shinoda@my-machine:~$ touch jawabansoalno2.c

Mengisikan script C ke dalam file jawabansoalno2.c

putu-shinoda@my-machine:~$ nano jawabansoalno2.c

Kode C yang dimasukkan

void decode1(int *xp, int *yp, int *zp)

{

int tx = *xp;

int ty = *yp;

int tz = *zp;

*yp = tx;

*zp = ty;

*xp = tz;

}

Ditampilkan pada gambar berikut

Page 5: Tugas 3 oganisasi komputer 23510310

Kemudian dilanjutkan mencompile file jawabansoalno2.c dengan opsi -S

putu-shinoda@my-machine:~$ gcc -O -S jawabansoalno2.c

Terbentuk file jawabansoalno2.s dengan isi file sebagai berikut

Page 6: Tugas 3 oganisasi komputer 23510310

3. Soal :

[Practice Problem 3.3]

Suppose register %eax holds value x and %ecx holds value y. Fill in the table below with formulas

indicating the value that will be stored in register %edx for each of the following assembly code

instructions.

Expression Result

leal 6(%eax), %edx

leal (%eax, %ecx), %edx

leal (%eax, %ecx,4)

Expression Result

leal 7(%eax, %eax,8), %edx

leal 0xA(,%ecx, 4), %edx

leal 9(%eax, %ecx,2),%edx

Jawab :

Expression Result Keterangan

leal 6(%eax), %edx 6 + x %edx = 6 + x.

leal (%eax, %ecx), %edx X + y %edx = x + y.

leal (%eax, %ecx,4), %edx X + 4y %edx = x + 4y.

Expression Result Keterangan

leal 7(%eax, %eax,8), %edx 7 + 9x %edx = 7 + x + (8*x) = 7 + 9x.

leal 0xA(,%ecx, 4), %edx 10 + 4y 0xA = 10.%edx = 10 + (y*4) = 10 + 4y.

leal 9(%eax, %ecx,2), %edx 9 + x + 2y %edx = 9 + x + (2*y) = 9 + x + 2y.

4. Soal :

[Practice Problem 3.4]

Assume the following values are stored at the indicated memory addresses and registers :

Address Value

0x100 0xFF

0x104 0xAB

0x108 0x13

Page 7: Tugas 3 oganisasi komputer 23510310

0x10C 0x11

Address Value

%eax 0x100

%ecx 0x1

%edx 0x3

Fill in the following table showing the effects of the following instructions, both in terms of the

register or memory location that will be updated and the resulting value.

Instruksi Tujuan Nilai

add1 %ecx, (%eax) 0x100

sub1 %edx, 4 (%eax)

Imu11 $16 (%eax, %edx, 4)

Inc1 8 (%eax)

dec1 %ecx

sub1 %edx, %eax

Jawab :

Instruksi Tujuan Nilai

add1 %ecx, (%eax) 0x100 0x100

sub1 %edx, 4 (%eax) 0x104 0xA8

Imu11 $16 (%eax, %edx, 4) 0x10C 0x110

Inc1 8 (%eax) 0x108 0x14

dec1 %ecx %ecx 0x0

sub1 %edx, %eax %eax 0xFD

5. Soal :

[Problem 3.31]

You are given the information that follows. A function with prototype void decode2(int x, int y, int

z); is compiled into assembly code. The body of the code is as follows:

1.movl 16(%ebp), %eax

2.movl 12(%ebp), %edx

3.sub %eax, %edx;

4.movl %edx, %eax

5.imull 8(%ebp), %edx

6.sall $31, %eax

7.sarl $31, %eax

8.xorl %edx, %eax

Page 8: Tugas 3 oganisasi komputer 23510310

#C Code

int decode2(int x, int y, int z)

{

int t1 = y - z;

int t2 = x * t1;

int t3 = (t1 << 31) >> 31;

int t4 = t3 ˆ t2;

return t4;

}

Parameters x, y, and z are stored at memory locations with offsets 8, 12, and 16 relative to the

address in register %ebp. The code stores the return value in register %eax.

Write C code for decode2 that will have an effect equivalent to the assembly code. You can test your

answer by compiling your code with the –S switch. Your compiler may not generate identical code,

but it should be functionally equivalent.

Jawab :

Membuat file jawabansoalno5.c

putu-shinoda@my-machine:~$ touch jawabansoalno5.c

Mengisikan script C ke dalam file jawabansoalno5.c

putu-shinoda@my-machine:~$ nano jawabansoalno5.c

Kode C yang dimasukkan

int decode2(int x, int y, int z)

{

int t1 = y - z;

int t2 = x * t1;

int t3 = (t1 << 31) >> 31;

int t4 = t3 ˆ t2;

return t4;

}

Ditampilkan pada gambar berikut

Page 9: Tugas 3 oganisasi komputer 23510310

Kemudian dilanjutkan mencompile file jawabansoalno5.c dengan opsi -S

putu-shinoda@my-machine:~$ gcc -O -S jawabansoalno5.c

Terbentuk file jawabansoalno5.s dengan isi file sebagai berikut

Page 10: Tugas 3 oganisasi komputer 23510310