• Tidak ada hasil yang ditemukan

Pemrograman Bahasa Mesin

N/A
N/A
Protected

Academic year: 2021

Membagikan "Pemrograman Bahasa Mesin"

Copied!
42
0
0

Teks penuh

(1)

Organisasi Sistem Komputer

Bagian 5

Bagian 5

Pemrograman Bahasa Mesin

Sekolah Teknik Elektro dan Informatika Sekolah Teknik Elektro dan Informatika Institut Teknologi Bandung

(2)

Pembahasan

Model Eksekusi Pemrograman Assembly

ode

se us e og a a

sse b y

Pengaksesan Data dan Informasi

ƒ

Register

g

ƒ

Memori

(3)

Prosesor IA32

Mendominasi pasar komputer

p

p

Evolusi desain

ƒ

Dimulai tahun 1978 dengan 8086

ƒ

Sejalan dengan waktu, kemampuan terus bertambah

ƒ

Masih mendukung kemampuan lama, walau usang

g

p

,

g

Complex Instruction Set Computer (CISC)

ƒ

Berbagai instruksi berbeda dengan berbagai format berbeda

T t i h b i k il di k d Li

ƒ Tetapi hanya sebagian kecil yang digunakan pada program Linux

ƒ

Kinerjanya sulit dibandingkan dengan Reduced Instruction Set

(4)

Evolusi X86 : Sisi Pemrogram

8086 (1978; 29 ribu transistor)

ƒ Prosesor 16 bit.

ƒ Dasar untuk IBM PC dan DOS ƒ Memori terbatas 1 MB.

ƒ DOS hanya menyediakan 640K ƒ DOS hanya menyediakan 640K

80286 (1982; 134 ribu transistor)

ƒ Penambahan skema pengalamatan ƒ Dasar untuk IBM PC-AT dan Windows ƒ Dasar untuk IBM PC AT dan Windows

80386 (1985; 275 ribu transistor)

ƒ Diperbesar menjadi 32 bit. ƒ Flat addressingFlat addressing

ƒ Dapat menjalankan Unix

(5)

Evolusi X86 : Sisi Pemrogram

Pentium (1993; 3,1 juta transistor)

Pentium/MMX (1997; 4,5 juta transistor)

ƒ Terdapat tambahan koleksi instruksi khusus untuk operasi data integer 1,2 atau 4 byte dalam vektor 64 bit

Pentium Pro (1995; 6 5 juta transistor)

Pentium Pro (1995; 6,5 juta transistor)

ƒ Terdapat penambahan instruksi move

ƒ Terdapat perubahan besar pada mikroarsitektur

Pentium III (1999 8 2 juta transistor)

Pentium III (1999, 8,2 juta transistor)

ƒ Penambahan instruksi “streaming SIMD” untuk operasi data floating point atau integer 1,2 atau 4 byte dalam vektor 128 bit

Pentium 4 (2001; 42 juta transistor)

(

;

j

)

ƒ Penambahan format 8 byte dan 144 instruksi baru untuk mode streaming SIMD

(6)

Evolusi X86 : Clone

Advanced Micro Devices (AMD)

(

)

Sejarah

ƒ

AMD mengikuti di belakang Intel

ƒ

Lebih lambat, lebih murah

Saat ini

Saat ini

ƒ

Merekrut perancang rangkaian ternama dari Digital Equipment

Corp (DEC)

ƒ

Intel terpacu untuk membuat IA64

ƒ

Intel terpacu untuk membuat IA64

ƒ

Sekarang merupakan kompetitor Intel

(7)

Evolusi X-86 : Clone

Transmeta

a s eta

Baru muncul

Baru muncul

ƒ

Anak buah Linus Torvalds

Memiliki pendekatan yang sangat berbeda

Memiliki pendekatan yang sangat berbeda

dalam implementasinya

ƒ

Menerjemahkan kode x86 menjadi kode “Very Long

Instruction Word” (VLIW)

(8)

Spesies Baru : IA64

Itanium (2001; 10 juta transistor)

ta u ( 00 ; 0 juta t a s sto )

ƒ

Arsitektur 64 bit

ƒ

Instruksi set baru yang sangat berbeda, dirancang

untuk kinerja tinggi

ƒ

Dapat menjalankan program IA32 yang telah ada

ƒ

Memiliki x86 engine on board

ƒ

Memiliki x86 engine on-board

ƒ

Proyek kerjasama dengan Hewlett-Packard

Itanium 2 (2002; 221 juta transistor)

Itanium 2 (2002; 221 juta transistor)

(9)

Pemrograman Assembly

CPU Memori Alamat E I P

Register Object Code

Program Data OS Data Alamat Data Instr ksi Condition

Keterangan :

P Condition Instruksi Codes ƒ EIP(Program Counter)

ƒ Alamat instruksi berikutnya ƒ Register

Stack

ƒ Untuk menyimpan program data

ƒ Condition Codes

ƒ Menyimpan informasi status dari operasi aritmatika

ƒ Memori

ƒ Byte addressable array

ƒ Menyimpan kode data sistem operasi

operasi aritmatika

ƒ Digunakan pada percabangan

ƒ Menyimpan kode, data, sistem operasi

(10)

Menerjemahkan C Ke Kode Object

ƒ Kode disimpan dalam file : p1.c p2.c

ƒ Dikompilasi dengan perintah : gcc -O p1.c p2.c -o p

M k ti i ( ) H il bi di i d l fil

teks Program C (p1.c p2.c)

ƒ Menggunakan optimasi (-O). Hasil biner disimpan dalam file p

t k Compiler (gcc -S) Program Asm (p1.s p2.s) teks Assembler (gcc or as) g (p p ) P Obj t ( ) biner Linker (gcc or ld)

Program Object (p1.o p2.o) Static libraries (.a)

(11)

Kompilasi ke Assembly

Kode C

Assembly diperoleh

int sum(int x, int y) { int t = x+y; return t; _sum: pushl %ebp movl %esp,%ebp

movl 12(%ebp) %eax return t; } movl 12(%ebp),%eax addl 8(%ebp),%eax movl %ebp,%esp popl %ebp ret Diperoleh dengan perintah

O S d gcc -O -S code.c File yang dihasilkan code.s

(12)

Karakteristik Assembly

Tipe Data Minimal

ƒ

Data integer 1,2 atau 4 byte

ƒ Data dan alamat (pointer)

ƒ

Data floating point 4, 8 atau 10 byte

ƒ

Tidak ada tipe khusus untuk array atau structure

ƒ Hanya alokasi byte berurutan dalam memori

Operasi Dasar

p

ƒ

Melakukan fungsi aritmatika pada register atau memori

ƒ

Transfer data antara memori dan register

ƒ Load data dari memori ke registerg ƒ Store isi register ke memori

ƒ

Transfer kontrol

ƒ Unconditional jump ke/dari prosedur ƒ Percabangan conditional

(13)

Kode Object

Kode sum

Assembler

ƒ Menerjemahkan .s menjadi .o

0x401040 <sum>: 0x55

0x89 0 5

Menerjemahkan .s menjadi .o

ƒ Membuat kode biner setiap instruksi ƒ Merupakan kode eksekusi yang hampir

lengkap • Total 13 byte 0xe5 0x8b 0x45 0x0c g p

ƒ Belum terdapat hubungan (link) dengan kode dari file berbeda

Linker

Masing2x instruksi tdd 1, 2, or 3 byte Dimulai dari 0x03 0x45 0x08 0x89

ƒ Mengelola referensi antar file

ƒ Menggabungkan dengan static run-time libraries • Dimulai dari alamat 0x401040 0x89 0xec 0x5d 0xc3

ƒ Mis., kode untuk malloc, printf

ƒ Beberapa library merupakan dynamically linked

Li k t j di k tik l i

ƒ Link terjadi ketika program mulai dieksekusi

(14)

Contoh Instruksi Mesin

Kode C

int t = x+y;

ƒ Menjumlahkan dua signed integer

Assembly

ƒ Menjumlahkan 2 bil integer 4 byte

addl 8(%ebp),%eax

ƒ Memiliki instruksi yang sama untuk bilangan signed atau unsigned

ƒ Operand: R i t % Sama dengan ekspresi x += y x: Register %eax y: Memory M[%ebp+8] t: Register %eax R t l d l % x += y

ƒ Return value dalam %eax

Kode Object

ƒ 3 byte instruksi

Di i d l

ƒ Disimpan pada alamat 0x401046

(15)

Disassembling Kode Object

Disassembled

00401040 < sum>:_ 0: 55 push %ebp 1: 89 e5 mov %esp,%ebp 3: 8b 45 0c mov 0xc(%ebp),%eax 6 03 45 08 dd 0 8(% b ) % 6: 03 45 08 add 0x8(%ebp),%eax 9: 89 ec mov %ebp,%esp b: 5d pop %ebp c: c3 ret d: 8d 76 00 lea 0x0(%esi),%esi

Disassembler

objdump -d p

objdump d p

ƒ Perangkat untuk mempelajari kode object

ƒ Menganalisis pola-pola bit dari suatu urutan instruksi ƒ Menghasilkan perkiraan dari kode assembly

ƒ Menghasilkan perkiraan dari kode assembly

(16)

Yang dapat di-Disassembly

% objdump -d WINWORD.EXE

WINWORD.EXE: file format pei-i386 No symbols in "WINWORD.EXE".

Disassembly of section .text: Disassembly of section .text: 30001000 <.text>: 30001000: 55 push %ebp 30001001 8b % % b 30001001: 8b ec mov %esp,%ebp 30001003: 6a ff push $0xffffffff 30001005: 68 90 10 00 30 push $0x30001090 3000100a: 68 91 dc 4c 30 push $0x304cdc91

ƒ

Semua yang dapat diinterpretasikan sebagai kode eksekusi

Di

bl

l j i b t d

i b t d

k

t k i

p $

ƒ

Disassembler mempelajari byte demi byte dan merekonstruksi

(17)

Pengaksesan Data dan Informasi

CPU IA32

(18)

Format Data

Deklarasi C Tipe data GAS

suffix Ukuran (byte) Pada instruksi GAS assembler terdapat satu karakter (suffix)

char byte b 1

short word w 2

int double word l 4

satu karakter (suffix) yang menentukan ukuran operand Mis. instruksi

mov

iliki ti ffi

unsigned double word l 4

long int double word l 4

unsigned long double word l 4

memiliki tiga suffix : ƒ movb (move byte)

ƒ movw (move word)

ƒ movl (move double word)

unsigned long double word l 4

char * double word l 4

float single precision s 4

word)

Instruksi

mov

digunakan untuk memindahkan data ( d t )

double double precision l 8

long double extended precision t 12

Pada CPU Intel istilah “word” digunakan untuk data 16 bit

(move data)

Pada CPU Intel, istilah word digunakan untuk data 16 bit ƒ Data 32 bit dikatakan “double word”

(19)

Register Integer

CPU IA32 memiliki delapan register 32 bit

t k i i t d i t

untuk menyimpan integer dan pointer Register dapat diakses secara 16 bit (word) atau 32 bit (double word)

Empat register pertama dapat diakses Empat register pertama dapat diakses secara 8 bit

Register :

ƒ %eax %ecx %edx %ebx %esi ƒ %eax, %ecx, %edx, %ebx, %esi,

%edi adalah general purpose register ƒ %esp untuk menyimpan stack pointer ƒ %ebp untuk menyimpan%ebp untuk menyimpan base pointerbase pointer ƒ %eax, %ecx, %edx memiliki aturan

save dan restore yang berbeda dengan %ebx, %esi, %edi

(20)

Instruksi Perpindahan Data

Instruksi : Movl Asal,Tujuan;

%eax

%edx

ƒ

Memindahkan 4 byte data

Jenis-jenis operasi

ƒ

Immediate : Data integer konstan

%edx %ecx %ebx

Immediate : Data integer konstan

ƒ Seperti konstanta C, memakai prefiks $ ƒ Contoh : $0x400, $-533

ƒ Kode dalam 1, 2 atau 4 byte

%ebx %esi %edi

ƒ

Register : Satu dari 8 register integer

ƒ %esp dan %ebp disiapkan untuk penggunaan khusus

L i di k t k i t k i

%esp %ebp

ƒ Lainnya digunakan untuk instruksi tertentu

ƒ

Memori : 4 byte berurutan pada memori

ƒ Terdapat berbagai mode pengalamatan ƒ Terdapat berbagai mode pengalamatan

(21)

Kombinasi Operand Instruksi

movl

R

l $0 4 %

%

0 4

Asal Tujuan

Inst

Contoh instruksi

Penjelasan

Imm

Reg

movl $0x4,%ecx

%ecx = 0x4

Mem

movl $-147,(%eax)

M(%eax)= M(0xF)= -147

movl

Reg

Reg

movl %ecx,%edx

%edx = %ecx = 0x4

Mem

movl %eax,(%ecx)

M(%ecx)= M(0x4)= 0xF

M

Mem Reg

movl (%eax),%ebx

%ebx= M(%eax)= -147

Register Memori

ƒ Tidak dapat melakukan transfer

i k i d l t %eax 0xF %ecx 0x4 %edx 0x4 Alamat Isi 0xF -147 0x4 0xF memori ke memori dalam satu

instruksi

(22)

Mode Pengalamatan Sederhana

Indirect

ƒ

Bentuk Umum : (R) Mem[Reg[R]]

ƒ

Register R berisi alamat memori

l (%

) %

%

M(%

)

movl (%ecx),%eax

→ %eax = M(%ecx)

Displacement

Displacement

ƒ

Bentuk Umum : D(R) Mem[Reg[R]+D]

ƒ

Register R berisi awal dari area memori

g

ƒ

Konstanta D menentukan ofset-nya

(23)

Mode Pengalamatan Sederhana

swap:

pushl %ebp

void swap(int *xp, int *yp) { pushl %ebp movl %esp,%ebp pushl %ebx Set Up

Contoh Program : Swap

{ int t0 = *xp; int t1 = *yp; *xp = t1; movl 12(%ebp),%ecx movl 8(%ebp),%edx movl (%ecx),%eax

movl (%edx),%ebx Body *yp = t0; } movl (%edx),%ebx movl %eax,(%edx) movl %ebx,(%ecx) l 4( b ) b movl -4(%ebp),%ebx movl %ebp,%esp popl %ebp ret Finish

(24)

Program Swap

void swap(int *xp, int *yp) { i t t0 *

Stack

int t0 = *xp; int t1 = *yp; *xp = t1; *yp = t0; yp xp 8 12 Ofset yp } xp Rtn adr

Old %ebp %ebp 0

4 8

movl 12(%ebp),%ecx # ecx = yp l 8(% b ) % d # d Register Variabel %ecx yp %edx xp Old %ebx -4

movl 8(%ebp),%edx # edx = xp

movl (%ecx),%eax # eax = *yp (t1) movl (%edx),%ebx # ebx = *xp (t0)

# %edx xp

%eax t1 %ebx t0

(25)

Program Swap

123 456 Alamat 0x124 0 120 456 0x120 0x11c 0x118 %eax 0x120 0x124 8 12 Ofset 0x114 0x110 0 10 yp xp %edx %ecx 0x124 Rtn adr %ebp 0 4 8 0x10c 0x108 0x104 xp %ebx %esi

movl 12(%ebp),%ecx # ecx = yp l 8(% b ) % d # d

-4

0x100 %edi

%esp

%ebp 0x104 movl 8(%ebp),%edx # edx = xp

movl (%ecx),%eax # eax = *yp (t1) movl (%edx),%ebx # ebx = *xp (t0)

# %ebp 0x104

movl %eax,(%edx) # *xp = eax movl %ebx,(%ecx) # *yp = ebx

(26)

Program Swap

123 456 Alamat 0x124 0 120 456 0x120 0x11c 0x118 %eax 0x120 0x124 8 12 Ofset 0x114 0x110 0 10 yp xp %edx %ecx 0x120 0x124 Rtn adr %ebp 0 4 8 0x10c 0x108 0x104 xp %ebx %esi

movl 12(%ebp),%ecx # ecx = yp

l 8(% b ) % d # d -4

0x100 %edi

%esp

%ebp 0x104 movl 8(%ebp),%edx # edx = xp

movl (%ecx),%eax # eax = *yp (t1) movl (%edx),%ebx # ebx = *xp (t0)

# %ebp 0x104

(27)

Program Swap

123 456 Alamat 0x124 0 120 456 0x120 0x11c 0x118 %eax 0x120 0x124 8 12 Ofset 0x114 0x110 0 10 yp xp %edx %ecx 0x124 0x120 0x124 Rtn adr %ebp 0 4 8 0x10c 0x108 0x104 xp %ebx %esi

movl 12(%ebp),%ecx # ecx = yp

l 8(% b ) % d # d

-4

0x100 %edi

%esp

%ebp 0x104 movl 8(%ebp),%edx # edx = xp

movl (%ecx),%eax # eax = *yp (t1) movl (%edx),%ebx # ebx = *xp (t0)

# %ebp 0x104

movl %eax,(%edx) # *xp = eax movl %ebx,(%ecx) # *yp = ebx

(28)

Program Swap

123 456 Alamat 0x124 0 120 456 0x120 0x11c 0x118 %eax 456 0x120 0x124 8 12 Ofset 0x114 0x110 0 10 yp xp %edx %ecx 0x124 0x120 0x124 Rtn adr %ebp 0 4 8 0x10c 0x108 0x104 xp %ebx %esi

movl 12(%ebp),%ecx # ecx = yp l 8(% b ) % d # d

-4

0x100 %edi

%esp

%ebp 0x104 movl 8(%ebp),%edx # edx = xp

movl (%ecx),%eax # eax = *yp (t1)

movl (%edx),%ebx # ebx = *xp (t0) #

%ebp 0x104

(29)

Program Swap

123 456 Alamat 0x124 0 120 456 0x120 0x11c 0x118 %eax 456 0x120 0x124 8 12 Ofset 0x114 0x110 0 10 yp xp %edx %ecx 0x124 0x120 0x124 Rtn adr %ebp 0 4 8 0x10c 0x108 0x104 xp %ebx %esi 123

movl 12(%ebp),%ecx # ecx = yp l 8(% b ) % d # d

-4

0x100 %edi

%esp

%ebp 0x104 movl 8(%ebp),%edx # edx = xp

movl (%ecx),%eax # eax = *yp (t1)

movl (%edx),%ebx # ebx = *xp (t0)

# %ebp 0x104

movl %eax,(%edx) # *xp = eax movl %ebx,(%ecx) # *yp = ebx

(30)

Program Swap

456 456 Alamat 0x124 0 120 456 0x120 0x11c 0x118 %eax 456 0x120 0x124 8 12 Ofset 0x114 0x110 0 10 yp xp %edx %ecx 0x124 0x120 0x124 Rtn adr %ebp 0 4 8 0x10c 0x108 0x104 xp %ebx %esi 123

movl 12(%ebp),%ecx # ecx = yp l 8(% b ) % d # d

-4

0x100 %edi

%esp

%ebp 0x104 movl 8(%ebp),%edx # edx = xp

movl (%ecx),%eax # eax = *yp (t1) movl (%edx),%ebx # ebx = *xp (t0)

#

%ebp 0x104

(31)

Program Swap

456 123 Alamat 0x124 0 120 123 0x120 0x11c 0x118 %eax 456 0x120 0x124 8 12 Ofset 0x114 0x110 0 10 yp xp %edx %ecx 0x124 0x120 0x124 Rtn adr %ebp 0 4 8 0x10c 0x108 0x104 xp %ebx %esi 123

movl 12(%ebp),%ecx # ecx = yp l 8(% b ) % d # d

-4

0x100 %edi

%esp

%ebp 0x104 movl 8(%ebp),%edx # edx = xp

movl (%ecx),%eax # eax = *yp (t1) movl (%edx),%ebx # ebx = *xp (t0)

# %ebp 0x104

movl %eax,(%edx) # *xp = eax

(32)

Mode Pengalamatan Berindeks

Bentuk umum :

D(Rb,Ri,S)

Mem[Reg[Rb]+S*Reg[Ri]+ D]

D

K t t “di l

t” 1 2 t

4 b t

ƒ

D:

Kontanta “displacement” 1, 2, atau 4 byte

ƒ

Rb:

Base register: Salah satu dari 8 register integer

ƒ

Ri:

Index register: Salah satu register, kecuali %esp

ƒ

S:

Skala : 1, 2, 4, or 8

Kasus khusus :

ƒ

(Rb Ri)

Mem[Reg[Rb]+Reg[Ri]]

ƒ

(Rb,Ri)

Mem[Reg[Rb]+Reg[Ri]]

ƒ

D(Rb,Ri)

Mem[Reg[Rb]+Reg[Ri]+D]

ƒ

(Rb,Ri,S)

Mem[Reg[Rb]+S*Reg[Ri]]

(33)

Contoh Perhitungan Alamat

%edx 0xf000 %ecx 0x100

Ek

i

P hit

Al

t

B

t k

Ekspresi

Perhitungan

Alamat

Bentuk

0x8(%edx)

0xf000 + 0x8

0xf008

D(Rb)

(%edx,%ecx)

0xf000 + 0x100

0xf100

(Rb,Ri)

(%edx %ecx 4)

0xf000 + 4*0x100

0xf400

(Rb Ri S)

(%edx,%ecx,4)

0xf000 + 4*0x100

0xf400

(Rb,Ri,S)

0x80(,%edx,2)

2*0xf000 + 0x80

0x1e080

D(Rb,Ri,S)

(34)

Instruksi Perhitungan Alamat

Instruksi :

l

leal

Asal

,

Tujuan

ƒ

Asal

adalah ekspresi mode alamat

M

t

T j

j di l

t

dit t k

l h k

i

ƒ

Men-set Tujuan

menjadi alamat yang ditentukan oleh ekspresi

tersebut

Mis. Isi register %edx = x, maka instruksi

g

,

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

berarti %eax = x+4x+7 = 5x+7

Penggunaan

gg

1.

Menghitung alamat tanpa melakukan referensi memori

ƒ Contoh: p = &x[i];

2.

Menghitung ekspresi aritmatika

C h k*

(35)

Ekspresi Aritmatika leal

int arith

(int x, int y, int z) arith: { int t1 = x+y; int t2 = z+t1; int t3 = x+4; pushl %ebp movl %esp,%ebp movl 8(%ebp),%eax Set Up int t3 x+4; int t4 = y * 48; int t5 = t3 + t4; int rval = t2 * t5; l movl 8(%ebp),%eax movl 12(%ebp),%edx leal (%edx,%eax),%ecx leal (%edx,%edx,2),%edx ll $4 % d Body return rval; } sall $4,%edx addl 16(%ebp),%ecx leal 4(%edx,%eax),%eax imull %ecx,%eax Body R i V i b l , movl %ebp,%esp popl %ebp ret Finish Register Variabel %edx y %eax x ret

(36)

Beberapa Operasi Aritmatika

Instruksi dengan dua operand

g

p

addl Asal,Tujuan

Tujuan

= Tujuan

+ Asal

bl

Asal Tujuan

Tujuan

Tujuan

Asal

subl Asal,Tujuan Tujuan

= Tujuan

-

Asal

imull

Asal,Tujuan Tujuan

= Tujuan

* Asal

sall Asal,Tujuan Tujuan

= Tujuan

<< Asal

(disebut juga shll)

sarl

Asal,Tujuan Tujuan

=

Tujuan

>>

Asal

(Operasi aritmatika)

shrl Asal,Tujuan Tujuan

= Tujuan

>> Asal

(Operasi logika)

xorl Asal,Tujuan Tujuan

,

j

j

= Tujuan

j

^ Asal

andl Asal,Tujuan Tujuan

= Tujuan

& Asal

orl Asal,Tujuan Tujuan

= Tujuan

| Asal

(37)

Beberapa Operasi Aritmatika

Instruksi dengan satu operand

g

p

incl

Tujuan

Tujuan

=

Tujuan

+ 1

decl

Tujuan

Tujuan

=

Tujuan

- 1

decl

Tujuan

Tujuan

= Tujuan

1

negl

Tujuan Tujuan

= -

Tujuan

notl

Tujuan Tujuan

= ~ Tujuan

(38)

Penjelasan Fungsi arith

int arith

(int x, int y, int z) {

Stack

int t1 = x+y; int t2 = z+t1; int t3 = x+4; int t4 = y * 48; Ofset ••

Stack

z 16 int t4 y 48; int t5 = t3 + t4; int rval = t2 * t5; return rval; } y x Rtn adr 4 8 12 }

movl 8(%ebp),%eax # eax = x movl 12(%ebp),%edx # edx = y

Old %ebp %ebp 0

leal (%edx,%eax),%ecx # ecx = x+y (t1) leal (%edx,%edx,2),%edx # edx = 3*y

sall $4,%edx # edx = 48*y (t4) addl 16(%ebp),%ecx # ecx = z+t1 (t2) addl 16(%ebp),%ecx # ecx z+t1 (t2) leal 4(%edx,%eax),%eax # eax = 4+t4+x (t5)

(39)

Penjelasan Fungsi arith

# eax = x

int arith

(int x, int y, int z) { movl 8(%ebp),%eax # edx = y movl 12(%ebp),%edx # ecx = x+y (t1) { int t1 = x+y; int t2 = z+t1; int t3 = x+4; # ecx x+y (t1) leal (%edx,%eax),%ecx # edx = 3*y leal (%edx,%edx,2),%edx # d 48* (t4) int t4 = y * 48; int t5 = t3 + t4; int rval = t2 * t5; return rval; # edx = 48*y (t4) sall $4,%edx # ecx = z+t1 (t2) addl 16(%ebp),%ecx return rval; } p , # eax = 4+t4+x (t5) leal 4(%edx,%eax),%eax # eax = t5*t2 (rval)

imull %ecx %eax imull %ecx,%eax

(40)

Contoh Lain

int logical(int x, int y)

logical:

pushl %ebp Set U { int t1 = x^y; int t2 = t1 >> 17; int mask = (1<<13) - 7; movl %esp,%ebp movl 8(%ebp),%eax xorl 12(%ebp),%eax Up int mask = (1<<13) 7; int rval = t2 & mask; return rval; } xorl 12(%ebp),%eax sarl $17,%eax andl $8185,%eax l % b % Body movl %ebp,%esp popl %ebp ret Finish 213 = 8192, 213 – 7 = 8185

movl 8(%ebp),%eax eax = x

xorl 12(%ebp),%eax eax = x^y (t1) sarl $17 %eax eax = t1>>17 (t2) sarl $17,%eax eax = t1>>17 (t2) andl $8185,%eax eax = t2 & 8185

(41)

Ringkasan

Sifat-sifat CISC

Instruksi dapat mereferensikan jenis-jenis operand yang

berbeda

ƒ

Immediate, register, memory

O

k d

b

l k

Operasi aritmatika dapat membaca atau menulis ke

memori

Komputasi untuk mereferensikan memori dapat

dil k k

k

l k

dilakukan secara kompleks

ƒ

Rb + S*Ri + D

ƒ

Dapat digunakan juga pada ekspresi matematika

S t i t k i d

t

iliki

j

b b d

Suatu instruksi dapat memiliki panjang yang

berbeda-beda

(42)

Ringkasan

Model Mesin

Data

Kontrol

1) loops 2) conditionals 3) switch

Data

Kontrol

1) char 2) int, float 3) double memori prosesor

C

3) switch 4) Proc. call 5) Proc. return 3) double 4) struct, array 5) pointer p

Assembly

1) byte 1) branch/jump 2) 2-byte word

3) 4-byte long word

4) contiguous byte allocation 5) address of initial byte

2) call 3) ret mem regs alu

prosesor Stack Cond.

C d prosesor 5) address of initial byte Codes

Referensi

Dokumen terkait

Pengembangan PKW melalui peningkatan fungsi industri pengolahan dan industri jasa hasil hutan yang bernilai tambah tinggi dan ramah lingkungan dilakukan di PKW Tegal dan

Penilaian unjuk kerja merupakan penilaian yang dilakukan dengan mengamati kegiatan peserta didik dalam melakukan sesuatu. Penilaian ini cocok digunakan untuk

Oleh karena itu, pantai- pantai yang rawan gempa bumi dan tsunami adalah pantai-pantai yang berhadapan dengan daerah penunjangan (subduksi) antara dua lempengan taktonik

+ INDONESIAN FCPF CARBON FUND: Program Pengurangan Emisi Berbasis Lahan di Kalimantan Timur JAKARTA, 29 APRIL 2016... + Konteks Strategis dan Latar

PUSAT KAJIAN SUMBERDAYA PESISIR DAN LAUTAN INSTITUT PERTANIAN BOGOR.. PENGANTAR EKONOMI

Selain berkomunikasi dengan antar pengguna jalan lain menggunakan isyarat lampu dan isyarat suara para awak bus seperti asisten pengemudi (kernet),dan kondektur pun

Penelitian ini bertujuan untuk mengetahui apakah terdapat pengaruh signifikan pada penerapan penerapan e-SPT PPN, e-Faktur, dan Sanksi Administrasi terhadap tingkat kepatuhan

memberikan percobaan gratis secara cuma – cuma kepada konsumen yang tujuannya untuk memberikan gambaran baik dalam manfaat, rupa, ataupun bau dari produk yang dipromosikan,