Rabu, 22 Juni 2011

TEKNIK PENGKODEAN SINYAL

Data Digital, Sinyal – sinyal Digital
                        Sebuah data digital adalah serangkain pulsa tegangan diskrit yang mana masing – masing pulsa adalah sebuah elemen sinyal yang dittransmisikan dengan mengkodekan setiap bit data ke dalam elemen – elemen sinyal. Elemen sinyal unipolar adalah elemen – elemen sinyal yang memiliki tanda alajabar yang sama yaitu positif atau negative. Pada pensinyalan polar satu kondisi logika dipresentasikan oleh tingkat tegangan positif dan juga dengan  tingkat tegangan negative. Pada kecepatan pensinyalan data atau kecepatan data, dari sebuah sinyal adalah kecepatan dalam bit per detik di mana data di transmisikan. Durasi panjang bit adalah jumalah waktu yang diperlukan untuk transmitter dalam memancarkan bit, untuk kecepatan data adalah R dan durasi bit adalah 1/R. Sebaliknya kecepatan modulasi adalah kecepatan dimana tingkat sinyal diubah.
                        Berikut adalah beberapa factor yang mempengaruhi suksenya penerima dalam menginterpretasikan sinyal yang dating.:
·         Peningkatan dalam kecepatan data meningkatkan laju kesalahan bit (bit eror rate - BER)
·         Peningkatan SNR menurunkan laju kesalahan bit.
·         Peningkatan bandwidth memungkinkan peningkatan dalam kecepatan data.

2.1.1    Nonreturn To Zero (NRZ)
                        Cara yang paling umum dan mudah untuk mentrasmisikan sinyal – sinyal digital adalah menggunakan tingkat tegangan berbeda untuk dua digit biner. Kode – kode yang mengikuti strategi ini berbagi sifat bahwa tingkat tegangan tersebut itu konstan selama interval bit tidak ada transisi (tidak ada yang kembali ke tingkat tegangan nol).
·         NRZ-L adalah kode umum yang digunakan untuk menghasilkan atau menginterpresentasikan data digital denangan terminal dan perangkat – perangkat lain.
·         NRZ-I adalah sebuah contoh pengkodean difrensial, pada pengkodean ini informasi yang akan ditransmisikan diwakili dengan istilah perubahan yang berturut – turut dari elemen – elemen sinyal, buakn elemen sinyal itu sendiri. Jika bit sekarang adalah biner  0 maka bit sekarang sama dikodekan dengan sinyal sebelumnya, jika bit sekarang bernilai 1 maka sinyalnya berbeda denga  bit sebelmnya. Adapun keuntungan dari pengkodean difrensial adalah lebih dapat di andalkan untuk mendeteksi sebuah transisi dari kehadiran noise dari pada membandingkan sebuah nilai dengan amabang batas, dan dalam rancangan yang rumit semakin mudah kita menghilangkan polaritas dari sinyal tersebut.

2.1.2    Biner Multitingkat
                        Sebuah kategori dari teknik – teknik pengkodean dikenal sebagai biner multitingkat yang menunujuk beberapa kekurangan dari kode – kode NRZ, ini digunakan pada lebih dari dua tingkat sinyal. Pada kasus skema bipolar –AMI sebuah biner 0 diwakili dengan tidak ada saluran sinyal dan biner 1 diwakili dengan pulsa negative atau positf.  Pada kasus Pseudotenary adalah biner 1 yang diwakili oleh tidak adanya sinyal dan biner 0 diwakili oleh tgidak adanya saluran sinyal dan biner 0 diwakili dengan pergantian pulsa positif dan negative. Dalam pengkodean ini masih menghasilkan string yang sangat panjang dari 0 dalam kasus AMI atau I. Maka diadakan pendekatan untuk mengatasi masalh tersebut diantarnya adalah menyisipkan bit – bit tambahan yang memaksa transisi (ISDN intergrated service digital network / njaringan tepadu) untuk kecepatan transmisi yang renadah.

2.1.3    Biphase
                        Terdapat dua peranngkat lain teknik – teknik pengkodean sinyal yang di kelompokan dalam istilah biphase yang mengatasi kelmahan tersebut yaitu:
Manchester terdapat sebuah transmisi di pertengahan masing – masing periode bit yang mana berperan sebagai mekanisme clocking dan juga sebagai data rendah ke tinggi mewakili 1, dan transisi tinggi ke rendsh mewakili 0.  Pada dofrensial Manchester transisi midbit digunakan hanya untuk menyediakan clocking.
Adapun keuntungan dari biphase antara lain :
·         Sinkronisasi pada setiap waktu  bit penerima yang di kenal dengan kode self clocking.
·         tidak ada komponen dc.
·         Deteksi kesalahan, tidak adanya transisi yang diharapkn dapat digunakan untuk mendeteksi keslahan.



2.1.4    Kecepatan Modulasi
                        Ketika teknik pengkodean sinyal digunakan perbedaan perlu dibuat antara kecepatan data (dinyatakan bit per detik) dan kecepatan modulasi (dinytakan dalam baud). Kevepatan modulasi adalah kecepatan dari elemen – e lemen sinyal di buat. Adapun cara untuk mengkarakteristikan kecepatan modulasi adalah menentukan rata – rata jumlah yang terjadi perwaktubit.

2.1.5    Teknik – Teknik Scrambling
                        Pendekatan lain adalah dengan menggunakan beberapa jenis scrambling. Yang  maana urutan yang digunakan akan menghasilkan tingakat teganagan pada jalur tersebut digantikan dengan mengisisi yang akan memeberikan transisi yang cukup waktu penerima sehingga singkronisasi dapat di pertahankan, yang mana urutan tersebut harus di kenali oleh penerima dan di gantiakan oleh urutan data sebenarnya.
Adapun tujuan dari desain ini adalah :
·         Tidak ada komponen dc
·         Tidak ada urutan jauh dari sinyal saluran tingkat nol.
·         Tidak ada pengurangan dalam kecepatan data.
·         Kemampuan deteksi kesalan.

Adapun aturan untuk mengatasi permasalhan dalm tehnik scrambling adalah
·         Jika sebuah octet dari semua nol terjadi dan pulsa tegangan akhir yang mendahului octet ini adalah positif maka delapan nol dari octet dikodekan sebagai 000+-0-+.
·         Jika sebuah octet dari semua nol terjadi dan pulsa tegangan terakhir yang mendahului octet ini adalah negative maka delapan nol dari octet ini akn di kodekan sebagai 000 - +0+-.







2.2       Data Digital, Sinyal – Sinyal Analog
                        Penggunaan paling umum dari trasnformassi ini adalah mentrasnmisikan  data digial melalui jaringan telepon umum.

2.2.1    Amlpitude Shift Keying
                        Pada phase ini dua nilai biner dipresentasikan oleh dua almplitudo yang berbeda dari frekuensi pembawa. Biasanya amplitude adalah nol yaitu satu didgit biner dipresenasikan oleh kehadiran pembawa, pada amplitude konstan sedangkan yang lainya di presentasikan dengan tidak adanya pembawa.

2.2.2    Frekuensi Shift Keying
                        Bentuk yang paling umum adalah FSK Biner (Binary FSK - BFSK) dimana nilai dua biner dipresentasikan oleh dua frekuensi pembawa. Efek dari penggantian antara dua frekuensi tersebut adalah untuk menghasilkan sebuah sinyal yang spektrumnya diindikasikan sebagai daerah berabayang di sisi sebelah kir.

2.2.3    Phase shift Keying
                        PSK dua Level skema paling sederhana yang mengguanakan dua fase untuk mewakili dua digit biner dan dikenal sebagai binery Phase Shift Keying. PSK empat level penggunaan bandwidth yang lebih efisien dapat di capai jika setiap elemenn pensinyalan ,erepresentasikan lebih dari satu bit. PSK multilevel penggunaan dari banayak level dapat diperluas lebih dari mengambil dua bit dalam satu bit dalam satu waktu.

2.2.4    Quadratur Amplitude Modulation
                        Adalah tehnik pensinyalan analog yang popular digunakan dalam jalur pelnggan asimetris (asymmetric digital subscriber line - ASDL) dan beberap standar nirkabel. Teknik modulasi ini merupakan kombinasi dari ASK dan PSK. Phase ini memanfaatkan keuntungan dari fakta bahwa suatu hal yang mungkin untuk mengirimkan dua snyal yang berbeda





2.3       Data Analog Sinyal – Sinyal Digital
                        Suatu proses yang mengubah data analog ke data digital preses ini dikenal sebagai digitasi. Ketika data analog telah di konversi dalam  data digital sejumlah hal dapat terjadi diantaranya sebagai berikut :
1.      Data digital dapat dittransmisikan mengunakan NRZ – L.
2.      Data digital dapat dikodekan sebagai sebuah sinyal digital mengunakan sebuah kode yang berbeda dari NRZ -  L, yang akan memburuhkan langkah tambahan.
3.      Data digital dapat dikonversikan ke dalam sinyal analog menggunakan satu teknik – teknik dari modulasi.

Adapun efek dari proses ini adalah kesalahan kuatitansi (quantizing error) atau  noze kuantitasi (quantizing noize). Biasanya skema PCM di perhalus menggunakan teknik yang disebut pengkodean tidak linear, artinya bahwa tingkat – tingkat kuantifikasi tidak diberlakukan sama. Permasalaahn yang dapat diperlakukan adalah membuat rata – rata kesalahan absolute untuk setiap sampel yang sama tanpa memperhatikan tingkat sinyal. Efek yang sama dapat dicapai dengan menggunakan kuitansi seragam tetapi juga melakukan companding (compressing – expending  ) dari sinyal analog input. Comanding adalah proses penekanan jangkauan intensitas sinyal dengan menambahkan penguat pada sinyal – sinyal yang lemah dibandingkan sinyal – sinyal yang kuat pada input.

2.3.1    Modulasi Delta
                        Salah satu alternative yang paling dari PCM adalah modulasi delta (delta modulation – Dm ). Dengan modulasi deltasebuah input analog diaprokasikan dengan sebuah  fungsi tangga yang bergerak dengan  naik turun dengan satu tingkat kuitansi pada masing – masing interval sampling. Output dari proses modulasi delta dapat diwakili sebagai digit biner tunggal untuk setiap sampel.sebuah aliran bit dihasilkan dengan mengaprosikamasi turun dari sinyal analog bukan amplitudonya sebuah 1 dihasilkan jika fungsi tangga itu naik selama interval selanjutnya sebuah 0 dihasilkan jika sebaliknya.





2.4       Data analog Sinyal Analog
                        Terdaapat dua alasan penting modulasi analog ke sinyal analog :
·         Frekuinsi yang dibutuhkan jujntuk transmisi efektif. Untuk  transmisi yang tak terkendali secara maya tidak mungkin mentransmisikan sinyal baseband karena antenna – antenna yang dibutuhkan harus memiliki diameter berkilo – kilo meter.
·         Modulasi memperbolehkan frequency division multiplexing, sebuah tehnik penting yang dibahas secara terperinci.

2.4.1    Modulasi Amplitudo
                        Adalah bentuk yang paling sederhana dari modulasi yang di gunakan secara sistematis. Indeks Modulasi rasio amplitude dari input sinyal pembawa. Prinsip keuntungan dari pendekatan ini sebagai berikut.
·         Hanya setengah dari luas bidang diperlukan.
·         Daya berkurang diperlukan karena tidak ada daya yang digunakan untuk mentransmisi pembawa atau sisi band lainya.

Kerugian dari menindas pembawa adalah pembawa akan dapat digunakan untuk mensikronisasikan tujuan

teori penunjang

Pemrograman dengan basis bahasa assembly, bisa digunakan untuk mencetak satu atau lebih karakter beserta atributnya. Pada pratikum POK (Pengantar Organisasi Komputer) menggunakan emulator 8086  dan modul pratikum yang digunakan dalam pembelajaran.
Pada bahasa assembly code atau fungsi di sebut dengan register. Di dalam bahasa assembly banyak register yang berfungsi untuk menampilkan sebuah karakter atau lebih beserta attributnya. Misal :
     AH       : Untuk Memberi Nilai Servis pada karakter yang akan di cetak.
                   Contoh : AH, 02h;
     DL /AL : Untuk mencetak Karakter.
                   Contoh : MOV DL, ‘A’;  / MOV AL ‘A’;
     BH       : Nomor halaman.
                   Contoh : MOV BH,00h;
     BL        : Atribut atau warna dari karakter yang akan di cetak
                   Contoh : BL,93h;

Seperti pada bahasa pemrograman lainya pada bahasa assembly juga bisa dilakukan pencetakan karakter lebih dari satu. Fungsi yang digunakan pada praktikum kali ini adalah fungsi LOOP, dimana assembler akan melakukan perulangan pada karakter yang akan di cetak. Didalam fungsi LOOP harus disertakan register CX yaitu untuk menentukan banyaknya perulangan yang akan dilakukan. Register CX memegang satu peranan yang khusus dimana register ini dijadikan sebagai counter/penghitung terhadap banyaknya looping yang dapat terjadi. Setiap ditemui perintah LOOP, maka register CX akan dikurangi dengan 1 terlebih dahulu, kemudian akan dilihat apakah CX sudah mencapai 0. Jika sudah bernilai 0 maka proses perulangan akan berhenti.
Contoh :
                             MOV CX, 3;
                 Ulang :
                             INT 21h;
                             INC DL;
                             LOOP Ulang;

contoh pemerograman assembler

org     100h

jmp     start

start:

mov     al, 'k'
mov     ah, 09h
mov     bl, 0eh
mov     cx, 1
int     10h
mov     al, 'o'
mov     ah, 09h
mov     bl, 0eh
mov     cx, 1
int     10h 
mov     al, 'm'
mov     ah, 09h
mov     bl, 0eh
mov     cx, 1
int     10h
mov     al, 'a'
mov     ah, 09h
mov     bl, 0eh
mov     cx, 1
int     10h
mov     al, 'n'
mov     ah, 09h
mov     bl, 0eh
mov     cx, 1
int     10h
mov     al, 'g'
mov     ah, 09h
mov     bl, 0eh
mov     cx, 1
int     10h    

jmp     start 
  ret
endp

dasar Assembler

Perintah Dasar Assembler
Berikut beberapa perintah dasar pada assembler yang biasa digunakan:

• Mov
Perintah untuk mengisi, memindahkan, memperbaharui isi suatu register, variabel ataupun suatu lokasi memori.
Penulisan perintah:
MOV [operand A],[operand B]
Dengan ketentuan operand A merupakan register, variabel, lokasi memori dan ketentuan isi operand B berupa register, variabel, lokasi memori ataupun bilangan.
Operand B merupakan bilangan asal yang akan diisikan ke operand A, dengan kata lain operand A merupakan tujuan pengisian atau penduplikatan dari operand B.

• Int (Interrupt)
Perintah Int (Interrupt) mempunyai cara kerja yang sama dengan perintah GOSUB pada BASIC, hanya pada Int, subrotine yang akan dipaggil sudah tersedia pada memori komputer.
Subrotine yang dipanggil menggunakan perintah Int (interrupt) terdiri dari 2 jenis, yaitu:
1. Bios Interrupt yaitu Int yang disediakan oleh BIOS (Basic Input Output System). Interrupt yang termasuk dalam Interrupt BIOS adalah Int 0 hingga Int 1F hexa.
2. DOS Interrupt yaitu Int yang disediakan oleh DOS (Disk Operating System). Interupt yang termasuk dalam Interrupt DOS adalah Interrupt diatas Int 1F hexa. Misal: Interrupt 20 hexa, Interrupt 21 hexa dll.

• Q (Quit)
Bila kita mengetik Q dan menekan Enter, maka akan segera kembali ke DOS Prompt.

• H (Hexa)
Perintah yang melaksanakan penjumlahan dan pengurangan terhadap dua bilangan hexa.
Bentuk Umum Instruksi:
H operand1 operand2

• R (Register)
Perintah ini adalah untuk mengetahui isi masing-masing register pada saat mengetik R dan menekan Enter.

• A (Assembler)
Perintah ini berguna untuk tempat menulis program Assembler.

• N (Name)
Perintah ini untuk memasukkan nama program setelah program dibuat.
Bentuk Umum Instruksi:
N [Drive]: [nama program]

• RCX (Register CX)
Perintah untuk mengetahui dan memperbaharui isi register CX yang merupakan tempat penampungan panjang program yang sedang aktif sebelum dijalankan (running).


sumber : http://www.belajarti.co.cc/2010/03/perintah-dasar-assembler.html
DOWNLOAD : http://www.ziddu.com/download/9586433/ModulAssembling.doc.htm

intrap

PENGERTIAN INTERRUPT
Interupsi adalah suatu permintaan khusus kepada mikroposesor untuk melakukan sesuatu. Bila terjadi interupsi, maka komputer akan menghentikan dahulu apa yang sedang dikerjakannya dan melakukan apa yang diminta oleh yang menginterupsi.
Pada IBM PC dan kompatibelnya disediakan 256 buah interupsi yang diberi nomor 0 sampai 255. Nomor interupsi 0 sampai 1Fh disediakan oleh ROM BIOS, yaitu suatu IC didalam komputer yang mengatur operasi dasar komputer. Jadi bila terjadi interupsi dengan nomor 0-1Fh, maka secara default komputer akan beralih menuju ROM BIOS dan melaksanakan program yang terdapat disana. Program yang melayani suatu interupsi dinamakan Interrupt Handler.
3.2. VEKTOR INTERUPSI
Setiap interrupt akan mengeksekusi interrupt handlernya masing-masing berdasarkan nomornya. Sedangkan alamat dari masing- masing interupt handler tercatat di memori dalam bentuk array yang besar elemennya masing-masing 4 byte. Keempat byte ini dibagi lagi yaitu 2 byte pertama berisi kode offset sedangkan 2 byte berikutnya berisi kode segmen dari alamat interupt handler yang bersangkutan. Jadi besarnya array itu adalah 256 elemen dengan ukuran elemen masing-masing 4 byte. Total keseluruhan memori yang dipakai adalah sebesar 1024 byte (256 x 4 = 1024) atau 1 KB dan disimpan dalam lokasi memori absolut 0000h sampai 3FFh. Array sebesar 1 KB ini disebut Interupt Vector Table (Table Vektor Interupsi). Nilai-nilai yang terkandung pada Interupt Vector Table ini tidak akan sama di satu komputer dengan yang lainnya.
Interupt yang berjumlah 256 buah ini dibagi lagi ke dalam 2 macam yaitu:
- Interupt 00h - 1Fh (0 - 31) adalah interrupt BIOS dan standar di semua komputer baik yang menggunakan sistem operasi DOS atau bukan. Lokasi Interupt Vector Table-nya ada di alamat absolut 0000h-007Fh.
- Interupt 20h - FFh (32 - 255) adalah interrupt DOS. Interrupt ini hanya ada pada komputer yang menggunakan sistem operasi DOS dan Interupt Handler-nya di-load ke memori oleh DOS pada saat DOS digunakan. Lokasi Interupt Vector Table-nya ada di alamat absolut 07Fh-3FFh. +---------------------------------------------------------------+
| Nomor Nama Nomor Nama |
| Interupt Interupt Interupt Interupt |
+---------------------------------------------------------------+
| *00h Divide By Zero 10h Video Service |
| *01h Single Step 11h Equipment Check |
| *02h Non MaskableInt(NMI) 12h Memory Size |
| *03h Break point 13h Disk Service |
| 04h Arithmatic Overflow 14h Communication (RS-232)|
| 05h Print Screen 15h Cassette Service |
| 06h Reserved 16h Keyboard Service |
| 07h Reserved 17h Printer Service |
| 08h Clock Tick(Timer) 18h ROM Basic |
| 09h Keyboard 19h Bootstrap Loader |
| 0Ah I/O Channel Action 1Ah BIOS time & date |
| 0Bh COM 1 (serial 1) 1Bh Control Break |
| 0Ch COM 2 (serial 2) 1Ch Timer Tick |
| 0Dh Fixed Disk 1Dh Video Initialization |
| 0Eh Diskette 1Eh Disk Parameters |
| 0Fh LPT 1 (Parallel 1) 1Fh Graphics Char |
+---------------------------------------------------------------+
Gambar 3.1. BIOS Interrupt
* Interrupt ini telah dipastikan kegunaannya oleh sistem untuk keperluan yang khusus , tidak boleh dirubah oleh pemrogram seperti yang lainnya.
- DEVIDE BY ZERO : Jika terjadi pembagian dengan nol maka proses akan segera
dihentikan.
- SINGLE STEP : Untuk melaksanakan / mengeksekusi intruksi satu persatu.
- NMI : Pelayanan terhadap NMI (Non Maskable Interrupt) yaitu
interupsi yang tak dapat dicegah.
- BREAK POINT : Jika suatu program menyebabkan overflow flag menjadi 1
maka interrupt ini akan melayani pencegahannya dan memberi
tanda error.
14
+-------------------------------------------+
| Nomor Nama Interrupt |
| Interrupt |
+-------------------------------------------+
| 20h Terminate Program |
| 21h DOS Function Services |
| 22h Terminate Code |
| 23h Ctrl-Break Code |
| 24h Critical Error Handler |
| 25h Absolute Disk Read |
| 26h Absolute Disk Write |
| 27h Terminate But Stay Resident |
+-------------------------------------------+
Gambar 3.2. DOS Interrupt
Didalam pemrograman dengan bahasa assembler kita akan banyak sekali menggunakan interupsi untuk menyelesaikan suatu tugas.

TIP-TIP TAMBAHAN MAKRO

Menyimpan Makro dalam File Include. Setelah membuat kumpulan makro, akan menjadi tidak baik kalau harus menyalin semuanya pada setiap program baru. Terdapat cara lebih baik, dengan membuat file yang berisi makro dan dengan menggunakan perintah INCLUDE untuk menyalinnya pada waktu assembly. Hanya makro yang digunakan yang menjadi bagan dari program akhir. Jika kita menggunakan two-pass assembler seperti Microsof Assembler, akan lebih baik untuk menyimpan perintah INCLUDE dalam lingkungan pengecekan kondisi IF1, yang memerintah assembler untuk melibatkan makro hanya pada saat pertama kali:



if1

include lib1.mac

endift

Berikut contoh file makro yang dapat digunakan pada aplikasi yang memerlukan salah satu makro yang ada didalamnya:

; Macro.Inc


; File ini harus di-include pada setiap program sumber yang memerlukan. Program juga harus di-link ke CONSOLE.LIB



call_WritInt locate

cCall mDisplay

cmpj mMove

display_at mshl

exit mult

getYN putchar

inputInt repeat


inputStr startup

jx_ write

1Loop

Extern ReadInt : proc, ReadString : proc

; menulis integer ke konsol

call_WriteInt macro value, radix

push ax


push bx

mov ax, value

mov bx, value

call writeint

pop bx

pop ax


endm

; pemanggilan prosedur kondisional

cCall macro cond, procname

local L1, L2

j&cond L1

jmp L2


L1 : call procname

L2 : exitm

endm



; membandingkan dua operand dan loncat ke

; berdasarkan flag




cmpj macro dest, flag, source, label

cmp dest, source

j&flag label

endm

; menampilkan string pada baris, kolom dalam konsol


display_at macro row, col, string

locate row, col

mDisplay string

endm



; keluar ke Dos dan mengembalikan kode

exitm macro ecode


mov ah, 4Ch

mov al, ecode

int 21h

endm



; mengambil respons Y/N (y/n). Argument harus huruf kapital yang akan


menset ZF

GetYN macro prompt, exact

write prompt

mov ah, 1

int 21h

sub al, 32


cmp al, exact

endm



; menampilkan prompt huruf pada , dan meng-input integer dan menyimpannya pada

inputInt macro row, col, prompt, dest

locate row, col

write prompt


call ReadInt

mov dest, ax

endm



; menampilkan prompt huruf pada , . Kemudian, memasukkan string ASCIIZ dan menyimpannya ke . Maksimum karakter =

inputStr macro row, col, prompt, dest, max

locate row, col


write prompt

push cx

push dx

mov dx, pffset dest

mov cx, max

call ReadString


pop dx

pop cx

endm



; jump eXtented (JX_) ; loncat kondisional ke label NEAR (di mana saja dalam segmen)



irp cond,

jxe&cond macro dest


local L1, L2

j&cond L1

jmp short L2

L1 : jmp dest

L2 :

endm


endm



; Loop ke label NEAR (dimana saja dalam segmen)

1Loop macro dest

local A1, A2

loop A1

jmp A2

A1 : jmp dest


A2 :

endm





; meletakkan kursor pada , pada video halaman 0.

locate macro ro, column

push ax


push bx

push dx

mov bx, 0

mov ah, 2

mov dh, row

mov dl, column


int 10h

pop dx

pop bx

pop ax

endm



; menampilkan $-terminated string

mDisplay macro string

push ax


push dx

push ah, 9

mov dx, offset string

int 21h

pop dx

endm



; memindahkan word atau byte dari memori ke memori

mmove macro dest, source


push ax

if (type dest) EQ 1

mov al, source

mov dest, al

else

if (type dest) EQ 2


mov ax, source

mov dest, ax

endif

endif

pop ax

endm




; menggeser ke kiri, kali dengan melakukan instruksi penggeseran tunggal

mshl macro dest, count

rept count

shl dest, 1

endm


endm

; mengalikan dua operand

mult macro dest, source

push ax

push bx

mov ax, dest

mov bx, source

mul bx


mov dest, ax

pop bx

pop ax

endm

; mengeluluarkan karakter ke konsol

putchar macro char

mov ah, 2


mov dl, char

int 21h

endm

; mengeluarkan karakter kali

repeat macro char, count

local L1


mov cx, count

L1 : mov ah, 2

mov dl, char

int 21h

loop L1

endm




; set DS dan ES ke segmen data. Menyimpan alamat segmen PSP dalam variable

startup macro pspSeg

push ds

mov ax, @data

mov ds, ax

mov es, ax

pop pspSeg


endm



; makro WRITE menulis huruf ke output standar. adalah string yang berada antara tanda kutip. Jika tidak kosong, mengindikasikan bahwa carriage return ditampilkan.

write macro text, creturn

local string, crlf

push ax


push dx

mov ah, 9

int 21h



infb

mov dx, offset crlf

int 21h

endif


pop dx

pop ax

.data

string db text, ‘$’

crlf db 0Dh, 0Ah, ‘$’

.code

endm



; makro berikut menghasilkan delapan makro, yang bernama MSHL, MSHR, MSAR, MROL, MROR, MRCL, dan MRCR.


irp styp,

m&styp macro dest, count

rept count

&styp dest, 1

endm

endm


endm

LIBRARY MAKRO

Makro CCALL. Salah satu penggunaan makro yang sangat baik adalah meningkatkan set intsruksi Intel—ini akan memudahkan program untuk ditulis. Makro CCALL (condition call) memungkinkan untuk memanggil prosedur berdasarkan flag, menggunakan instruksi tunggal:
Ccall macro con, procname
local L1, L2
j&cond L1
jmp L2
L1 : call procname
L2 : exitm
endm
Makro dapat berdasarkan kondisi flag tertentu. Contoh, kita dapat memanggil prosedur DOS_ERROR ketika CF diset. Misalkan sebagai berikut:
Ccall c, DOS_error
Atau, kita memanggil LOWER jika value 1 kurang dari atau sama dengan AX:
Asal Kode yang dibangkitkan
cmp value 1, ax cmp value1, ax
Ccall le, lower jle ??0002
jmp ??0003
??0002 : call lower
??0003 :
Kita dapat memanggil NOT_EQUAL jika AX tidak sama dengan BX :
cmp ax, bx
Ccall ne, not_equal
Setelah membandingkan dua string, kita dapat memanggil EXCHANGE :
call compare
Ccall a, exchange
Makro CMPJ. Makro CMPJ (compare and jump) membandingkan dua operand dan loncat ke kabel berdasarkan flag:
cmpj macro dest, flag, source, label
cmp dest, source
j&flag label
endm
Contoh Pemanggilan
cmpj ax, le, bx, labell ; jika AX <= BX, loncat ke labell
cmpj cx, e, count, exit ; jika CX = count, loncat ke exit
Makro MULT. Seperti kita ketahui, instruksi MUL menyebabkan keterbatasan tertentu; AL atau AX merupakan operand tujuan otomatis, dan operand sumber immediate tidak diperbolehkan. Makro MULT pada contoh berikut melalkukan perkalian operand 16-bit oleh register, operand memori, atau operand immediate:
mult macro dest, source
push ax
push bx
mov ax, dest
mov bx, source
mul bx
mov dest, ax
pop bx
pop ax
endm
Makro MULT mengalikan dest dengan source, menempatkan hasilnya dalam dest. Jika hasilnya lebih besar dari 16 bit, maka CF diset dan bagian atas hasinya disimpan dalam DX.
Contoh berikut memenggil MULT mendemontrasikan fleksibilitas dalam perkalian operand berbagai tipe:
mov cx, value 1
mult cx, 5
mult value1, value2
mult value2, 5


value 1 dw 100h
value2 dw 2
Makro MMOVE. Set intruksi Intel tidak mempunyai instruksi pemindahan dari memor ke memori. Makro MMOVE dapat melakukan hal ini, seperti contoh berikut:
mmove macro dest, source
push ax
if (type dest) EQ 1
mov a1, source
mov dest, al
else
if (type dest) EQ 2
mov ax, source
mov dest, ax
endif
endif
pop ax
endm
Contoh Pemanggilan
mmove word2, word1 ; 16-bit move
mmove byte2, byte1 ; 8-bit move
Oleh karena operator TYPE digunakan pada makro ini maka pesan kesalahan akan ditampilkan jika tdak terdapat perintah. DATA pada file sumber sebelum definisi makro. Hal ini terjadi karena assembler memerlukan untuk meletakkan variable sebelum dapat mengevaluasi tipenya. Segmen berikut mungkin bisa digunakan:
.stack 100h
.data
(variabel)
(definisi makro)
.code
(intruksi)
Loncat Kondisioanal dan Liupan (Conditional Jumps and Loops). Set instruksi Intel mempunyai batasan jangkauan instruksi loncat kondisional—termasuk LOOP—sampai 127 ke depan atau 128 byte ke belakang. Khususnya, ketika program mempunyai sejumlah pemanggilan makro dalam jangkauan loncat kondisional atau liupan, ini mungkin menyebabkan keluar dari range. Misalkan, kita akan mengonversi prosedur WRITESTRNG, READSTRING dan WRITEIN menjadi makro dan menggunakannya dalam program:
Mov cx, 10
L1 : writestring promt
readstring buffer
writein 1000h, 10
loop L1
Contoh ini akan menyebabkan kesalahan sintak karena kode menghasilkan dengan makro di dalamnya, liupan yang lebih dari 127 byte sehingga LOOP akan keluar range.
Makro LLOOP. Makro LLOOP (long loop) mengizinkan kita untuk meliup ke suatu label dalam segment sekarang. Dia melakukan in dengan meliup ke instruksi JMP yang meloncat ke tujuan. JMP, tidak seperti LOOP, dapat menjangkau suatu label dalam segmen:
LLoop macro dest
local A1, A2
loop A1
jmp A2
A1 : jmp dest
A2 :
endm
Makro menggunakan instruksi LOOP tidak seperti biasanya. Dia meloncat ke depan kelabel A1. Pada lokasi ini, instruksi JMP kembali loncat ke dest. Ketika CX = 0, LOOP terjadi dan loncat ke A2, yaitu lokasi instruksi berikutnya.

Membangun program assembly

Menjelaskan dasar-dasar pembuatan program assembly, cara penggunaan rutin-rutin i/o dan sebagai rutin bahasa pemrograman C.
Saat ini, sudah jarang sekali membuat program lengkap yang berdiri sendiri dengan menggunakan bahasa assembly. Assembly sangat berguna untuk keperluan rutin yang kritis dan sangat khusus.
Mengapa ?
Semua itu, sangat mudah jika diprogram dengan mengunakan sebuah bahasa pemrograman beraras tinggi jika dibandingkan dengan bahasa assembly. Juga, dengan menggunakan bahasa assembly membuat program sangat sulit untuk di pindahkan (di porting) ke platform yang lainnya (arsitektur komputer lainnya). Pada kenyataannya, sangat sulit membuat program dalam bahasa assembly secara keseluruhan.
Namun, mengapa banyak orang yang masih belajar bahasa assembly ?.
Alasannya adalah:

1. Kadang-kadang kode ditulis dalam bahasa assembly karena dapat lebih cepat eksekusinya daripada kode yang dihasilkan kompiler.
2. Assembly mengijinkan untuk mengakses perangkat keras secara langsung, hal ini mungkin sulit atau tidak mungkin dapat dilakukan oleh bahasa pemrograman tingkat tinggi.
3. Belajar program menggunakan bahasa assembly akan menolong sebagai penguatan untuk mengerti bagaimana komputer bekerja.
4. Belajar program menggunakan bahasa assembly akan menolong mengerti secara baik bagaimana kompiler dan bahasa pemrograman beraras tinggi seperti C bekerja

LIHAT SELENGKAPNYA : http://elektro.ub.ac.id/bsw/kuliah-1/bahasa-assembly/membuat-program-assembly

Perintah Dasar Assembler

Berikut beberapa perintah dasar pada assembler yang biasa digunakan:

• Mov
Perintah untuk mengisi, memindahkan, memperbaharui isi suatu register, variabel ataupun suatu lokasi memori.
Penulisan perintah:
MOV [operand A],[operand B]
Dengan ketentuan operand A merupakan register, variabel, lokasi memori dan ketentuan isi operand B berupa register, variabel, lokasi memori ataupun bilangan.
Operand B merupakan bilangan asal yang akan diisikan ke operand A, dengan kata lain operand A merupakan tujuan pengisian atau penduplikatan dari operand B.

• Int (Interrupt)
Perintah Int (Interrupt) mempunyai cara kerja yang sama dengan perintah GOSUB pada BASIC, hanya pada Int, subrotine yang akan dipaggil sudah tersedia pada memori komputer.
Subrotine yang dipanggil menggunakan perintah Int (interrupt) terdiri dari 2 jenis, yaitu:
1. Bios Interrupt yaitu Int yang disediakan oleh BIOS (Basic Input Output System). Interrupt yang termasuk dalam Interrupt BIOS adalah Int 0 hingga Int 1F hexa.
2. DOS Interrupt yaitu Int yang disediakan oleh DOS (Disk Operating System). Interupt yang termasuk dalam Interrupt DOS adalah Interrupt diatas Int 1F hexa. Misal: Interrupt 20 hexa, Interrupt 21 hexa dll.

• Q (Quit)
Bila kita mengetik Q dan menekan Enter, maka akan segera kembali ke DOS Prompt.

• H (Hexa)
Perintah yang melaksanakan penjumlahan dan pengurangan terhadap dua bilangan hexa.
Bentuk Umum Instruksi:
H operand1 operand2

• R (Register)
Perintah ini adalah untuk mengetahui isi masing-masing register pada saat mengetik R dan menekan Enter.

• A (Assembler)
Perintah ini berguna untuk tempat menulis program Assembler.

• N (Name)
Perintah ini untuk memasukkan nama program setelah program dibuat.
Bentuk Umum Instruksi:
N [Drive]: [nama program]

• RCX (Register CX)
Perintah untuk mengetahui dan memperbaharui isi register CX yang merupakan tempat penampungan panjang program yang sedang aktif sebelum dijalankan (running).


sumber : http://www.belajarti.co.cc/2010/03/perintah-dasar-assembler.html
DOWNLOAD : http://www.ziddu.com/download/9586433/ModulAssembling.doc.html

Satuan Bit dan Byte

BIT - merupakan satuan data terkecil. Terdiri dari 1 atau 0. Biasa disebut dengan “Binary”.
BYTE – terdiri dari 8 bit. Memiliki nilai maksimal 225 (0-225). Biasa disebut sebagai “base 16 system” sedangkan binary disebut “base 2 system”.
WORD – merupakan 2 byte atau 16 bit. Word memiliki nilai maksimal 0FFFFh atau 65535d.
DOUBLE WORD – terdiri dari 2 word atau 32 bit. Nilai maksimal = 0FFFFFFFF atau 4294967295d.
KILOBYTE – 1000 bytes?? Bukan. 1 kilobyte tidak sama dengan 1000 bytes. 1 kilobyte sama dengan 1024 (32 * 32) bytes.
MEGABYTE – 1 Megabyte tidak sama dengan 1000000 bytes, tetapi 1024 * 1024 atau 1048578 bytes.
II. Register
Register adalah tempat khusus pada komputer, dimana kita bisa melakukan penyimpanan data. Kita bisa melihat register sebagai sebuah “kotak”, dimana di dalamnya kita bisa menyimpan sesuatu seperti : nama, nomor, kalimat. Kita bisa melihat register sebagai tempat penyimpanan.
Saat ini, kebanyakan komputer menggunakan 9 register 32bit. Yaitu :
EAX: Extended Accumulator Register
EBX: Extended Base Register
ECX: Extended Counter Register
EDX: Extended Data Register
ESI: Extended Source Index
EDI: Extended Destination Index
EBP: Extended Base Pointer
ESP: Extended Stack Pointer
EIP: Extended Instruction Pointer
Umumnya, ukuran register adalah 32 bit (4 bytes). Bisa menampung data dari 0 – 0FFFFFFFF. Pada awal, kebanyakan register mempunyai fungsi utama yang memiliki nama yang berarti, seperti ECX = Counter, tetapi saat ini kita bisa menggunakan register apapun yang kita sukai sebagai counter. Fungsi EAX, EBX, ECX, EDX, ESI, dan EDI akan dijelaskan saat saya menjelaskan fungsi tertentu yang digunakan pada register tersebut.

EBP : EBP paling banyak berhubungan dengan stack dan stack frames.
ESP : ESP menunjuk ke stack dari proses yang sedang terjadi. Stack adalah tempat dimana data disimpan, dan akan digunakan nantinya (untuk lebih detail, kita pelajari dahulu proses pop/push)
EIP : EIP selalu menunjuk kepada instruksi berikutnya yang akan dieksekusi.
Ada 1 hal penting yang perlu kita ketahui tentang register : walaupun besarnya 32bit, tapi beberapa bagian (16bit bahkan 8bit) tidak bisa diakses secara langsung. Yang memungkinkan yaitu :
32bit Register 16bit Register 8bit Register
EAX AX AH/AL
EBX BX BH/BL
ECX CX CH/CL
EDX DX DH/DL
ESI SI —–
EDI DI —–
EBP BP —–
ESP SP —–
EIP IP —–
Sebuah register terlihat seperti berikut :
|—————————— EAX: 32bit (=1 DWORD =4BYTES) ————————-|
|——- AX: 16bit (=1 WORD =2 BYTES) —-|
|- AH:8bit (=1 BYTE)-|- AL:8bit (=1 BYTE)-|
Jadi EAX adalah nama dari register 32 bit, AX adalah “Low Word” (16 bit) dari EAX dan AL/AH (8 bit) adalah nama dari “Low Part” dan “High Part” dari AX. Btw, 4 bytes adalah 1 DWORD dan 2 bytes adalah WORD. Masih ingat kan :D ?
Pengelompokkan berdasarkan ukuran
1. Byte-size-register : Seperti namanya, register ini memiliki ukuran tepat 1 byte. Hal ini tidak berarti 32 bit diisi semuanya dengan data. Register yang kosong diisi dengan 0. Berikut adalah register-register byte-size, semuanya berukuran 1 byte atau 8 bit.

* AL dan AH
* BL dan BH
* CL dan CH
* DL dan DH

2. Word-size-register : berukuran 1 word (= 2 bytes = 16 bit). Sebuah register word-size terdiri dari 2 register byte-size. Kita bisa mengelompokkannya berdasarkan tujuan yaitu :
a. Umum

* AX (word-size) = AH + AL -> “+” bukan berarti menjumlahkan. AH dan AL bersifat independent., tapi mereka bersama berada pada AX. Hal ini berarti jika kita mengubah AL atau AH, secara otomatis kita juga mengubah AX. :)
* AX -> accumulator, sering digunakan untuk operasi matematika
* BX -> base , digunakan sebagai konjungsi pada stack
* CX -> counter
* DX -> data , kebanyakan digunakan sebagai reminder pada operasi matematika disimpan
* DI -> Destination Index , sebagai contoh sebuah string dicopykan pada DI
* SI -> Source Index, sebagai contoh sebuah string dicopykan dari SI

b. Index

* BP -> Base Pointer, menunjuk pada posisi tertentu pada stack
* SP -> Stack Pointer, menunjuk pada posisi tertentu pada stack

c. Segment

* CS -> Code Segment, instruksi aplikasi yang dieksekusi
* DS -> Data Segment, data yang dibutuhkan
* ES -> Extra Segment

d. Spesial

* IP -> Instruction Pointer , menunjuk ke instruksi berikutnya

3. DoubleWord-size-register
2 words = 4 bytes = 32 bits. EAX, EBX, ECX, EDX, EDI, …
Jadi kalau ada huruf “E” di depan 16bit, itu berarti 32 bit. Jadi AX = 16 bits, dan EAX adalah versi 32bit.
Sumber : Woodmann