<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Together.. &#187; Program Lain</title>
	<atom:link href="http://www.havetogether.com/category/komputer/program-lain/feed" rel="self" type="application/rss+xml" />
	<link>http://www.havetogether.com</link>
	<description></description>
	<lastBuildDate>Tue, 04 Oct 2011 08:13:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Bahasa Assembler</title>
		<link>http://www.havetogether.com/bahasa-assembler.html</link>
		<comments>http://www.havetogether.com/bahasa-assembler.html#comments</comments>
		<pubDate>Sat, 26 Dec 2009 23:08:51 +0000</pubDate>
		<dc:creator>rumono</dc:creator>
				<category><![CDATA[Program Lain]]></category>
		<category><![CDATA[bahasa pemrograman]]></category>

		<guid isPermaLink="false">http://www.havetogether.com/?p=290</guid>
		<description><![CDATA[Bahasa Assembler memakai kode Mnemonic untuk menggantikan kode biner, agar lebih mudah diingat sehingga lebih memudahkan penulisan program..]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Bahasa Assembler adalah bahasa komputer yang kedudukannya berada di antara bahasa mesin dan bahasa level tinggi misalnya bahasa Delphi. Bahasa Delphi dikatakan sebagai bahasa level tinggi karena memakai kata-kata dan pernyataan yang mudah dimengerti manusia. Bahasa mesin adalah kumpulan kode biner yang merupakan instruksi yang bisa dijalankan oleh komputer. Sedangkan bahasa Assembler memakai kode Mnemonic untuk menggantikan kode biner, agar lebih mudah diingat sehingga lebih memudahkan penulisan program.</p>
<p style="text-align: justify;">Bentuk umum dari suatu pernyataan dalam bahasa Assembler adalah kode operasi diikuti dengan operand-nya. Kode operasi adalah perintah yang akan dilaksanakan dan ditulis dalam mnemonic, sedangkan operand dapat berupa sumber (<em>source</em>) dan tujuan (<em>destination</em>) alamat atau data.</p>
<p style="text-align: justify;">1. <strong>Definisi <em>Stack</em></strong><br />
Secara harfiah <em>stack</em> berarti tumpukan, yaitu bagian memori yang digunakan untuk menyimpan nilai suatu register untuk sementara, membentuk tumpukan nilai. <em>Stack</em> dapat dibayangkan sebagai tabung memanjang (seperti tabung penyimpan koin). Sedangkan nilai suatu register dapat dibayangkan sebagai koin yang dapat dimasukkan dalam tabung tersebut. Jika ada data yang disimpan maka data-data tersebut akan bergeser ke arah memori rendah, dan akan bergeser kembali ke arah memori tinggi bila data yang disimpan telah diambil.</p>
<p style="text-align: justify;">2. <strong>Perintah Perpindahan Data</strong><br />
Terkait perpindahan data, bahasa assembler mempunyai beberapa perintah yang dapat dibedakan yaitu untuk memindahkan data tunggal seperti huruf atau angka dan untuk memindahkan data string yang berupa deretan huruf. Tetapi di sini hanya akan menjelaskan beberapa perintah yang dipakai dalam aplikasi.</p>
<p style="text-align: justify;">2.1. <strong>PUSH/POP</strong><br />
<em>Syntax :</em></p>
<pre style="padding-left: 30px;">PUSH Reg16Bit
POP Reg16Bit</pre>
<p style="text-align: justify;">PUSH adalah perintah penyimpanan data ke memori <em>stack</em> secara langsung, dan untuk mengambil keluar nilai yang disimpan tersebut gunakan perintah POP. Nilai terakhir yang dimasukkan dalam <em>stack</em>, dengan perintah PUSH, akan terletak pada puncak tabung <em>stack</em>. Dan perintah POP pertama kali akan mengambil nilai pada <em>stack</em> yang paling atas kemudian nilai berikutnya, demikian seterusnya. Jadi nilai yang terakhir dimasukkan akan merupakan yang pertama dikeluarkan. Operasi ini dinamakan LIFO (<em>Last In First Out</em>). Perhatikan contoh berikut ini:</p>
<pre style="padding-left: 30px;">push ax;
push bx;
push cx;
mov ax, $31C;
mov bx; $31D;
mov cx, $31E;
pop cx;
pop bx;
pop ax;</pre>
<p>2.2. <strong>MOV</strong><br />
<em>Syntax :</em></p>
<pre style="padding-left: 30px;">MOV destination, source</pre>
<p style="text-align: justify;">Digunakan untuk menyalin data dari memori/register ke memori/register atau dari data langsung ke register. Nilai pada <em>source</em> yang dipindahkan tidaklah berubah. Pada contoh di bawah, <strong>register al</strong> diberi nilai <strong>$31C</strong> kemudian nilai <strong>register al</strong> disalin ke <strong>register ax</strong>. Jadi sekarang nilai <strong>register al</strong> dan <strong>register ax</strong> adalah <strong>$31C</strong>.</p>
<pre style="padding-left: 30px;">mov al, $31C;
mov ax, al;</pre>
<p style="text-align: justify;">Hal-hal yang tidak boleh dilakukan dalam penyalinan data:</p>
<p style="text-align: justify;">a. Penyalinan data antarregister segmen (ds, es, cs, ss)</p>
<pre style="text-align: justify; padding-left: 30px;">mov ds, es ? tidak dibenarkan</pre>
<p>Gunakan register general, misalnya register ax, sebagai perantara</p>
<pre style="text-align: justify; padding-left: 30px;">mov ax, es
mov ds, ax</pre>
<p style="text-align: justify;">atau gunakan <em>stack</em> sebagai perantara</p>
<pre style="text-align: justify; padding-left: 30px;">push es
pop ds</pre>
<p style="text-align: justify;">b. Penyalinan data secara langsung untuk register segmen (ds, es, cs, ss)</p>
<pre style="text-align: justify; padding-left: 30px;">mov ds, $31C ? tidak dibenarkan</pre>
<p style="text-align: justify;">Gunakan register general, misalnya register ax, sebagai perantara</p>
<pre style="text-align: justify; padding-left: 30px;">mov ax, $31C
mov ds, ax</pre>
<p style="text-align: justify;">c. Penyalinan data langsung antarmemori</p>
<pre style="text-align: justify; padding-left: 30px;">mov memB, memA ? tidak dibenarkan</pre>
<p style="text-align: justify;">Gunakan register general, misalnya register ax, sebagai perantara</p>
<pre style="padding-left: 30px;">mov ax, memA
mov memB, ax</pre>
<p style="text-align: justify;">d. Penyalinan data antarregister general yang berbeda daya tampungnya (8 bit dengan 16 bit) tanpa pointer</p>
<pre style="text-align: justify; padding-left: 30px;">mov al, bx ? tidak dibenarkan</pre>
<p style="text-align: justify;">2.3. <strong>IN/OUT</strong><br />
<em>Syntax :</em></p>
<pre style="text-align: justify; padding-left: 30px;">IN Reg16Bit, port
OUT port, Reg16Bit</pre>
<p style="text-align: justify;">Untuk membaca data dari suatu port dan memasukkan nilainya ke dalam suatu register gunakan perintah IN. Dan perintah OUT digunakan untuk memasukkan suatu nilai ke dalam suatu port. Nilai yang akan dimasukkan diberikan pada register al/ax dan alamat port diberikan pada register dx. Pada contoh berikut ini, pertama kali <strong>register dx</strong> disimpan pada <em>stack</em>, menyalin nilai <strong>$31E</strong> pada <strong>register dx</strong> kemudian perintah IN akan membaca nilai pada <strong>register dx</strong> (port bernilai $31E) dan memasukkannya ke dalam <strong>register al</strong>. Dan terakhir nilai tersebut disalin ke <strong>variabel Data</strong>.</p>
<pre style="text-align: justify; padding-left: 30px;">push dx
mov dx, $31E
in al, dx
mov Data, al
pop dx</pre>
<p style="text-align: justify;">Dan contoh berikut untuk memberi nilai ($8A) pada suatu port.</p>
<pre style="text-align: justify; padding-left: 30px;">push dx
mov dx, $31E
mov al, $8A
out dx, al
pop dx</pre>
<p>3. <strong>Operasi Aritmatika</strong><br />
3.1. <strong>Penjumlahan</strong><br />
<em>Syntax :</em></p>
<pre style="padding-left: 30px;">ADD destination, source
ADC destination, source
INC destination</pre>
<p style="text-align: justify;">Perintah ADD akan menjumlahkan nilai pada <strong>destination</strong> dan <strong>source</strong> tanpa menggunakan <strong>carry (ADD)</strong>, dimana hasil yang didapat akan ditaruh pada <strong>destination</strong>. Dalam bahasa pascal pernyataan ini sama dengan pernyataan <strong>destination := destination + source</strong>. Daya tampung <strong>destination</strong> dan <strong>source</strong> harus sama misalnya register al (8 bit) dan ah (8 bit), ax (16 bit) dan bx (16 bit). Perhatikan contoh berikut, nilai <strong>register ah</strong> sekarang menjadi <strong>$10</strong> :</p>
<pre style="text-align: justify; padding-left: 30px;">mov ah, $5;
mov al, $8;
add ah, al</pre>
<p style="text-align: justify;">Perintah ADC digunakan untuk menangani penjumlahan dengan hasil yang melebihi daya tampung <strong>destination</strong> yaitu dengan menggunakan <strong>carry (ADD)</strong>, dalam bahasa pascal sama dengan pernyataan <strong>destination := destination + source + carry</strong>. Misalnya <strong>register ax</strong> (daya tampung 16 bit) diberi nilai <strong>$1234</strong> dan <strong>bx</strong> (16 bit) diberi nilai <strong>$F221</strong>, penjumlahan kedua register ini adalah <strong>$10455</strong>. Jadi ada bit ke 17 padahal daya tampung register bx hanya 16 bit, penyelesaiannya adalah nilai <strong>bx = $0455</strong> dengan <strong>carry flag = 1</strong>.</p>
<p style="text-align: justify;">Perintah INC digunakan untuk operasi penjumlahan dengan nilai 1. Jadi nilai pada destination akan ditambah 1, seperti perintah <strong>destination := destination + 1</strong> dalam bahasa Pascal.</p>
<p style="text-align: justify;">3.2. <strong>Pengurangan</strong><br />
<em>Syntax :</em></p>
<pre style="text-align: justify; padding-left: 30px;">SUB destination, source
SBB destination, source
DEC destination</pre>
<p style="text-align: justify;">Perintah SUB untuk mengurangkan 2 operand tanpa carry flag. Hasilnya diletakkan pada destination dalam bahasa pasca sama dengan pernyataan <strong>destination := destination – source</strong>. Untuk mengenolkan suatu register, kurangkan dengan dirinya sendiri seperti contoh berikut ini. Pertama kali <strong>register ax</strong> bernilai <strong>$5</strong>, kemudian nilai register tersebut dikurangi dengan dirinya sendiri sehingga terakhir nilai <strong>register ax</strong> adalah <strong>0</strong>.</p>
<pre style="text-align: justify; padding-left: 30px;">mov ax, $15;
mov bx, $10;
sub ax, bx;
sub ax, ax;</pre>
<p style="text-align: justify;">Perintah SBB mengurangkan nilai destination dengan nilai source kemudian dikurangi lagi dengan carry flag (<strong>destination := destination – source – carry flag</strong>).</p>
<p style="text-align: justify;">Dan perintah DEC untuk mengurangi nilai destination dengan 1.</p>
<p style="text-align: justify;">3.3. <strong>Perkalian</strong><br />
<em>Syntax :</em></p>
<pre style="text-align: justify; padding-left: 30px;">MUL source</pre>
<p style="text-align: justify;">Digunakan untuk mengalikan data pada accumulator dengan suatu operand dan hasilnya diletak pada register source. <strong>Register source</strong> dapat berupa suatu register 8 bit (misal bl, bh, dan sebagainya), register 16 bit (bx, dx, dan sebagainya) atau suatu variabel.</p>
<p style="text-align: justify;">3.4. <strong>Pembagian</strong><br />
<em>Syntax :</em></p>
<pre style="text-align: justify; padding-left: 30px;">DIV source</pre>
<p style="text-align: justify;">Operasi aritmatika ini pada dasarnya sama dengan operasi perkalian.</p>
<p style="text-align: justify;">Nuwun..</p>
]]></content:encoded>
			<wfw:commentRss>http://www.havetogether.com/bahasa-assembler.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

