Rabu, 27 November 2013

Mengenal Syntax Assembly AT&T


Syntax selalu berbeda pada setiap bahasa pemrograman, tetapi kadang kala juga terdapat perbedaan pada sebuah bahasa pemrograman yang sama. Contohnya adalah asembly yang memiliki 2 macam syntax, yaitu Intel dan AT&T. 
Syntax Intel sering dipakai pada lingkungan sistem operasi Windows, jadi sudah banyak yang mengenalnya. Bagaimana dengan syntax AT&T? Syntax AT&T sering digunakan pada system operasi Unix dan sebangsanya, seperti Linux dan BSD. Penulisan syntax AT&T membutuhkan prefix, hal ini dimaksudkan untuk mempermudah compiler menerjemahkan kode menjadi biner. Ini membuatnya kurang disukai oleh programmer, karena dinilai kurang praktis dalam penulisannya. Contoh compiler yang menyediakan syntax AT&T adalah Gas(GNU Assembler).


Prefix

Prefix adalah symbol atau tanda yang dipakai untuk menentukan jenis instruksi dan operand.

Prefix pada Instruksi

Penggunaan prefix wajib ditulis pada setiap instruksi yang memiliki operand, misalnya MOV, INC dan ADD. Prefix diletakkan didepan instruksi dan huruf prefixnya ditentukan oleh jenis operasi yang digunakan oleh instruksi. Prefix pada instruksi AT&T antara lain adalah, B untuk operasi BYTE, W untuk WORD dan L untuk LONG(DOUBLEWORD).

  • Prefix pada register

Register yang akan kita akses harus diawali dengan karakter “%”, misalnya, %EAX, %EBP dan %AL.

  • Prefix pada angka

Penulisan angka harus diawali dengan prefix karakter dollar “$”, misalnya, $1, $12, $0x100, $0xff dan $0x1b.


Symbol

Beberapa symbol pada syntax AT&T berbeda dengan syntax Intel, untuk melihat perbedaannya lihat Contoh di bagian bawah.


Operand

Penulisan operand juga berbeda dengan syntax Intel, operand pada syntax AT&T berbalik dari syntax Intel.


Contoh

Untuk memahami semua penjelasan di atas, lihat tabel contoh di bawah ini dengan seksama.

Intel AT&T
clc clc
Inc al Incb %al
mov al, bh movb %bh,%al
mov ax,dx movw %dx,%ax
mov eax,ebx movl %ebx,%eax
mov eax,1000 movl $1000,%eax
mov eax,[edi] movl [%edi],%eax
mov eax,[edi + 4] movl 4[%edi],%eax
mov eax,[edi – 5] movl -5[%edi],%eax

Load disqus comments

0 comments