twitter


2. PROCESSOR REGISTER
2.1 Register-register umum
 AX (accumulator), register ini melakukan proses aritmatika, proses input dan output
 BX (base register), register ini melakukan proses aritmatika, sama seperti register AX
 CX (register counter), register ini melakukan proses mencacah yang selalu menunjukan lokasi memori dari instruksi yang akan diakses
 DX , register yang melakukan proses aritmatika khusus perkalian dan pembagian
2.2 Segment Register
digunakan untuk menunjukan alamat dari satu segment, terdiri dari :
 CS (code segment), digunakan untuk menunjukkan tempat dari segmen yang sedang aktif
 DS (data segment), untuk menunjukkan tempat segmen dimana data-data pada program disimpan.
 ES (extra segment) digunakan untuk menunjukkan suatu alamat di memory, misalkan alamat memory video
 SS (stack segment) menunjukkan letak dari segmen yang digunakan oleh stack
2.3 Instruksi (IP)
merupakan sebagai lokasi memory dari tempat instruksi yang akan dieksekusi. register ini berpasang dengan cs
2.4 Pointer dan Indeks
Berfungsi sebagai pointer terhadap suatu lokasi memory yang terdiri dari SP(stack pointer),BP (break pointer), SI(stack index) dan DI(destination index) SI dan DI biasanya digunakan untuk mencatat alamat di memory
3. TRANSFER DATA
3.1 Transfer Segera
Masing-masing type transer segera (Move, Load, Store) terdiri dari OpCode segera diikuti oleh data. Data segera mungkin pindah juga ke register atau ke momori.
- Pemindahan Segera Data ke Register
Mnemonic untuk pindah satu huruf segera data ke register BX adalah :
MOV BX, data
Opcode BBh
Mnemonic pemindahan satu byte segera data ke register BL adalah :
MOV BL, data
Opcode B7h
- Pemindahan Segera Data ke Memori
Perintah ini terdiri dari dua byte, diikuti oleh lokasi memori, diikuti oleh satu atau dua byte data. Mnemonic untuk pemindahan dua byte segera data ke memori:
MOV M, data
Opcode C7h 06h
Mnemonic utuk pemindahan satu byte segera data ke memori
MOV M, data
Opcode C6h 06h
3.2 Transfer Data Langsung
Tidak seperti transfer segera, perintah transfer langsug berisi alamat dimana data perlu disimpan, atau dimana data untuk disimpan. Transfer langsung berisi Opcode diikuti oleh dua byte iformasi lokasi memori.
- Pemindahan Akumulator Langsung
Instruksi ini dipindahka ke lokasi memori dengan alamat khusus didalam 3 dan 4 byte dimasukan ke akumulator.
Mnemonic untuk pembebanan langsung akumulator adalah :
LAD alamat
Opcode A0h atau A1h
Opcode untuk 2 byte (huruf) : A1 / untuk 1 byte = A0
- Pennyimpanan Langsung Dari Akumulator
Mnemonic
STA alamat
Opcode A2h atau A3h
Opcode untuk 1 byte : A2h / untuk data huruf : A3h
- Pemindahan Secara Langsung Dari Register Ke Register
Mnnemoic untu pindah isi register AX ke BX adalah :
MOV BX, AX
Opcode 8Bh D8h
3.3 Transfer Data tak Langsung
Didalam transfer data tak langsung, lokasi memori data dipindahkan ke atau dari register. Register yang terpengaruh oleh transfer data tak langsung register BX, Destination Index (DI), Source Index (SI), Base Pointer (BP).
- Pemindahan Ke Register Dari Memori
Mnemonic unntuk pindah isi di memori ke register AX :
MOV AX, M
Opcode 8Bh XXh
XX = 04 h jika lokasi memori berasa dalam SI
XX = 05 h jika lokasi memori berada dalam DI
XX = 46 h jika lokasi memori berada dalam BP
XX = 07 h jika lokasi memori berada dalam BX
- Pemindahann Ke memori Dari Register
Mnemonic untuk memindahkan isi register AX ke lokasi memori adalah :
MOV M, AX
Opcode 89 h XX h
XX = 04 h jika lokasi memori berada didalam SI
XX = 05 h jika lokasi memori berada didalam DI
XX = 48 h jika lokasi memori berada didalam BP
XX = 07 h jika lokasi memori berada didalam BX
4. PROGRAM DAN ANALISA

4.1 Perintah yang ada pada debug
A : merakit instruksi simbolik (kode mesin)
D : menampilkan isi memory
E : memasukan data ke memori pada lokasi tertentu
G : menjalankan eksekusi program ke memori
N : menamai program
P : Eksekusi sekumpulan instruksi yang terkait
Q : quit yaitu keluar dari debug
R : menampilkan isi satu atau lebih register
T : trace isi sebuah register
U : menampilkan kode mesin ke kode simbolik
W : menulis program ke dis
Dibawah ini merupakan isi awal memori 0120 – 0130 pada Data Segmen 0800



- Dengan menggunakan debug, pindahkan isi 0120 ke 0130 pada data segment 0080

MOV AX,0080
MOV DS,AX
MOV SI,0120
MOV DI,0130
MOV AX,[SI]
MOV [DI],AX
INT 20
Analisa :
• MOV AX,0080 , artinya register AX berisi 0080
• MOV DS,AX, nilai 0080 pada register AX disalin nilainya pada data segmen
• MOV SI,0120, artinya nilai SI sama dengan 0120
• MOV DI,0130, artinya nilai DI sama dengan 0120
• MOV AX,[SI], artinya isi memori SI disalin pada register AX
• MOV [DI],AX, artinya nilai register AX dipindahkan pada isi memori DI
• INT 20 , artinya akhir dari program dimana program dapat keluar dari proses debug program tersebut.
Sehingga hasil akhirnya berupa 16 bit nilai pada alamat memori 0120 dan 0130 akan bernilai sama. Karena terjadi penyalinan isi memori SI yang dilakukan oleh DI.
- Dengan menggunakan debug, berdasarkan soal sebelumnya tukarkan isi pointer SI dan pointer DI.
MOV AX,0080
MOV DS,AX
MOV SI,0120
MOV DI,0130
MOV AX,[SI]
MOV BX,[DI]
MOV [SI],BX
MOV [DI],AX
INT 20

Analisa :
proses ini mirip dengan program sebelumnya hanya bedanya disini adalah melakukan penukaran antara kedua indeks bukan melakukan penyalinan. Nilai indeks SI ditransfer ke register AX, nilai indeks DI ditransfer ke register BX. Selanjutnya register BX yang berisi nilai DI ditransfer ke isi indeks SI, register AX yang berisi nilai SI ditransfer ke isi indeks DI. Sehingga akhir dari program ini adalah menukarkan nilai pada indeks SI dan nilai indeks DI.
Sehingga akan tampak pada outputnya berupa nilai pada memori 0120 dan 0130 akan bertukar sebanyak 16 bit yaitu dimulai dari 0120 – 0121 dengan 0130 - 0131
Proses Aritmatika, untuk manipulasi bit
ADD = penjumlahan
SUB = penguarangan
CMP = perbandingan
ADC = penjumlahan ada sisa (carry)
SBB = pengurangan dengan borrow
INC = penjumlahan dengan satu
DEC = pengurangan dengan satu
MUL = perkalian
DIV = pembagian
Menggunakan debug, memindahkan isi SI (0120) dimulai dari 0120-0126 dan DI (0130) dimulai dari 0130-0136 pada data segmen 0080

MOV AX,0080
MOV DS,AX
MOV SI,0120
MOV DI,0130
MOV CX,0007
MOV AX,[SI]
MOV [DI],AX
INC SI
INC DI
DEC CX
JNZ 010E
INT 20
Analisa :
Pada program kali ini kita telah menggunakan proses aritmatika dan proses lompatan.
Program ini merupakan program penyalinan nilai SI pada DI dengan lompatan sebanyak 7 kali yang dimulai dari 0120-0121 dengan 0130-0131. Register CX digunakan sebagai pencacah untuk menyimpan banyaknya pengulangan yang akan dilakukan. Dengan adanya pengulangan maka akan terjadi proses penyalinan data pada SI terhadap DI. Proses penyalinan datanya akan disesuaikan pada tiap lompatan, karena pada tiap lompatan SI dan DI akan mengalami increment yaitu penjumlahan memori ditambah dengan satu. Lompatan dilakukan kembali pada proses MOV AX,[SI] dimana proses ini ada pada IP 010E, saat melakukan lompatan nilai SI telah berubah menjadi increment dari yang sebelumnya, sehingga proses ini tidak akan menyebabkan nilai memori sebelumnya terganti. Begitu seterusnya lompatan terus dilakukan sampai nilai CX bernilai 0, lompatan berheti dan program selesai.
Soal :
Menukarkan isi SI dan DI pada data segmen 0900
SI 0110 – 011F
DI 0140 – 014F

MOV AX,0080
MOV DS,AX
MOV SI,0120
MOV DI,0130
MOV CX,0010
MOV AX,[SI]
MOV BX,[DI]
MOV [SI],BX
MOV [DI],AX
INC SI
INC DI
DEC CX
JNZ 011E
INT 20
Analisa :
Pada program ini bermaksud ingin menukarkan nilai memori 0120-012F dengan nilai memori 0130-013F. Agar dapat melakukan pengulangan sebanyak 15 kali maka register counter diisi dengan nilai CX,0010 artinya 0010 heksanya adalah 16. sedangkan jika kita membuat CX,000F maka untuk memori 012F dan 013F tidak akan terjadi pertukaran. Selanjutnya sama seperti proses penukaran sebelumnya memerlukan dua buah register. Sebagai tempat penampungan sementara. Dalam proses pengulangan terjadi INC SI dan INC DI artinya setiap kali dia melompat untuk melakukan penukaran memori SI dan DI mengalami penjumlahan dengan 1. proses ini berlagsung terus hingga nilai CX pada DEC CX bernilai nol dan program selesai.
Buatlah program untuk menjumlahkan data pada alamat memori 0120-012F dengan data pada alamata memori 0130-013F dan hasilnya disimpan di alamat 0150-015F
MOV AX,0800
MOV DS,AX
MOV SI,0120
MOV DI,0130
MOV BX,0150
MOV CX,0010
MOV AX,[SI]
ADD AX,[DI]
MOV [BX],AX
INC SI
INC DI
INC BX
DEC CX
JNZ 010E
INT 20



Analisa :
Pada program ini merupakan program menjumlahkan isi register SI dan DI dan hasilnya akan disimpan pada BX. Program ini hampir sama seperti program sebelumnya. Hanya bedanya pada program ini terdapat proses aritmatika berupa ADD AX,[DI] artinya nilai AX yang berisi memori SI dijumlahkan dengan memori DI dan hasil penjumlahannya disimpan pada register AX. Baru kemudian register AX disalin isinya pada register BX yang memiliki lokasi memori pada 0150-015F. Sehingga terjadilah proses penjumlahan yang hasilnya disimpan pada register BX. Sama seperti sebelumnya proses perulangan akan belangsung hingga nilai CX sama dengan 0.
Note :
Proses add bisa dilakukan antar register seperti : ADD AX,BX
Proses add bisa dilakukan antara register dengan memori seperti : ADD AX,[SI]
4. 2 Langkah membuat program pada turbo assembler (TASM)
.MODEL SMALL
.CODE
ORG 100H
LABEL1 :
//PROGRAM
END LABEL1

Cara menjalankan file TASM :
Setelah meng-copy isi TASM portable pada salah satu dirictory di komputer, lakukanlah pengetikkan program pada text editor dan file tersebut disimpan dalam file yang berekstensi *.asm. lakukan compile dan running melalui cmd tasm file.asm ; melakukan pengecekan apabila ada kesalahan pada program (pada saat ini akan muncul file.obj). tlink/t file.obj ; akan muncul file berupa file.com, yang berarti program sudah bisa dijalankan. Selanjutnya tinggal ketikan nama file nya saja setelah itu program akan berjalan
;Menampilkan ke layar berupa karakter ”a”
.MODEL SMALL
.CODE
ORG 100H
TAMPIL :
MOV AH,02H
MOV DL,61H
INT 21H
INT 20H
END TAMPIL
Analisis :
Merupakan suatu program menampilkan karakter ”a”. Pada sub proses terdapat MOV AH,02H memiliki fungsi untuk menampilkan satu karakter ke layar. MOV DL,61H artinya DL berisi ASCII yang diubah ke dalam heksa dari karakter ”a”, INT 21H berfungsi untuk menampilkan karakter ”a” ke layar, Sehingga tampillah ke layar berupa tampilan satu karakter dan selanjutnya INT 20H berfungsi untuk berhenti dan keluar dari dos.
;Program menampilkan karakter a c e
.MODEL SMALL
.CODE
ORG 100H
PROSES:
MOV AH,02H ; untuk menampilkan 1 karakter
MOV CX,0003 ; pencacah untuk banyaknya pengulangan
MOV DL,61H ; 61h untuk karakter ”a”
ULANG:
INT 21H
ADD DL,2H
DEC CX
JNZ ULANG ; melakukan pengulangan
INT 20H ; keluar dari program
END PROSES

Analisis :
Pada program ini akan menampilkan karakter a, c, e . untuk menampilkan karakter ini memerlukan pengulangan. Pada awal program akan menampilkan karakter ”a” kemudian proses penjumlahan dengan 2 nilai ASCII dari karakter a, sehingga dapat hasilnya berupa karakter a c e. Karena tiap penjumlahan tersebut yang membuat nilai ASCII bertambah menjadi 2 dan kemudian menampilkan karakternya.
4.3 Gerbang- gerbang Logika
yaitu AND, OR, XOR, NOT, SHL, SHR, ROL, ROR

INSTRUKSI GESER
Ada empat instruksi geser pada mikroprosesor 8088 / 8086 dan dua type dasar dapat dijalankan pada operasi geser yaitu geser logika dan geser aritmatika. Selain itu, masing-masing operasi dapat dijalankan ke kanan atau ke kiri. Perintah geser adalah
– shift logical left (SHL)
– shift arichmetic left (SAL)
– shift logical right (SHR)
– shift arichmetic right (SAR).

range geser diperbolehkan dari 1 sampai 255 bit

Mnemonic Maksud Format Flag Effect
SAL / SHL Geser ke kiri aritmatik / logic SAL/SHL, D, Count 0F, CF
SHL Geser ke kanan logical SHL D, Count 0F, CF
SAR Geser ke kanan SAR D, Count 0F, SF, ZF, AF, PF, C

INSTRUKSI PUTAR
Group dari instruksi yang lain adalah instruksi putar. Pada dasarnya instruksi ini sama dengan instruksi geser. Group ini terdiri dari :
• putar ke kiri (ROL)
• putar ke kanan (ROR)
• putar ke kiri dengan carry (RCL)
• putar ke kanan dengan carry (RCR).

perputaran itu dapat diambil tempat dari 1 sampai 255 posisi bit ke kiri atau ke kanan
;PROGRAM : menampilkan karakter angka 2 dengan manipulasi bit
.MODEL SMALL
.CODE
ORG 100H

PROSES:
MOV AH,02H
MOV BL,01H ; register BL berisi nilai 01h
ROL BL,1 ; memanipulasi bit
MOV DL,BL
ADD DL,30H
INT 21H
MOV AH,4CH
INT 21H
END PROSES
Analisis :
Program menampilkan angka 2 dengan menggunakan manipulasi bit, saat register BL berisi nilai 01h kemudian dilakukan manipulasi dengan memutar kekanan sebesar satu bit dari nilai register BL, setelah perputaran nilai register BL menjadi bernilai 2h.selanjutnya nilai dari register BL disalin pada register DL.kemudian terdapat penjumlahan nilai BL dengan nilai 30h sehingga hasilnya 32h yang merupakan ASCII dari angka 2. sehingga tampillah ke layar berupa angka 2.
;Program Menampilkan bilangan genap dengan manipulasi bit
.MODEL SMALL
.CODE
ORG 100H

PROSES:
MOV AH,02H
MOV CX,02
MOV BL,01H
SHL BL,1
MOV DL,BL
ADD DL,30H
INT 21H

ULANG :
ADD DL,2H
INT 21H
DEC CX
JNZ ULANG
INT 20H
END PROSES
Analisis :
Program untuk menampilkan bilangan genap ini menggunak manipulasi bit dengan menggunakan intruksi geser kekiri sebesar 1 bit dan menggunakan pengulangan juga. Pada program ini sama seperti program menampilkan angka 2 tadi. Bedanya pada program ini dilakukan pengulangan dengan menambahkan nilai DL yang sebelumny sudah berisi 32h dijumlahkan dengan 2h, sehingga akan tampil karakter dua tingkat dari angka 2 yaitu angka 4 begitu pula untuk angka 6 sehingga tampil bilangan genap tersebut.
Program ini juga berlaku untuk bilangan ganjil, bedanya hanya pada penempatan nilai awal dari ASCII angkanya saja.
;Program menampilkan alfabet dari Z sampai A
.MODEL SMALL
.CODE
ORG 100H

PROSES:
MOV AH,02H
MOV DL,'Z'
MOV CX, 26
ULANG:
INT 21H
DEC DL
LOOP ULANG
INT 20H
END PROSES
Analisis :
Merupakan program menampilkan karakter dari Z sampai A, menggunakan pengulangan dan langsung menggunakan lambang karakternya jika kita tidak mengetahui kode ASCII terhadap simbol tertentu. Pengulangan terjadi sebanyak 26 kali dari Z sampai A. Sehingga tampillah keluaran seperti diatas.
4.4 Subrotine Instruction
Subrutin merupakan suatu program yang terpisah dari program utamanya, dimana program tersebut akan dipanggil dengan CALL jika akan menjalankan operasinya dan menggunakan RET (return) untuk kembali ke program utamanya.
POLA PROGRAM :
-------------------------------------------------------------
NamaP CALL NEAR/FAR
+---------+
| Program |
+---------+
RET
NamaP ENDP
-------------------------------------------------------------


Contoh programnya :
.MODEL SMALL
.CODE
ORG 100h
Proses : CALL Cetak_Kar ; Panggil Cetak_Kar
INT 20h
Cetak_Kar PROC NEAR
MOV AH,02h
MOV DL,'S'
INT 21h ; Cetak karakter
RET ; Kembali kepada si pemanggil
Cetak_Kar ENDP ; END Procedures
END Proses
Analisis :
Program untuk menampilkan S dengan menggunakan prosedur dan makro. Program ini menggunakan subroutine menggunakan proses call dan ret yang. Pada program ini terdapat proses CALL cetak kar, artinya program utama menuju pada subrotine Cetak_kar. Dalam subroutine Cetak_kar juga terdapat RET yang berarti kembali ke program utama.

4.5 Condition Instruction
Yaitu suatu instruksi yang terjadi pada saat kondisi tertentu. Dalam bahasa C kita mengenal penggunaan if, while, do while, for, dan sebagainya. Dalam bahasa mesin kita mengenal condition instruction berupa lompatan. Ada dua jenis instruksi lompatan yaitu :

Lompatan tak bersyarat ; yaitu suatu instruksi yang melakukan pengulangan tanpa memerlukan syarat tertentu. Contoh : JMP , CALL, RET
Lompatan bersyarat : yaitu suatu instruksi pengulangan yang terjadi jika ada kondisi yang mempengaruhinya.
Contoh
JA/JNBE – Jump if above
JAE/JNB – Jump if above or equal
JB/JNA – Jump if below
JBE/JNA – Jump if below or equal
JG/JNLE – Jump if greater
JGE/JNL – Jump if greater or equal
JL/JNGE – Jump if less
JLE/JNG – Jump if less or equal
JE/JZ – Jump if equal
JNE/JNZ – Jump if not equal
JC – Jump if carry
JNC – Jump if not carry
JS – Jump if sign
JNS – Jump if not sign
JO – Jump if overflow
JNO – Jump if not overflow
JP/JPE – Jump if parity/parity even
JNP/JPO – Jump if not parity/parity odd

4.6 Stack Instruction
Menggunakan instruksi PUSH dan POP, instruksi PUSH berfungsi untuk menyimpan nilai dari suatu counter, sedangkan instruksi POP berfungsi untuk mengambil nilai dari conter untuk dipakai kembali
Contoh program yang diketik pada debug untuk melihat fungsi subroutine dari program.
MOV CX,0002
MOV BX,1A00
MOV SP,1FFF
LOOP1 PUSH CX
MOV AL,[BX]
MOV CX,0004
LOOP2 ADD AL,AL
DEC CX
JNZ LOOP2
MOV [BX],AL
POP CX
DEC CX
JENZ LOOP1 ; merupakan subroutin ke instruksi loop1
INT 20H
Analisis :
Pada program ini counter bernilai 2, register BX berisi 1A00, dan register Sp 1FFF. Kemudian nilai CX disimpan dengan menggunakan instruksi PUSH, selanjutnya memori BX disalin ke register AL, kemudian counter dinyatakan bernilai 4. kemudian DEC CX hingga CX bernilai 0, register AL memindahkan nilai ke memori BX, selanjutnya ada proses POP CX artinya memnggil POP yang bernilai 2 tadi dan kemudian melakukan pengulangan kembali ke LOOP1 sehingga dalam program ini AL melakukan penjumlahan sebanyak 8 kali.

4.7 Input Keyboard
Prosedur dan Macro














.MODEL SMALL
.CODE
ORG 100h
TData : JMP Proses
Kar DB ?
Klm DB ’CINTA MENYEBABKAN RINDU YANG PALING SENGSARA '
Proses : MOV CX,45
XOR BX,BX
Ulang :
MOV DL,Klm[BX]
MOV Kar,DL
CALL Cetak_Kar
INC BX
LOOP Ulang
INT 20h
Cetak_Kar PROC NEAR
PUSH AX
PUSH DX
MOV AH,02h
MOV DL,Kar
INT 21h
POP DX
POP AX
RET
Cetak_Kar ENDP
END TData

Analisis :
Program untuk menampilkan tulisan ini dilakukan dengan mencetak per karakter dimana DB (double byte) langsung diisi dengan string dan proses penampilan string itu tetap dicetak per-karakternya.

W Menulis program

0 komentar:

Posting Komentar