bahasa asembler
TRANSCRIPT
Nama : Adam Husain
NPM :20071110002
Jurusan : Teknik Elektro Universitas Kebangsaan
BAHASA ASEMBLER
SOFTWARE FUNCTION
MONITOR COMMAND
Monitor command fungsi tombol dalam system BGC 8088 microenginering yang
memungkinkan interaksi antara user dengan system BGC. Artinya, jika salah satu perintah
dioperasikan maka system dalam BGC 8088 akan dimengerti apa yang harus dikerjakannya.
Types of monitor commands
1. Aseembler command (A, I dan U)
A: assemble the assembly lenguange instruction
I : insert mode
U: dissemble (List)
2. Program control command(G,T dan R)
G: excute
R: display/ modify the register content
T: trace program execution
3. Memory management (C, D, E, F, M)
C: compare the memory content
D: display the memory content
E: substitute the memory content
F: Fill into memory Block
M: Move the memory content
4. Numerical treatment (B, H, J, S)
B: convert decimal into binary
H: calculate the sum and difference of two hexadecimal number
J: menerjemahkan bilangan decimal ke hexa decimal
S: menerjemahkan bilangan hexa decimal ke bilangan decimal
Dasar dan instruksi yang digunakan
Register merupakan suatu unit memori penyimpanan data dengan bilangan hexa
Register yang sering digunakan :
AX(gabungan AH dan AL)
BX (gabungan BH dan BL)
CX (gabungan CH dan CL)
DX (gabungan DH dan DL)
Command for memory
F : digunakan untuk mengisi data dengan panjang alamat lokasi memori sudah ditentukan yang
diisi dengan data yang Sama
Format yang digunakan : f(alamat awal), (alamat akhir), (data yang akan diisikan)
E : digunakan untuk mengisi data di lokasi memori
Format yang digunakan : e ( alamat ) , (data yang akan disikan)
D: digunakan untuk menampilkan data yang diisikan dalam lokasi memori
Format yang digunakan ; d (alamat awal) , ( alamat akhir)
Perintah Mov
Mov merupakan perintah dalam bahasa assembly yang digunkan untuk menyimpan data atau
mengkopikan data menuju register
Format perintah Mov
Mov [tujuan] , [asal]
reg , [reg] mengkopikan data register dengan register
contoh
Mov ax,[bx] : maksudnya adalah mengkopikan data yang ada di register BX ke register
AX
Reg , data memasukan data ke sebuah register tujuan
Contoh
Mov ax,123 : maksudnya adalah memasukan data 123 pada register AX
[Memory] , register mengkopikan data di register ke lokasi memori
Contoh
Mov [100], ax : maksudnya adalah mengkopikan isi data yang ada di register AX
ke lokasi Memori di 100 (E100)
Register , [memori] mengkopikan data di lokasi memori ke register
Contoh ax,[100] : maksudnya adalah mengkopikan isi data di lokasi memori di 100
(E100} Ke register AX
Perintah INC
Inc merupakan kependekan dari ‘increase/increment’ yang artiinya menambahkan. perintah ini
digunakan untuk menambahkan isi di register sebesar “1”
Contoh : inc AX menambah isi reg. di register AX sebesar 1, jika isi reg.
sebelumnya 1 Maka setelah perintah ini di eksekusi maka isi reg.
yang berada di AX Berubah menjadi 2
Perintah DEC
Dec merupakan kependekan dari ‘decrease/decrement’ yang artinya berkurang. Perintah ini
digunakan untuk mengurangi isi register sebesar “1”
Contoh : dec BX mengurangi isi reg. di register AX sebesar 1, jika isi reg.
sebelumnya 2 Maka setelah perintah ini di eksekusi maka isi reg.
yang berada di AX Berubah menjadi 1
Perintah ADD
Merupakan perintah untuk menjumlahkan isi register dengan isi register lain atau dengan nilai
yang diinginkan . Tidak seperti inc , perintah add dapat menjumlah data dengan jumlah
berapa pun dan hasil penjumlahan di simpan di register tujuan.
Format nya adalah sebagai berikut
ADD (isi register tujuan ) , (isi register asal)
Contoh : add AX,BX artinya jumlahkan isi register yang ada di AX dengan isi
register Yang ada di BX dan hasilnya disimpan di register
AX
Atau formatnya bisa juga
ADD (isi register tujuan) , (nilai data yang akan dijumlahkan)
Contoh : add AX,10 artinya jumlahkan isi register yang ada di AX dengan data
Sebesar 10 dan hasilnya disimpan di register AX
Perintah SUB
Merupakan perintah untuk mengurangkan isi register dengan isi register lain atau dengan nilai
yang diinginkan . Tidak seperti dec , perintah sub dapat mengurangi data dengan nilai
berapa pun dan hasil penjumlahan di simpan di register tujuan.
Format penulisan perintah sama dengan format penulisan pada perintah add hanya saja
perintahnya yang berbeda.
Contoh : sub AX,BX artinya kurangkan isi register yang ada di AX dengan isi
register Yang ada di BX dan hasilnya disimpan di register
AX
sub AX,10 artinya kurangkan isi register yang ada di AX dengan data
Sebesar 10 dan hasilnya disimpan di register AX
Perintah LOOP
Merupakan perintah untuk mengulangi instruksi atau perintah jumlah pengulangan sebesar isi
register CX yang merupakan acuan dari perintah loop. Pada saat di eksekusi isi register CX akan
berkurang 1 terus menerus hingga isi register CX sama dengan 0 baru kemudian pengulangan
perintah berhenti.
Contoh :
Mov ax,0
Mov bx,10
mov cx, 10
++ inc ax merupakan area pengulangan dimana perintah
Inc bx tersebut akan diulangi sebesar cx dengan “++” merupakan
loop ++ alamat yang akan diulang.
Perintah jump
Sesuai dengan namanya perintah ini digunakan untuk melompat ke alamat suatu perintah. Ada berbagai
jenis perintah jump
Jmp : merupakan perintah jump tanpa sarat
JNE : “jump non equal” merupakan perintah jump dimana syarat untuk jump nya harus
Memiliki parameter nya berbeda setelah melalui perintah ‘CMP’
JE : “jump Equal” merupakan kebalikan dari ‘JNE’ , jikalau JNE parameter pembandingnya berbeda
Setelah melalui perintah CMP maka pada perintah JE parameter pembandingnya harus sama
Setelah melalui perintah CMP lalu kemudian bisa lompat ke alamat yang dituju.
JZ : “jump Zero” merupakan perintah jump dimana untuk bisa melompat parameter sebelumnya
Harus memiliki nilai sama dengan ‘nol’ tanpa harus melalui perintah ‘CMP’
JNZ : “jump non zero” merupakan kebalikan dari perintah JZ, jadi parameter sebelumnya harus
Memiliki nilai bukan sama dengan ‘nol’
*** jika di asumsikan perintah JNE dan JE hampir sama dengan perintah ‘IF’ dalam bahasa pascal
Dengan bentuk flowchart:
IF …=/ =...
Tidak
Ya
Perintah untuk I/O
Daftar I/O device pada BGC 8088 adalah sebagai berikut
Address range I/O device
FF00 –FF0F 8254
FF10 –FF1F 8255
FF20 –FF2F 8259
FF30 –FF3F Printer
FF40 –FF4F LCD
FF50 –FF5F 8279
FF60 –FF6F 8250
FF70 –FF7F Status port
Untuk menuliskan pada device (sebagai output): OUT DX,AL
Untuk membaca dari device (sebagai input): IN AL,DX
Sebagai contoh pada status port:
MOV DX,FF70 FF70 sebagai I/O device
MOV AL,FE FE sebagai status port yang akan dinyalakan
OUT DX,AL
Susunan lampu pada status port
Dengan aktif pada logic nol maka :
Speaker print insert caps lock
1 1 1 0
F : E ( bilangan heksa )
Dengan demikian yang berlogic nol adalah yang di aktifkan sedangkan yang berlogic satu yang dipadamkan
*perlu dicatat bahwa byalanya lampu bisa dilhat oleh mata bila ada delay
Program untuk delay diantaranya adalah;
Mov CX,FFFF
**LOOP **
Dengan demikian delay bisa di realisasikan dengan lamanya proses pada suatu perintah dengan loop dialamat loop itu sendiri maka berarti melakukan pengulangan selama FFFF (proses selama FFFF kali) sehingga utnuk membaca perintah selanjutnya tertunda dikarenakan perintah loop ini harus diselesaikan terlebih dahulu.
Status register
Status register merupakan register pada BGC yang berguna untuk menyimpan kondisi yang terjadi apa bila perintah di eksekusi yang di tuliskan dengan “1” sebagai set dan “0” sebagai reset. Kondisi ini mempengaruhi perintah yang akan dieksekusi.
Untuk menggunakan status register gunakan perintah ‘RF’ atau ‘RFG’
Table status port
Flag Set Reset kode untuk mengeset/reset kondisi flag (RF …)
Carry flag CY – carry yield NC – no carry 1
Parity flag PE – parity even PO – parity odd 4
Auxiliary flag AC – auxiliary carry NA – no auxiliary 10
Zero flag ZR – zero NZ – not zero 40
Sign flag NG – negative PL - positive 80
Overflow flag OV – overflow NV – no overflow 800
Direction flag DN -down UP - up 400
Interrupt flag EI DI 200
Dengan menggunakan perintah seperti RF 1 berarti mengubah carry flag kedalam keadaan set atau reset
Jika ingin mengubah keadaan lebih dari 1 flag bisa juga digunakan dengan perintah RF dengan menjumlah kan kode dari flag yang akan diubah .
Perintah aritmetik lain
Selain ADD, INC, SUB, DEC adapun
ADC (add with carry)
SBB (subtract wih carry)
MUL (multiply)
DIV (divide)
Perintah ADC
Perintah ADC digunakan dengan cara yang sama seperti perintah ADD, yaitu
ADC tujuan ,Asal
Perbedaanya dengan ADD terletak pada proses penjumlahannya jika ADD menjumlahkan hanya isi tujuan dan isi asal jika pada perintah ADC penjumlahannya ditambah dengan carry (carry flag).
Jika pada penjumlahan sebelumnya meninggalkan sisa sehingga meninggalkan carry=1 maka dengan pada penjumlahan selanjutnya dengan perintah ADC carry tersebut dijumlahkan dengan perintah dasar (tujuan = tujuan + asal + carry)
Contoh :
MOV AX,1234 AX= 1234 ; CF = 0
MOV BX,9ABC BX = 9ABC ; CF = 0
MOV CX, 5678 CX = 5678 ; CF =0
MOV DX, DEF0 DX = DEF0 ; CF = 0
ADD CX,DX CX = CX + DX = 3568 ; CF = 1
ADC AX,BX AX = AX + BX + CF = ACF1
Perintah SBB
Perintah SBB (subtract with carry) perintah ini hamper sama dengan ADC namun pada perintah ini operasi yang digunakan adalah pengurangan
SBB tujuan , asal
Perintah MUL
Perintah MUL digunakan untuk operasi perkalian, berbeda dengan operasi sebelumnya perintah ini hanya menjadikan register AX sebagai acuan untuk dikalikan dan hasil yang disimpan selalu di register AX namun bila hasil akhirnya lebih dari 4 digit pada register AX misalkan 6 digit maka sisa 2 digit lagi disimpan di register DX sehingga perintahnya dapat ditulis sebagai berikut:
MUL (reg. asal)
Contoh :
MOV AX,5
MOV BX, 10
MUL BX Berarti mengalikan BX dengan AX sehingga nilai AX
Sekarang adalah 50 (heksa)
Perintah DIV
Perintah ini digunakan untuk proses aritmetik pembagian , sama halnya dengan MUL perintah ini juga menjadikan register AX sebagai acuan untuk proses pembagian dan hasil akhirnya disimpan di register AX dan sisa dari pembagian di simpan di register DX. Perintahnya bisa ditulis sebagai berikut:
DIV (reg. Asal)
Contoh :
MOV AX, 2 ; AX = 2 DX=0
MOV BX,9 ; AX=2 DX =0
DIV BX ; AX = BX/AX = 4 DX = 1