1. 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
2. 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).
3. 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
4. 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
5. 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
6. 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
7. 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
8. #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
9. 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