bahasa asember 2a

Tampilkan postingan dengan label bahasa asember 2a. Tampilkan semua postingan
Tampilkan postingan dengan label bahasa asember 2a. Tampilkan semua postingan

bahasa asembler 2a










Sesudah  melihat tabel mode video, mungkin ada yang heran mengapa sesudah 

mode 07h langsung ke mode 0Dh. sebetulnya  mode- mode di antara kedua mode ini 

ada, namun  hanya untuk perangkat video khusus seperti untuk keperluan PCjr 

yang sudah jarang. Mode video umum dari default DOS yaitu mode 03h yaitu teks

80X25. 

Dalam inisialisasi mode video ini pelajar  memakai 2 service dari

interupt 10h, yaitu untuk memperoleh  mode video aktif dan merubah mode video. 

Untuk memperoleh  mode video aktif pakai  service 0Fh. Sesudah 

pemanggilan service ini, maka beberapa nilai akan dikembalikan ke register

yaitu : 

 - AL = mode video aktif (lihat tabel mode video) 

 - AH = jumlah huruf    per kolom 

 - BH = halaman tampilan aktif 

Halaman tampilan aktif di sini maksudnya yaitu nomor dari halaman yang

sedang ditampilkan. Jumlah halaman yang ada  pada suatu sistem video

tergantung pada jumlah memori video yang tersedia. 

sedang  service 00h dipakai  untuk merubah mode video. Seperti biasa

register AH akan berisi nomor service yang dalam ini  yaitu 00h. sedang 

mode yang diinginkan diletakkan dalam register AL.

SetMode MACRO Mode 

 MOV AH,00 

 MOV AL,Mode 

 INT 10h 

 ENDM

Setiap kali dilakukan perubahan pada mode video, maka otomatis memori 

video juga akan dikosongkan dan sebagai akibatnya layar juga akan dibersihkan. 

TIP: 

sebab  setiap kali terjadi pergantian mode layar akan dibersihkan, kita 

bisa memanfaatkannya untuk membersihkan layar. contoh  pada modus Teks

default(03), dengan mengaktifkan mode 03 juga, maka isi dari layar akan

langsung terhapus. 

Bila pelajar  tidak menginginkan terjadinya efek pembersihan layar ini, maka

nomor mode video pada AL harus dijumlahkan dengan 128 atau dengan kata lain

bit ke-7 pada AL dihidupkan. Dengan cara ini maka isi layar yang lama tidak 

akan hilang sesudah  perubahan mode.


Apa itu string ? String yaitu suatu jenis data yang terdiri atas

kumpulan huruf   , angka, atau  simbol. Pada operasi string register SI dan 

DI berperan . Register SI(Source Index) dipakai 

untuk mencatat alamat dari sumber string yang akan dimanipulasi sedang  

register DI(Destination Index) dipakai  untuk mencatat alamat atau tempat

hasil dari manipulasi string. Operasi pada string secara lengkap bisa kita  

lihat pada tabel 19.1. 

+-------------------------------------------------------------+ 

| INTRUKSI ARTI | 

+-------------------------------------------------------------+ 

| CLD Clear Direction Flag | 

| STD Set Direction Flag | 

| | 

| CMPS Compare String | 

| CMPSB Compare String 1 Byte | 

| CMPSW Compare String 1 Word | 

| CMPSD Compare String 1 Double Word <80386 & 80486>| 

| | 

| LODS Load String | 

| LODSB Load String 1 Byte To AL | 

| LODSW Load String 1 Word To AX | 

| LODSD Load String 1 Double Word To EAX <80386 & | 

| 80486> | 

| MOVS Move String | 

| MOVSB Move String 1 Byte | 

| MOVSW Move String 1 Word | 

| MOVSD Move String 1 Double Word <80386 & 80486 > | 

| | 

| REP Repeat | 

| REPE Repeat If Equal | 

| REPZ Repeat If Zero | 

| REPNE Repeat If Not Equal | 

| REPNZ Repeat If Not Zero | 

| | 

| SCAS Scan String | 

| SCASB Scan String 1 Byte | 

| SCASW Scan String 1 Word | 

| SCASD Scan String 1 Double Word <80386 & 80486> | 

| | 

| STOS Store String | 

| STOSB Store AL at ES:DI String | 

| STOSW Store AX at ES:DI String | 

| STOSD Store EAX at ES:DI String <80386 & 80486> | 

+-------------------------------------------------------------+ 

gambar  kode   19.1. Perintah Untuk Operasi String

19.2. menyalinkan  DAN ARAH PROSES OPERASI STRING

seperti dengan perintah MOV, pada string dipakai  perintah

MOVS(Move String) untuk menyalin  data dari DS:SI menuju ES:DI. Pasangan DS:SI 

mencatat alamat dari sumber string sedang  ES:DI mencatat alamat hasil dari 

operasi string. 

Setiap kali terjadi operasi string(MOVS) maka register SI dan DI akan

berkurang atau bertambah sesuai dengan direction flag. kita  bisa menaikkan

nilai SI dan DI pada setiap proses dengan perintah CLD(Clear Direction Flag) 

dan STD(Set Direction Flag) untuk menurunkan nilai SI dan DI pada setiap 

proses. Pada saat program  dijalankan, secara otomatis direction flag akan 

menunjuk pada proses menaik. 

;/=================/; 

 .MODEL SMALL 

 .CODE 

 ORG 100h 

TData : JMP Proses 

 Kalimat DB 'Donald Duck$' ; 12 huruf    

 Buffer DB 12 DUP(?) 

Proses: 

 LEA SI,Kalimat ; SI = sumber 

 LEA DI,Buffer ; DI = tujuan 

 CLD ; Arah proses menaik 

 MOV CX,18 ; Banyaknya pengulangan 

Ulang : 

 MOVS ES:Buffer,Kalimat ; Pindahkan data pada

LOOP Ulang ; DS:SI ke ES:DI 

 MOV AH,09 ; 

 LEA DX,Buffer ; 

 INT 21h ; Cetak data pada buffer 

 INT 20h 

END TData 

program  19.1. pemakaian  perintah MOVS

Pada program  19.1. dapat kita  lihat bagaimana proses menyalinkan  data 

'Kalimat' ke 'buffer'. Bila program  19.1. dijalankan maka dilayar akan

ditampilkan: 

 Donald Duck

Hasil yang tercetak yaitu  data pada buffer yang diambil pada

variabel 'kalimat'. Perintah CLD dipakai  untuk memastikan agar  arah proses

menaik(SI dan DI ditambah setiap kali operasi). 

(STD)Menurun <--- DS:SI ---> Menaik(CLD) 

 _ 

 +---+---+---+---+---+---+---+---+---+---+---+ 

 | D | o | n | a | l | d | | D | u | c | k | 

 +---+---+---+---+---+---+---+---+---+---+---+ 

 Offset: 103 104 105 106 107 108 109 200 201 202 203 

sebab  sumber(kalimat) dan tujuan(buffer) pada program  19.1. dipakai  

tipe data byte(DB) maka oleh assembler perintah MOVS akan dijadikan MOVSB(Move

string byte), sehingga register SI dan DI setiap kali proses akan ditambah

dengan 1. Bila sumber dan tujuan didiartikan  dengan DW, maka assembler akan 

menjadikannya MOVSW(Move string word), dan setiap kali operasi SI dan DI akan

ditambah dengan 2. 

Selain dengan perintah MOVS, kita  bisa juga langsung memakai 

perintah MOVSB atau MOVSW.   ,, mengapa pelajar  harus 

memakai  MOVSB atau MOVSW, bila  dengan perintah MOVS assembler akan

merubahnya secara otomatis. Bila kita  memakai  perintah MOVSB atau MOVSW

secara langsung maka ini  akan membantu assembler sebab  ia tidak perlu

lagi menterjemahkannya, selain itu program  akan lebih efisien. 

Intruksi MOVSB dan MOVSW tidak memerlukan operand, oleh sebab  itu bila

pada program  19.1. ingin kita  rubah dengan MOVSB, maka pada perintah: 

MOVS ES:Buffer,Kalimat 

Bisa kita  ganti menjadi: 

 MOVSB 


Pada program  19.1. pelajar  masih memakai  pengulangan yang primitif.

sebetulnya  untuk operasi string ini assembler sudah  menyediakan beberapa 

pengulangan khusus, yaitu: 

-REP <Repeat> : Melakukan pengulangan suatu operasi string 

sebanyak CX kali(register CX akan dikurangi 1 secara otomatis). Ini yaitu  

bentuk pengulangan tanpa syarat yang akan melakukan pengulangan terus sampai

CX mencapai 0. 

-REPE <Repeat If Equal> : Melakukan pengulangan operasi string 

sebanyak CX kali atau bila sampai ada  ketidaksamaan pada kedua operand

yang membuat zero flag menjadi tidak aktif(ZF=0). 

-REPZ <Repeat If Zero> : Perintah ini sama dengan REPE. 

-REPNE <Repeat If Not Equal> : Melakukan pengulangan operasi string sebanyak 

CX kali atau bila sampai ada  kesamaan pada kedua operand yang membuat

zero flag menjadi aktif(ZF=1). 

-REPNZ <Repeat If Not Zero> : Perintah ini sama dengan REPNE. 

lihat : 

kita  hanya bisa memakai  bentuk pengulangan string 

bersyarat(REPE,REPZ,REPNE,REPNZ) ini ditambah  dengan perintah CMPS dan SCAS. 

ini  dipicu  hanya CMPS dan SCAS yang mempengaruhi zero flag. 

Bila pada program  19.1. dipakai  perulangan string, maka hasilnya akan

menjadi seperti program  19.2. 

;/======================/; 

 .MODEL SMALL 

 .CODE 

 ORG 100h 

TData : JMP Proses 

 Kalimat DB 'Donald Duck$' ; 12 huruf    

 Buffer DB 12 DUP(?) 

Proses: 

 LEA SI,Kalimat ; SI = sumber 

 LEA DI,Buffer ; DI = tujuan 

 CLD ; Arah proses menaik 

 MOV CX,18 ; Banyaknya pengulangan 

 REP MOVS ES:Buffer,Kalimat ; Pindahkan data 

 ; 'kalimat' ke 'Buffer' 

 MOV AH,09 ; 

 LEA DX,Buffer ; 

 INT 21h ; Cetak Data pada Buffer 

 INT 20h 

END TData 

program  19.2. pemakaian  perintah REP


Pada dasarnya perbandingan string sama dengan menyalinkan  string. Pada

perbandingan string juga ada  bentuk CMPS yang dapat berupa

CMPSB(perbandingan byte), CMPSW(perbandingan word) dan CMPSD(perbandingan

double word pada 80386 keatas). 

Pada string, perbandingan akan dilakukan pada lokasi memory DS:SI dan 

ES:DI. Perbandingan bisa dilakukan perByte, PerWord atau perDouble Word(Untuk

80386 keatas). 

Cetak_Klm MACRO Kal 

 MOV AH,09 

 LEA DX,Kal ; Macro untuk mencetak kalimat 

 INT 21h 

 ENDM 

;/=============================/; 

 .MODEL SMALL 

 .CODE 

 ORG 100h 

TData: JMP Proses 

 Kal1 DB 'akjsdfhakjvhdf' 

 Kal2 DB 'akjsdfhakPvhdf' 

 Pesan1 DB 'Kedua kalimat yang dibandingkan sama ! $' 

 Pesan2 DB 'Kedua kalimat yang dibandingkan tidak sama !$' 

Proses : 

 LEA SI,Kal1 

 LEA DI,Kal2 

 CLD ; Arah proses menaik 

 MOV CX,14 ; Banyaknya perbandingan dilakukan 

Ulang : 

 REP CMPSB ; Bandingkan selama sama 

 JNE TdkSama ; bila  tidak sama, lompat ke TdkSama 

 Cetak_Klm Pesan1 ; Cetak pesan tidak sama 

 JMP EXIT ; Selesai 

TdkSama: 

 Cetak_Klm Pesan2 ; Cetak pesan sama 

EXIT : 

 INT 20h 

END TData 

program  19.3. Perbandingan String

Bila program  19.3. dijalankan, maka pada layar akan ditampilkan: 

Kedua kalimat yang dibandingkan tidak sama ! 

Perlu kita  perhatikan, bahwa perbandingan akan dilakukan sebanyak 14

kali(Nilai CX) atau ada  ketidak-samaan pada kedua lokasi memory. Bila

ditemukan adanya ketidak samaan, perbandingan akan selesai dilakukan dan 

register SI dan DI tetap ditambah dengan satu, sehingga akan menunjuk pada

huruf    selanjutnya(sesudah huruf    yang tidak sama, pada contoh 19.3. 

berupa huruf    "v"). 

Operasi scan pada string dipakai  untuk membandingkan nilai pada

register AL, AX atau EAX(80386) dengan data pada ES:DI. sedang  syntax 

pemakaian SCAN ini yaitu: 

 SCANS Operand 

seperti dengan operasi pada string lainnya, bila dipakai  perintah

diatas, assembler masih akan menerjemahkannya dalam bentuk SCASB(perbandingan

AL dengan ES:DI), SCASW(perbandingan AX dengan ES:DI) atau SCASD(perbandingan

EAX dengan ES:DI) yang tidak memerlukan operand. 

Cetak_Klm MACRO Kal 

 MOV AH,09 ; 

 LEA DX,Kal ; 

 INT 21h ; Macro untuk mencetak kalimat 

 ENDM 

;/========================/; 

 .MODEL SMALL 

 .CODE 

 ORG 100h 

TData : JMP Proses 

 Cari DB 'akddtiuerndfalDfhdadfbn' ; 24 buah huruf    

 Ketemu DB ' huruf    ''s''yang dicari ketemu ! $' 

 Tidak DB ' huruf    ''s'' yang dicari tidak ketemu ! $' 

Proses: 

 LEA DI,Cari ; Lokasi dari string yang diScan 

 MOV AL,'s' ; huruf    yang dicari 

 MOV CX,24 ; Banyaknya proses Scan 

 REPNE SCASB ; Scan sebanyak CX atau sampai ZF=1 

 JNZ Tdk_Ada ; bila  tidak ketemu, maka lompat! 

 Cetak_Klm Ketemu ; Cetak ketemu 

 JMP Exit ; Habis 

Tdk_Ada: 

 Cetak_Klm Tidak ; Cetak tidak ketemu 

EXIT : INT 20h ; Selesai 

END TData 

program  19.4. Operasi Scan pada String

Bila program  19.4. dijalankan, maka pada layar akan ditampilkan: 

huruf    's' yang dicari tidak ketemu ! 


LODS yaitu  bentuk umum untuk mengambil string dari lokasi memory

DS:[SI] menuju AL, AX atau EAX. seperti dengan operasi string lainnya,

LODS juga akan diterjemahkan oleh assembler ke dalam bentuk LODSB(DS:[SI] ke

AL), LOSW(DS:[SI] ke AX) atau LODSD(DS:[SI] ke EAX<80386>). 

19.6. MENGISI STRING

STOS yaitu  bentuk umum untuk mengisi string dari AL,AX atau EAX 

menuju ES:[DI]. seperti dengan operasi string lainnya, STOS juga akan 

diterjemahkan oleh assembler ke dalam bentuk STOSB(AL ke ES:[DI]), STOSW(AX ke

ES:[DI]) atau STOSD(EAX ke ES:[DI] ). 

bila  Direction flag bernilai 0(dengan CLD) maka sesudah  intruksi STOS 

dijalankan register DI akan ditambah secara otomatis, sebaliknya bila 

Direction flag bernilai 1(dengan STD) maka register DI akan dikurang secara

otomatis. kita  bisa memakai  intruksi pengulangan pada string ditambah 

dengan perintah STOS ini.


Pada assembler, untuk mencetak suatu angka tidak  semudah mencetak

angka pada bahasa tingkat tinggi. ini  dipicu  baik oleh BIOS atau  

DOS tidak disediakan fungsinya. contoh  pelajar  memiliki  suatu angka 7, untuk 

mencetaknya pelajar  harus menerjemahkan ke dalam kode ASCII 55 dahulu barulah

mencetaknya. Demikian halnya bila ingin mencetak angka 127, maka pelajar  juga

harus menterjemahkannya dalam kode ASCII 49, 50 dan 55 untuk lalu  dicetak. 

Selanjutnya akan pelajar  lihat, bagaimana caranya untuk mencetak angka

dalam bentuk desimal atau  hexadesimal. 


Cara yang paling banyak dilakukan oleh program mer assembler, untuk

mencetak angka dalam bentuk desimal yaitu dengan membagi angka itu 

dengan 10. lalu  sisa pembagiannya disimpan dalam stack. Pada saat

pencetakan, angka-angka yang disimpan dalam stack akan diambil satu persatu 

untuk dicetak. 

contoh  kita  memiliki  angka 345, maka hasil pembagian dengan 10 

sebanyak 3 kali akan menghasilkan sisa berturut-turut 5, 4 dan 3. Sisa

pembagian ini lalu  disimpan pada stack. sebab  sifat stack yang LIFO <Last

In First Out>, maka pada saat pengambilan angka pada stack untuk dicetak akan

diambil berturut-turut angka 345 !. 

;/=======================/; 

 .MODEL SMALL 

 .CODE 

 ORG 100h 

TData : 

 JMP Proses 

 Test_Angka DW 65535 ; Angka yang akan dicetak 

Proses: 

 MOV AX,Test_Angka ; AX = angka yang akan dicetak 

 MOV BX,10 ; BX = penyebut 

 XOR CX,CX ; CX = 0 

Ulang : 

 XOR DX,DX ; Cegah sisa bagi menjadi pembilang ! 

 DIV BX ; Bagi angka yang akan dicetak dengan 10 

 PUSH DX ; Simpan sisa bagi dalam stack

INC CX ; CX ditambah 1 

 CMP AX,0 ; Apakah hasil bagi sudah habis ? 

 JNE Ulang ; bila  belum, ulangi lagi ! 

Cetak : 

 POP DX ; Ambil 1 angka yang disimpan 

 ADD DL,'0' ; Ubah angka itu  dalam kode ASCII 

 MOV AH,02 ; 

 INT 21h ; Cetak angka itu  

 LOOP Cetak ; ulangi 

 INT 20h 

END TData 

program  20.1. Mencetak angka dalam bentuk desimal

Bila program  20.1. dijalankan, maka pada layar akan ditampilkan: 

65535


Apa itu bilangan prima? Bilangan prima yaitu bilangan yang hanya habis

dibagi oleh dirinya sendiri dan 1. Contoh dari bilangan prima ini yaitu 2, 3,

5, dan sebagainya. 

Secara matematika, untuk mengetest apakah suatu bilangan yaitu prima

atau bukan, yaitu dengan cara pembagian. contoh  pelajar  ingin mengetahui

apakah angka 7 yaitu prima atau bukan, pelajar  akan mencoba untuk membaginya

dengan 6, 5, 4,..2. Ternyata semua sisa pembagiannya yaitu tidak nol atau

tidak habis dibagi. Sebagai kesimpulannya, angka 7 yaitu prima. 

Pada program  20.2. akan kita  lihat bagaimana mencari dan menapilkan 

semua angka prima yang terletak antara angka 0 sampai 1000. pelajar  akan 

memakai  program  20.1. untuk menampilkan angka prima yang sudah  berhasil 

dicari. 

Cetak_Klm MACRO Klm ; Macro untuk mencetak kalimat 

 MOV AH,09 

 LEA DX,Klm 

 INT 21h 

 ENDM 

CDesimal MACRO Angka 

 LOCAL Ulang, Cetak 

 MOV AX,Angka ; AX = angka yang akan dicetak 

 MOV BX,10 ; BX = penyebut 

 XOR CX,CX ; CX = 0 

Ulang : 

 XOR DX,DX ; Cegah sisa bagi menjadi pembilang ! 

 DIV BX ; Bagi angka yang akan dicetak dengan 10 

 PUSH DX ; Simpan sisa bagi dalam stack 

 INC CX ; CX ditambah 1 

 CMP AX,0 ; Apakah hasil bagi sudah habis ? 

 JNE Ulang ; bila  belum, ulangi lagi ! 

Cetak : 

 POP DX ; Ambil 1 angka yang disimpan

ADD DL,'0' ; Ubah 1 angka dalam kode ASCII 

 MOV AH,02 ; 

 INT 21h ; Cetak angka itu  

 LOOP Cetak ; ulangi 

 ENDM 

;/====================/; 

 .MODEL SMALL 

 .CODE 

 ORG 100h 

TData :JMP Awal 

 Batas DW 1000 

 Prima DW 0 

 I DW 2 

 J DW 2 

 Spasi DB ' $' 

 Header DB 9,9,9,'Bilangan Prima 1 sampai 1000 : ',13,10 

 DB 9,9,9,'------------------------',13,10,10,'$' 

Awal : 

 Cetak_Klm Header 

Proses : 

 MOV AX,Batas ; bila  bilangan yang dicek 

 CMP AX,I ; sudah sama dengan Batas 

 JE Exit ; maka selesai 

ForI : 

 MOV J,2 ; J untuk dibagi oleh I 

 MOV Prima,0 ; Prima = Tidak 

ForPrima: 

 MOV AX,Prima ; 

 CMP AX,0 ; Apakah prima = Tidak ? 

 JNE TambahI ; bila  Prima = Ya, lompat ke TambahI 

 MOV AX,I ; 

 CMP AX,J ; I = J ? 

 JNE Tidak ; bila  tidak sama, lompat ke Tidak 

 CDesimal I ; Cetak angka prima 

 Cetak_Klm Spasi ; Cetak spasi 

 MOV Prima,1 ; Prima = Ya 

 JMP TambahJ ; Lompat ke TambahJ 

Tidak : 

 MOV DX,0 ; 

 MOV AX,I ; 

 MOV BX,J ; 

 DIV BX ; Bagi I dengan J 

 CMP DX,0 ; Apakah sisa bagi=0? 

 JNE TambahJ ; bila  tidak sama lompat ke TambahJ 

 MOV Prima,1 ; Prima = Ya 

TambahJ : 

 INC J ; Tambah J dengan 1 

 JMP ForPrima ; Ulangi, bagi I dengan J 

TambahI : 

 INC I ; Tambah I dengan 1 

 JMP Proses ; Ulangi Cek I = prima atau bukan 

Exit : 

 INT 20h 

END TData 

program  20.2. Mencari dan menapilkan bilangan prima

Bila program  20.2. dijalankan, maka pada layar akan ditampilkan: 

 Bilangan Prima 0 sampai 1000 : 

 ----------------------------- 

2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 

79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157 163 

167 173 179 181 191 193 197 199 211 223 227 229 233 239 241 251 

257 263 269 271 277 281 283 293 307 311 313 317 331 337 347 349 

353 359 367 373 379 383 389 397 401 409 419 421 431 433 439 443 

449 457 461 463 467 479 487 491 499 503 509 521 523 541 547 557 

563 569 571 577 587 593 599 601 607 613 617 619 631 641 643 647 

653 659 661 673 677 683 691 701 709 719 727 733 739 743 751 757 

761 769 773 787 797 809 811 821 823 827 829 839 853 857 859 863 

877 881 883 887 907 911 919 929 937 941 947 953 967 971 977 983 

991 997 

Dengan program  20.2. bilangan prima antara 0 sampai 65535 dapat kita  

ditampilkan. 

20.4. MENCETAK ANGKA DALAM BENTUK HEXADESIMAL

Untuk mencetak angka dalam bentuk hexadesimal, yaitu lebih mudah

daripada mencetak angka delam bentuk desimal. ini  dipicu  sifat dari 

hexadesimal yang setiap angkanya terdiri atas 4 bit. 

Untuk itu kita  bisa membuat suatu tabel untuk hexadesimal yang terdiri

atas angka 0 sampai F. lalu  ambillah angka yang ingin dicetak secara 4 

bit untuk dipakai  sebagai penunjuk dalam mencetak angka itu . 

Cetak MACRO 

 MOV DL,Tabel_Hex[BX] ; MACRO untuk 

 MOV AH,02 ; mencetak 

 INT 21h ; huruf ke BX pada tabel_Hex 

 ENDM 

;/=========================/; 

 .MODEL SMALL 

 .CODE 

 ORG 100h 

TData : 

 JMP Proses 

 Tabel_Hex DB '0123456789ABCDEF' 

 Test_Angka DB 255 ; Angka yang akan dicetak 255=FFh 

Proses:


SUB BH,BH ; Jadikan BH=0 

 MOV BL,Test_Angka ; BL = angka yang akan dicetak 

 PUSH BX ; Simpan angka itu  

 MOV CL,4 ; Ambil 4 bit tinggi dari + 

 SHR BL,CL ; BL untuk dicetak 

 Cetak ; Cetak 1 angka hexa tingginya 

 POP BX ; Ambil angka yang disimpan 

 AND BL,0Fh ; Ambil 4 bit rendah dari + 

 Cetak ; BL untuk dicetak 

 INT 20h 

END TData 

program  20.3. Mencetak angka dalam bentuk hexadesimal

Bila program  20.3. dijalankan, maka pada layar akan tercetak: 

FF


Port bila diterjemahkan secara bebas, artinya yaitu pelabuhan atau

terminal, yaitu  tempat keluar masuk. Pengertian port dalam komputer

juga tidak jauh berbeda. Port yaitu  tempat komputer berkaitan  dengan

alat-alat lain(dunia luar). 

Untuk periferal yang dihubungkan dengan komputer seperti disk-drive, 

keyboard, monitor, mouse, printer dan speaker biasanya akan diberi nomor

portnya masing-masing. Pengontrolan kerja dari periferal yang dihubungkan

dengan komputer biasanya dilakukan melalui portnya. 

Oleh IBM, alat-alat yang dipakai  pada komputer PC sudah  diberi nomor 

portnya masing-masing(gambar  kode   21.1.) 

+-----------------------------+-----------+-----------+ 

| Peralatan | PC/XT | AT | 

+-----------------------------+-----------+-----------+ 

| DMA Controler (8237A-5) | 000-00F | 000-01F | 

| Inteerupt Controler (8295A) | 020-021 | 020-03F | 

| Timer | 040-043 | 040-05F | 

| PPI 8255A-5 | 060-063 | --- | 

| Keyboard (8042) | --- | 060-06F | 

| RealTime Clock (MC146818) | --- | 070-07F | 

| DMA Page Register | 080-083 | 080-09F | 

| Interrupt Controler 2(8259A)| --- | 0A0-0BF | 

| DMA Controller 2 (8237A-5) | --- | 0C0-0DF | 

| MathCo | --- | 0F0-0F1 | 

| MathCo | --- | 0F8-0FF | 

| Hard Drive Controler | 320-32F | 1F0-1F8 | 

| Game Port for Joysticks | 200-20F | 200-207 | 

| Expansion Unit | 210-217 | --- | 

| LPT2 | --- | 278-27F | 

| COM2 | 2F8-2FF | 2F8-2FF | 

| Prototype Card | 300-31F | 300-31F | 

| NetWork Card | --- | 360-36E | 

| LPT1 | 378-37F | 378-37F | 

| MDA & Parallel Interface | 3B0-3BF | 3B0-3BF |


| CGA | 3D0-3DF | 3D0-3DF | 

| Disk Controller | 3F0-3F7 | 3F0-3F7 | 

| COM1 | 3F8-3FF | 3F8-3FF | 

+-----------------------------+-----------+-----------+ 

gambar  kode   21.1. Tabel Nomor Port


Untuk melihat nilai pada suatu port dipakai  perintah: 

IN Reg,NoPort

"Reg" harus yaitu  register AL atau AX sedang  "NoPort" yaitu 

nomor port yang akan diakses. Perintah IN akan menyalinkan  nilai pada "NoPort"

ke dalam "Reg". Perintah IN akan menyalinkan  nilai pada port sebanyak 1 byte

bila dipakai  regiser AL atau 1 word bila dipakai  register AX. 

Nomor Port yang ingin diakses bisa dituliskan secara langsung bila 

nomor Port itu  dibawah 255(FFh). Bila nomor port diatas FFh, maka nomor

port itu  harus dimasukkan ke dalam register DX. 

Untuk memasukkan nilai pada suatu port, dipakai  perintah: 

OUT NoPort,Reg

Perintah OUT ini sama dengan perintah IN hanya perintah OUT dipakai 

untuk mengirimkan 1 byte(bila Reg=AL) atau 1 word(bila Reg=AX) pada port. Sama

halnya dengan perintah IN, bila nomor port yang diakses melebihi 255, harus 

dipakai  register DX. Contoh : 

 IN AL,60h ; ambil nilai 1 byte pada port 60h 

 OUT 60h,AL ; masukkan nilai AL pada port 60h

Pada dasarnya pengaksesan Port sama dengan pengaksesan memory, namun 

harus diingat bahwa alamat Port dan memory yaitu lain. Jadi contoh  alamat

Port 60h dan alamat memory 60h yaitu lain. Walupun keduanya memiliki  nilai

yang sama namun  sebetulnya  alamat keduanya tidak ada hubungan sama sekali. 

Pengaksesan Port sebetulnya  tidak  sesederhana yang dibayangkan oleh 

banyak pelajar . sebab  Port berkaitan  langsung dengan perangkat keras komputer

maka pelajar  harus mengetahui dengan jelas cara mengaksesnya. Ada Port yang cuma 

bisa ditulisi atau dibaca. 

Untuk Port yang memiliki  hubungan dua arah atau untuk baca tulis 

biasanya memiliki  suatu lagi Port yang dipakai  sebagai Port pengontrol. 

Port pengontrol ini berfungsi untuk mengatur modus dari operasi yang akan 

dilakukan pada  alat itu . Lebih jauh dari pengaksesan Port ini tidak

bisa penulis ungkapkan disini sebab  hal itu  sangat tergantung dari jenis 

perangkat kerasnya. 

Untuk membunyikan speaker, suka atau tidak kita  harus mengakses port. 

ini  dipicu  sampai saat ini tidak adanya fasilitas dari DOS atau 

BIOS untuk membunyikan speaker. Pada bagian ini akan pelajar  lihat teknik-teknik

pemprograman   dari speaker agar  dapat menghasilkan suatu frekwensi atau nada. 


Port 61h yaitu  suatu I/O port yang dipakai  untuk berbagai

keperluan, diantaranya oleh speaker pada bit 0 dan 1. Kedua bit ini

dihubungkan pada speaker melalui gerbang logika "AND" sehingga untuk

mengaktifkan suara pada speaker ini maka bit ke 0 dan 1 dari port 61h ini

harus bernilai 1. Ingatlah, pengaktifan pada speaker ini jangan sampai

mengganggu bit lainnya. 

<<<<< Gbr212.PIX >>>>>> 

gambar  kode   21.2. Skema Rangkaian Speaker pada PC 

Readkey MACRO ; Macro untuk 

 MOV AH,00 ; menunggu masukan dari keyboard 

 INT 16h 

 ENDM 

;/=============================/; 

 .MODEL SMALL 

 .CODE 

 ORG 100h 

Proses : 

 IN AL,61h ; Ambil data port 61h <Speaker> 

 OR AL,00000011b ; Jadikan Bit ke 0 & 1 menjadi 1 

 OUT 61h,AL ; Bunyikan speaker 

 Readkey ; Menunggu penekanan sembarang tombol 

 AND AL,11111100b ; Jadikan bit ke 0 & 1 menjadi 0 

 OUT 61h,AL ; Matikan speaker 

 INT 20h ; selesai 

END Proses 

program  21.1. Mengaktifkan speaker

Untuk menghasilkan suatu frekwensi yang tepat dengan program  21.1.

memang agak sulit, sebab  frekwensi yang terjadi sangat tergantung dari 

kecepatan komputer yang bersangkutan. Bila pada komputer kita  ada  tombol

TURBO, cobalah ubah-ubah kecepatan dari komputer untuk melihat perubahan dari

frekwensi yang dihasilkan. 


Untuk menghasilkan suatu frekwensi yang tidak terpengaruh oleh kecepatan

komputer, bisa dilakukan dengan memrogram timer <pewaktu> yang dipakai  oleh

speaker ini. Frekwensi yang dihasilkan dengan memakai  tetapan waktu akan 

lebih mudah dihasilkan dan lebih tepat. 

PIT <program mable Interval Timer> yaitu  suatu timer yang dapat

diprogram . Keluaran dari PIT ini dipakai  antara lain oleh detik jam

waktu(IRQ0) dan RAM dinamik untuk me-refresh dirinya. Keluaran ketiga (OUT2)

dari PIT untuk menghasilkan sinyal gelombang persegi yang dipakai  oleh

speaker. 

sebab  frekwensi yang dihasilkan oleh PIT ini dapat diatur melalui

perangkat lunak  maka dapat dimanfaatkan untuk membentuk nada pada speaker. 

Untuk memrogram timer<PIT> ini, pertama-tama pelajar  harus mengirimkan

nilai B6h pada port 43h. Pengiriman nilai ini akan memicu  port 42h siap

untuk menerima nilai 16 bit untuk dijadikan tetapan perhitungan<counter>.

Untuk nilai counter yang diberikan pada port 43h ini dipakai  rumus : 

 Counter = 123540h / Hz Hz=<frekwensi ingin dihasilkan> 

Hasil dari perhitungan ini lalu  dimasukkan kedalam timer melalui 

port 42h dan akan disimpan dalam regiser internal 16 bit. namun  sebab  Timer

ini hanya memiliki  8 bit masukan maka pelajar  tidak bisa memasukkan 16 bit

sekaligus. ini  dapat kita  bayangkan sebagai suatu kamar yang dapat

menampung 2 pelajar namun  pintunya hanya dapat dilalui oleh 1 pelajar . Untuk itu

masukkanlah byte rendahnya terlebih dahulu lalu  masukkan byte tingginya. 

Sesudah  timer diprogram , maka speaker tinggal diaktifkan untuk

menghasilkan frekwensi yang sesuai dengan timer. Secara teori frekwensi yang

dapat dihasilkan berupa 1 Hz - 1,193 Mhz (bandingkan dengan kemampuan dengar

manusia 20 Hz - 20 Khz). 

Dengan frekwensi yang tepat, sebetulnya  banyak hal yang dapat pelajar 

lakukan. pelajar  dapat saja membuat program  Pengusir Nyamuk ataupun program 

pengusir Burung dan Tikus. Binatang- binatang ini biasanya takut pada

frekwensi yang tinggi seperti frekwensi 20 Khz - 40 Khz. Untuk mengusir nyamuk

frekwensi 25 Khz sudah memadai, namun  bila kita  ingin mengusir tikus

sebaikkan frekwensinya dibuat suatu layangan. Artinya frekwensi yang

dihasilkan diubah-ubah antara 20 Khz - 40 Khz. 

NoPCsound MACRO 

 IN AL,61h ; Ambil data Port 61h

AND AL,0FCh ; Matikan bit ke 6 & 7 

 OUT 61h,AL ; Masukkan nilainya pada Port 61h 

 ENDM 

PCsound MACRO Hz 

 MOV AL,0B6h ; 

 OUT 43h,AL ; Persiapkan Timer 

 MOV DX,0012h ; 

 MOV AX,3540h ; Bagi 123540H dengan frekwensi 

 MOV BX,Hz ; yang akan dihasilkan. 

 DIV BX ; < 123540:Hz > , hasil pada AX 

 OUT 42h,AL ; Masukkan byte rendah dahulu. 

 MOV AL,AH ; Port hanya dapat melalui AL/AX 

 OUT 42h,AL ; Masukkan byte tingginya. 

 IN AL,61h ; Ambil data port 61h <Speaker> 

 OR AL,03 ; Jadikan Bit ke 6 & 7 menjadi 1 

 OUT 61h,AL ; Bunyikan speaker 

 ENDM 

;/=================================/; 

 .MODEL SMALL 

 .CODE 

 ORG 100h 

Proses : 

 PCsound 25000 ; Frekwensi untuk mengusir nyamuk. 

 MOV AH,00 

 INT 16h ; Readkey 

 NoPCsound ; Matikan suara. 

 INT 20h ; selesai 

END Proses 

program  21.2. Pengontrolan speaker dan timer 

Frekwensi yang dihasilkan pada program  21.2. tidak akan terdengar, oleh

sebab  itu bila kita  ingin mendengar suatu frekwensi cobalah ubah nilai 25000 

dengan nilai 20 - 20000.


program  format, copy dan delete dari Dos tentunya sudah tidak asing lagi

bagi pelajar . contoh  pada program  copy, untuk menyalin  suatu file yang bernama 

SS.ASM pada drive B: menuju drive C: dengan nama TT.ASM dapat pelajar  tuliskan

dengan: 

 Parameter 1 Parameter 2 

 +---+----++---+----+ 

COPY B:SS.ASM C:TT.ASM

Yang dimaksud dengan parameter program  yaitu semua tulisan yang

ada  dibelakang kata copy(B:SS.ASM dan C:TT.ASM). B:SS.ASM dikatakan

sebagai parameter pertama sedang  C:TT.ASM dikatakan sebagai parameter

kedua. 

Masih ingatkah kita , pada setiap program  COM pelajar  selalu menyediakan

100h byte kosong dengan perintah ORG 100h. 100h byte kosong kosong ini

dinamakan sebagai PSP atau program  Segment Prefix dan dipakai  oleh DOS untuk

mengendalikan  jalannya program  pelajar . Salah satu pengontrolan yang dilakukan,

yaitu  pada  paramater program . 

PSP sebetulnya  masih dibagi-bagi lagi menjadi bagian-bagian yang

tugasnya berbeda-beda. Salah satu bagian yang mengatur pada  parameter

program  yaitu yang dinamakan sebagai FCB(File Control Block). FCB ini terdiri 

atas 2 bagian, yaitu FCB1 dan FCB2. 

FCB1 bertugas menampung parameter pertama dari program , dan berada pada

offset 5Ch sampai 6Bh(16 Byte). sedang  FCB2 bertugas menampung parameter 

kedua dari program , dan berada pada offset 6Ch sampai 7Bh(16 Byte). 

Ingatlah, bila kita  menjalankan sebuah program  pada prompt Dos maka yang

terakhir dimasukkan pastilah huruf    Enter(0Dh). 

Cetak_Klm MACRO Klm ; Macro untuk mencetak kalimat 

 LEA DX,Klm 

 MOV AH,09 

 INT 21h 

 ENDM 

Cetak_Kar MACRO Kar ; Macro untuk mencetak huruf    

 MOV DL,Kar 

 MOV AH,02 

 INT 21h

ENDM 

;/=======================/; 

 .MODEL SMALL 

 .CODE 

 ORG 100h 

TData : JMP Proses 

 Para1 DB ' Parameter pertama : $' 

 Para2 DB 13,10,' Parameter kedua : $' 

Proses : Cetak_Klm Para1 ; Cetak kalimat Para1 

 MOV BX,5Ch ; Alamat FCB1 

 MOV CX,16 

Ulang1 : 

 Cetak_Kar [BX] ; Cetak parameter pertama (FCB1) 

 INC BX 

 LOOP Ulang1 

 Cetak_Klm Para2 ; Cetak kalimat Para2 

 MOV CX,16 

Ulang2 : 

 Cetak_Kar [BX] ; Cetak parameter kedua (FCB2) 

 INC BX 

 LOOP Ulang2 

 INT 20h 

END TData 

program  22.1. Mengambil parameter 1 dan 2 program  dari FCB

Untuk mencoba dengan program  22.1., masukkanlah parameter program . Hasil

eksekusinya akan tampak seperti: 

C:\> FCB12 F111 F222 

Parameter pertama : F111 

Parameter kedua : F222 

22.3. DATA TRANSFER AREA

Dengan FCB pelajar  hanya mampu mengambil 2 parameter dari program .

Bagaimana bila  parameter yang dimasukkan lebih dari 2?. Untuk itu kita  harus

mengakses bagian lain dari PSP yang dinamakan sebagai DTA atau Data Tranfer

Area. DTA mencatat semua parameter yang dimasukkan pada program . 

DTA terletak mulai pada offset ke 80h sampai FFh dari PSP. Bila kita

memasukkan parameter dalam program , seperti: 

C:\> FCB 111 

Maka pada DTA, offset ke 80h akan berisi banyaknya huruf    yang

diketikkan termasuk huruf    enter(Dalam contoh=04). Pada offset ke 81h akan 

berisi spasi(20h), dan pada offset ke 82h berisi huruf    pertama parameter

program . 

Cetak_Klm MACRO Klm ; Macro untuk mencetak kalimat 

 LEA DX,Klm 

 MOV AH,09 

 INT 21h 

 ENDM 

Cetak_Kar MACRO Kar ; Macro untuk mencetak huruf    

 MOV DL,Kar 

 MOV AH,02 

 INT 21h 

 ENDM 

;/==========================/; 

 .MODEL SMALL 

 .CODE 

 ORG 100h 

TData : JMP Proses 

 Para DB 13,10,' Parameter program  : $' 

 T_Enter EQU 0Dh 

 Spasi EQU 20h 

Proses : Cetak_Klm Para ; Cetak kalimat Para1 

 MOV BX,81h ; Alamat DTA 

Ulang : 

 INC BX ; BX = Alamat DTA 

 CMP BYTE PTR [BX],T_Enter ; Apakah tombol Enter ? 

 JE Exit ; Ya! Lompat ke Exit 

 Cetak_Kar [BX] ; Bukan! Cetak huruf    tsb 

 CMP BYTE PTR [BX],Spasi ; Apakah spasi ? 

 JNE Ulang ; Bukan, lompat ke ulang 

 Cetak_Klm Para ; Ya! Cetak kalimat 

 JMP Ulang ; Lompat ke ulang 

Exit : 

 INT 20h 

END TData 

program  22.2. Mengambil parameter program  dari DTA

Bila program  22.2. dijalankan seperti:
C:\>DTA P111 P222 P333 

 Parameter program  : P111 

 Parameter program  : P222 

 Parameter program  : P333
OPERASI PADA FILE 

Pada Dos versi 1.0 penanganan file dilakukan melalui FCB. System ini 

muncul, sebagai hasil dari kompabilitas dengan CP/M. Ternyata penanganan file

melalui FCB ini banyak kendalanya, seperti kemampuan manampung nama file yang 

hanya 11 huruf   . sebab  hanya mampu menampung 11 huruf    maka nama untuk

directory tidak akan tertampung sehingga Dos versi awal tidak bisa menangani

adanya directory. Penanganan file melalui FCB ini sudah ketinggalan zaman dan 

sudah  banyak ditinggalkan oleh program mer-program mer. sebab  itu maka pada

buku ini, pelajar  hanya akan membahasnya sekilas. 

Pada Dos versi 2.0 diperkenalkan suatu bentuk penanganan file yang baru.

Penanganan file ini dinamakan File Handle yang mirip dengan fungsi pada UNIX. 

Dengan file handle penanganan pada  directory dengan mudah dilakukan.

Operasi file yang dilakukan dengan file handle harus dibuku(Open) terlebih 

dahulu, selain itu file handle bekerja dengan apa yang dinamakan dengan 

ASCIIZ. ASCIIZ atau ASCII+Zero byte yaitu suatu teknik penulisan string yang 

diakhiri dengan byte nol(0) atau huruf    Null. Contohnya dalam penulisan nama 

file: 

Nama DB 'DATA.DAT ',0 <----- ASCIIZ 


Untuk menciptakan suatu file baru, dapat dipakai  fungsi 3Ch dari

intrupsi 21h. sedang  aturan dari pemakaian interupsi ini yaitu dengan

memasukkan nilai servis 3Ch pada AH, pasangan register DS:DX menunjuk pada

nama file ASCIIZ yang akan diciptakan, CX diisi dengan atribut file atau 

maksud dari pembukaan file itu  dengan spesifikasi nomor Bit: 

- 0 untuk File Read Only, yaitu file yang dibuka hanya untuk dibaca. 

- 1 untuk File Hidden, yaitu file yang disembunyikan. Jenis file ini tidak 

akan ditampilkan pada proses DIR dari DOS. 

- 2 untuk File System, yaitu file yang akan otomatis dijalankan pada saat 

BOOT. Jenis file ini biasanya berkaitan erat dengan mesin komputer dan 

biasanya ditanda  i dengan ektensi SYS. 

- 3 untuk Volume label. 

- 4 untuk Nama subdirectory. 

- 5 untuk File Archive, yaitu suatu bentuk file normal.
bila  fungsi ini berhasil menciptakan suatu file baru, maka Carry flag

akan dijadikan 0(Clear) dan AX akan berisi nomor handle(Nomor pembukaan file).

Setiap file yang dibuka akan memiliki  nomor handle yang berbeda-beda, biasanya

bernilai 5 keatas. Sebaliknya bila  proses penciptaan file gagal, maka Carry 

flag akan dijadikan 1(Set) dan AX akan berisi kode kesalahan. sedang  kode

kesalahan yang sering terjadi yaitu: 

- 03h artinya Path tidak ditemukan 

- 04h artinya Tidak ada handle 

- 05h artinya akses pada  file ditolak 

Dalam memakai  fungsi ini kita  harus berhati-hati. Bila pada proses 

penciptaan file baru dan ternyata file itu  sudah  ada, maka fungsi ini

akan menjadikan file itu  menjadi nol. Untuk menghindari ini  kita  bisa

memakai  fungsi 4Eh untuk mengecek apakah file yang akan diciptakan sudah 

ada atau belum. 

Create MACRO NamaFile, Attribut, Handle 

 PUSH CX 

 PUSH DX 

 MOV AH,3Ch 

 MOV CX,Attribut 

 LEA DX,NamaFile 

 INT 21h 

 MOV Handle,AX 

 POP DX 

 POP CX 

 ENDM


Untuk membuka suatu file yang sudah  ada, dipakai  fungsi 3Dh dari 

interupsi 21h. sedang  aturan dari pemakaiannya yaitu: 

 INPUT: 

 AH = 3Dh 

 AL = Tujuan pembukaan file: 

 - 00 hanya untuk dibaca (Read Only) 

 - 01 hanya untuk ditulisi (Write Only) 

 - 02 untuk ditulis dan dibaca (Read/Write) 

 DS:DX = Nama file dengan ASCIIZ

OUTPUT: 

 bila  berhasil, maka CF = 0 dan AX = Nomor handle 

 bila  tidak berhasil, maka CF = 1 dan AX = kode kesalahan 

Hati-hatilah: 

Pembukaan file yang dilakukan oeh fungsi ini akan memindahkan pointer

file pada awal file. Bila kita  membuka suatu file dengan fungsi ini dan 

langsung menulis pada file itu , maka isi dari file itu  akan 

tertimpa. Untuk menghindari ini pointer file harus dipindahkan pada akhir file 

sesudah pembukaan. sedang  contoh dari macro untuk membuka file dengan fungsi

3Dh ini yaitu: 

Open MACRO NamaFile,Attribut,Handle 

 PUSH DX 

 MOV AH,3Dh 

 MOV AL,Attribut 

 LEA DX,NamaFile 

 INT 21h 

 MOV Handle,AX 

 POP DX 

 ENDM


Untuk menutup suatu file yang sudah  dibuka, dapat dipakai  fungsi ke 

3Eh dari interupsi 21h. Fungsi ini akan menutup file yang dibuka dengan 3Dh.

Untuk memakai nya isilah AH dengan 3Eh dan BX dengan nomor handle file

itu . sedang  contoh dari macro untuk menutup suatu file yang terbuka

yaitu: 

Close MACRO Handle 

 PUSH BX 

 MOV AH,3Eh 

 MOV BX,Handle 

 INT 21h 

 POP BX 

 ENDM

sebetulnya  tidak semua file yang sudah  dibuka harus ditutup dengan

interupsi khusus. Bila kita  mengakhiri program  tidak dengan interupsi 20h 

namun  dengan fungsi 4Ch dari interupsi 21h, maka penutupan file yang terbuka

sebetulnya  tidak perlu. ini  dipicu  interupsi ini akan menutup semua

file yang terbuka secara otomatis. Mengenai fungsi 4Ch dari interupsi 21h ini

akan pelajar  bahas lebih lanjut nantinya. 

Ingatlah:_ 

Kemampuan Dos dalam menangani file yang terbuka yaitu terbatas. 

Kemampuan Dos dalam menangani file yang terbuka dapat diatur melalui

Config.Sys dengan perintah: Files=n. 


Pembacaan file handle dapat dilakukan melalui fungsi 3Fh dari interupsi

21h. sedang  aturan dari pemakaian fungsi ini yaitu: 

 INPUT: 

 AH = 3Fh 

 CX = Banyaknya data(dalam byte) yang ingin dibaca 

 BX = Nomor File handle 

 DS:DX = Alamat buffer tempat hasil pembacaan akan disimpan 

 OUTPUT: 

 bila  berhasil, maka CF = 0 dan AX = Jumlah byte yang sudah  

 dibaca. Bila AX=0 atau AX < CX artinya akhir file sudah  

 dicapai. 

 bila  tidak berhasil, maka CF = 1 dan AX = kode kesalahan 

sedang  contoh dari pemakaian nya dalam macro yaitu: 

Read MACRO Handle,Number,Buffer 

 PUSH BX 

 PUSH CX 

 PUSH DX 

 MOV AH,3Fh 

 MOV BX,Handle 

 MOV CX,Number 

 LEA DX,Buffer 

 INT 21h 

 POP DX 

 POP CX 

 POP BX 

 ENDM


lihat : 

Fungsi ini akan membaca banyaknya data dari suatu file dari posisi yang 

tidak tetap, tergantung dari pointer file pada saat itu. Fungsi ini hanya

mampu membaca sebesar 1 segment(64 KB) dalam sekali pembacaan. Untuk membaca 

file yang besar kita  bisa membacanya dengan proses looping. pada proses 

looping, posisi pointer tidak perlu diatur lagi sebab  setiap kali selesai 

pembacaan, pointer akan diatur secara otomatis. 


Untuk menulisi file dapat dipakai  fungsi 40h dari interupsi 21h.

sedang  aturan dari pemakaian fungsi ini yaitu: 

 INPUT: 

 AH = 40h 

 BX = Nomor File Handle 

 CX = Banyaknya data(dalam byte) yang akan dituliskan 

 DS:DX = Alamat dari data yang akan ditulis ke file 

 OUTPUT: 

 bila  berhasil, maka CF = 0 dan AX = Jumlah byte yang berhasil 

 dituliskan. 

 bila  tidak berhasil, maka CF = 1 dan AX = kode kesalahan 

sedang  contoh macro dari pemakaian  fungsi ini yaitu: 

Write MACRO Handle,Number,Buffer 

 PUSH BX 

 PUSH CX 

 PUSH DX 

 MOV AH,40h 

 MOV BX,Handle 

 MOV CX,Number 

 LEA DX,Buffer 

 INT 21h 

 POP DX 

 POP CX 

 POP BX 

 ENDM


Fungsi ini hampir sama dengan fungsi 3Fh. Dengan melihat pada nilai AX

sesudah  operasi penulisan berhasil, maka dapat diketahui: 

- Bila AX = CX, artinya operasi penulisan berhasil dengan sukses. 

- Bila AX < CX, artinya penulisan hanya berhasil menulis sebagian 

 dari data yang seharusnya dituliskan. 

Cetak MACRO Kal ; Macro untuk mencetak 

 MOV AH,09 ; kalimat 

 LEA DX,Kal 

 INT 21h 

 ENDM 

;/=====================/; 

 .MODEL SMALL 

 .CODE 

 ORG 100h 

TData : JMP MULAI 

Sumber DB 'Nama file sumber : $' 

Tujuan DB 13,10,'Nama file tujuan : $' 

File1 DB 70,?,70 Dup (0) 

File2 DB 70,?,70 Dup (0) 

Handle1 DW ? 

Handle2 DW ? 

Good DB 13,10,'menyalinkan  File sudah  dilakukan  ....$' 

Err1 DB 13,10,'Salah perintah .....$' 

Err2 DB 13,10,'File tidak ditemukan .....$' 

Err3 DB 13,10,'Path tidak ditemukan .....$' 

Err4 DB 13,10,'File yang dibuka, kebanyakan ...$' 

Err6 DB 13,10,'pemakaian  File handle yang salah ..$' 

Err15 DB 13,10,'Spesifikasi Drive yang salah ....$' 

Err21 DB 13,10,'Drive tidak siap .....$' 

Err29 DB 13,10,'Kesalahan penulisan ....$' 

Err30 DB 13,10,'Kesalahan pembacaan ....$' 

ErrL DB 13,10,'Kesalahan yang lain .....$' 

Mulai : 

 MOV AX,3 ; Ganti mode 

 INT 10H ; untuk membersihkan layar 

 TanyaF1 : 

 Cetak Sumber ; Cetak kalimat "sumber" 

 MOV AH,0AH ; 

 LEA DX,File1 ; Tanya nama file yang ingin 

 INT 21h ; dicopy 

 LEA BX,File1 ; bila  user tidak mengetikkan 

 INC BX ; nama file yang ingin dicopy 

 CMP BYTE PTR [BX],0 ; atau langsung ditekan enter 

 JE TanyaF1 ; maka tanya lagi 

 Ulang1 : 

 INC BX ; 

 CMP BYTE PTR [BX],0Dh ; 

 JNE Ulang1 ; Jadikan file "sumber" 

 MOV BYTE PTR [BX],0 ; menjadi ASCIZZ 

TanyaF2 : 

 Cetak Tujuan ; Cetak kalimat "tujuan"

MOV AH,0AH ; Tanya nama file 

 LEA DX,File2 ; "tujuan" atau nama file 

 Int 21h ; hasil menyalinkan  

 LEA BX,File2 ; bila  user tidak mengetikkan 

 INC BX ; nama file untuk "tujuan" 

 CMP BYTE PTR [BX],0 ; atau langsung ditekan enter 

 JE TanyaF2 ; maka tanya lagi 

 Ulang2 : 

 INC BX ; 

 CMP BYTE PTR [BX],0Dh ; 

 JNE Ulang2 ; Jadikan file Tujuan 

 MOV BYTE PTR [BX],0 ; menjadi ASCIZZ 

 MOV AH,3DH ; Servis buka file 

 MOV AL,0 ; Mode file Read Only 

 LEA DX,File1 + 2 ; Nama file "sumber" 

 INT 21h ; 

 JC Er ; bila  error, lompat 

 MOV Handle1,AX ; AX=nomor handle file "sumber" 

 MOV AH,3CH ; Buat file baru 

 LEA DX,File2 + 2 ; Dengan nama "tujuan" 

 MOV CX,00100000b ; File Archive / normal 

 Int 21h ; 

 JC Er ; bila  error, lompat 

 MOV Handle2,AX ; AX=nomor handle file "tujuan" 

 Copy : 

 MOV AH,3FH ; servis baca file 

 MOV BX,Handle1 ; Baca file "sumber" 

 MOV CX,1024 ; Banyaknya pembacaan 

 LEA DX,Buffer ; Lokasi penampungan 

 INT 21h ; 

 JC Er ; bila  error, lompat 

 CMP AX, 0 ; Pembacaan file sudah EOF? 

 JE Selesai ; Ya, exit 

 MOV CX,AX ; Banyaknya data 

 MOV AH,40h ; Servis tulis file 

 MOV BX,Handle2 ; Tulis file "Tujuan" 

 LEA DX,Buffer ; Lokasi data 

 Int 21h 

 JC Er ; bila  error, lompat 

 CMP CX,AX ; File habis dicopy? 

 JE Copy ; belum, ulangi 

 Selesai : 

 Cetak Good ; menyalinkan  selesai 

 MOV AH,3Fh ; Tutup file 

 MOV BX,Handle1 ; "sumber" 

 INT 21h ; 

 MOV BX,Handle2 ; Tutup file 

 INT 21h ; "Tujuan" 

 EXIT : 

 INT 20h ; Selesai 

 Er : 

 CMP AX,1 

 JNE NotErr1 

 Cetak Err1 

 JMP EXIT 

 NotErr1 : 

 CMP AX,2

JNE NotErr2 

 Cetak Err2 

 JMP EXIT 

 NotErr2 : 

 CMP AX,3 

 JNE NotErr3 

 Cetak Err3 

 JMP EXIT 

 NotErr3 : 

 CMP AX,4 

 JNE NotErr4 

 Cetak Err4 

 JMP EXIT 

 NotErr4 : 

 CMP AX,6 

 JNE NotErr6 

 Cetak Err6 

 JMP EXIT 

 NotErr6 : 

 CMP AX,21 

 JNE NotErr21 

 Cetak Err21 

 JMP EXIT 

 NotErr21 : 

 CMP AX,29 

 JNE NotErr29 

 Cetak Err29 

 JMP EXIT 

 NotErr29 : 

 CMP AX,30 

 JNE NotErr30 

 Cetak Err30 

 JMP EXIT 

 NotErr30 : 

 Cetak ErrL 

 JMP EXIT 

 Buffer LABEL BYTE 

END TData 

program  23.1. menyalin  File

Bila program  23.1. dijalankan, maka program  akan meminta kita  memasukan 

nama file yang akan dicopy dan nama file hasil copy-an, seperti: 

Nama file sumber : TASM.EXE 

Nama file tujuan : B:SS.PROG 

Maka file TASM.EXE akan dicopykan pada drive b: dengan nama SS.PROG.

Bila menyalinkan  file berhasil dengan sukses, maka pada layar akan ditampilkan: 

menyalinkan  File sudah  dilakukan  ....

Keterangan program : 

MOV AX,3 

INT 10H 

Ini yaitu perintah untuk mengaktifkan mode layar 03, atau mode default

dari DOS. Dengan pengaktifan mode layar ini seluruh isi layar akan terhapus. 

TanyaF1 : 

 Cetak Sumber 

 

 MOV AH,0AH 

 LEA DX,File1 

 INT 21h 

Mintalah dari user untuk memasukkan nama file yang akan dicopy. Hasil 

input dari user ini, disimpan pada varibel penampung "File1" yang

didiartikan  untuk mampu menampung sampai 70 huruf   . 

 LEA BX,File1 

 INC BX 

 CMP BYTE PTR [BX],0 

 JE TanyaF1 

 Ulang1 : 

 INC BX 

 CMP BYTE PTR [BX],0Dh 

 JNE Ulang1 

 MOV BYTE PTR [BX],0 

Sesudah  diperoleh  nama file yang ingin dicopy, jadikanlah nama file 

itu  menjadi ASCIZZ. sebab  setiap input dari keyboard selalu diakhiri

dengan enter(0Dh), maka pelajar  tinggal mencari huruf    enter itu  dan

menggantinya dengan byte 0, untuk membuatnya menjadi ASCIZZ. 

TanyaF2 : 

 Cetak Tujuan 

 

 MOV AH,0AH 

 LEA DX,File2 

 Int 21h 

 

 LEA BX,File2 

 INC BX 

 CMP BYTE PTR [BX],0 

 JE TanyaF2 

 Ulang2 :

INC BX 

 CMP BYTE PTR [BX],0Dh 

 JNE Ulang2 

 MOV BYTE PTR [BX],0 

Proses untuk menanyakan nama file hasil copy-an, sama dengan proses 

meminta nama file yang ingin dicopy. Nama file hasil copyan juga dijadikan

ASCIIZ. 

 MOV AH,3DH 

 MOV AL,0 

 LEA DX,File1 + 2 

 INT 21h 

 JC Er 

 MOV Handle1,AX 

Bukalah file yang akan dicopy dengan atribut pembukaan 0, atau Read

Only. Nomor handle file itu  akan diberikan oleh DOS berupa suatu angka.

Simpanlah nomor handle yang diberikan DOS untuk file yang dibuka ini. Untuk

selanjutnya kita  tinggal memakai  nomor handle dari file ini untuk

mengaksesnya. 

 MOV AH,3CH 

 LEA DX,File2 + 2 

 MOV CX,00100000b 

 INT 21h 

 JC Er 

 MOV Handle2,AX 

Buatlah sebuah file baru dengan atribut pembukaan 32 atau file

archive(normal). Simpanlah nomor handle yang diberikan DOS untuk file yang

baru diciptakan ini. bila  file yang baru diciptakan ini sudah  ada pada disk

sebelumnya, maka file itu  akan dihapus. 

Copy : 

 MOV AH,3FH 

 MOV BX,Handle1 

 MOV CX,1024 

 LEA DX,Buffer 

 INT 21h 

 JC Er 

 

 CMP AX, 0
JE Selesai 

 

 MOV CX,AX 

 MOV AH,40h 

 MOV BX,Handle2 

 LEA DX,Buffer 

 Int 21h 

 JC Er 

 

 CMP CX,AX 

 JAE Copy 

Sesudah  itu, bacalah file yang akan dicopy sebanyak 1024 byte, dan 

disimpan pada variabel penampung buffer. Sesudah  pembacaan, lakukanlah

penulisan kepada file baru sebanyak byte yang berhasil dibaca. Proses baca dan

tulis ini dilakukan terus sampai file itu  berhasil dicopykan semuanya. 

lihat : 

Untuk membaca file yang dicopy dan menulisi file baru, pelajar  tinggal

memakai  nomor handle yang pelajar  dapatkan pada saat pembukaan dan pembuatan

file itu . 

 Selesai : 

 Cetak Good 

 

 MOV AH,3Fh 

 MOV BX,Handle1 

 INT 21h 

 

 MOV BX,Handle2 

 INT 21h 

 EXIT : 

 INT 20h 

Sesudah  proses menyalinkan  file selesai, tutuplah file itu  dengan

memakai  nomor handle-nya. 

 Er : 

 CMP AX,1 

 JNE NotErr1 

 Cetak Err1 

 JMP EXIT

NotErr1 : 

 CMP AX,2 

 JNE NotErr2 

 Cetak Err2 

 JMP EXIT 

 NotErr2 : 

 CMP AX,3 

 JNE NotErr3 

 Cetak Err3 

 JMP EXIT 

 NotErr3 : 

 CMP AX,4 

 JNE NotErr4 

 Cetak Err4 

 JMP EXIT 

 NotErr4 : 

 CMP AX,6 

 JNE NotErr6 

 Cetak Err6 

 JMP EXIT 

 NotErr6 : 

 CMP AX,21 

 JNE NotErr21 

 Cetak Err21 

 JMP EXIT 

 NotErr21 : 

 CMP AX,29 

 JNE NotErr29 

 Cetak Err29 

 JMP EXIT 

 NotErr29 : 

 CMP AX,30 

 JNE NotErr30 

 Cetak Err30 

 JMP EXIT 

 NotErr30 : 

 Cetak ErrL

JMP EXIT 

Ini yaitu bagian yang akan menerjemahkan kode kesalahan dari Dos.

Proses yang dilakukan memang agak sedikit bertele-tele, sebab  dibandingkan

satu persatu. pelajar  akan mempelajari cara/teknik untuk menerjemahkan kode

kesalahan ini secara profesional pada bagian 23.11. 

 Buffer LABEL BYTE

Ini yaitu suatu pendefinisian data istimewa dalam assembler. Dengan

mengartikan  nya pada akhir file, akan pelajar  dapatkan suatu buffer/penampung 

yang besar sekali (sebatas memory yang tersedia). Untuk lebih jelasnya kita  

bisa lompat pada bagian 24.7. sebentar, untuk membaca keterangan mengenai tipe 

data ini. 


Untuk menghapus suatu file, dapat dipakai  fungsi ke 41h 

dari interupsi 21h. sedang  aturan dari pemakaian fungsi ini yaitu: 

 INPUT: 

 AH = 41h 

 DS:DX = Nama file(ASCIIZ) yang akan dihapus 

 

 OUTPUT: 

 bila  berhasil, maka CF = 0 

 bila  tidak berhasil, maka CF = 1 dan AX = kode kesalahan 

Perlu kita  ketahui, fungsi ini tidak mendukung huruf    khusus seperti

'?' dan '*' dari Dos. sehingga  fungsi ini hanya mampu menghapus 1 buah 

file setiap saat. 

 

Delete MACRO Nama 

 MOV AH,41h ; Servis untuk menghapus file 

 LEA DX,Nama ; DS:DX menunjuk pada nama file 

 INT 21h 

 ENDM 

 

 ;/====================/; 

 

 .MODEL SMALL 

 .CODE 

 ORG 100h 

 

TData :JMP Proses 

 Error DB ' Sorry, File kita  tidak bisa dihapus !',13,10 

 DB ' kita  harus memakai  parameter ',13,10 

 DB ' seperti: ',13,10

DB ' C:\> Hapus FILE_X ',13,10,10 

 DB ' untuk menghapus file FILE_X $' 

Proses : MOV DI,80h ; Alamat awal parameter 

 MOV AL,0Dh ; huruf    Enter 

 REPNE SCASB ; Cari huruf    Enter 

 DEC DI ; DI menunjuk huruf    Enter 

 MOV AL,0 ; Jadikan ASCIIZ 

 STOSB ; Letakkan byte 0 pada DS:[DI] 

 MOV DI,82h ; Awal String 

 Delete [DI] ; Hapus file parameter 

 JNC Exit ; bila  tidak ada kesalahan, Habis 

 MOV AH,09 ; bila  ada kesalahan 

 LEA DX,Error ; Tampilkan peringatan ! 

 INT 21h 

Exit : 

 INT 20h 

END TData 

program  23.2. Menghapus File

program  23.2. bisa kita  pakai  untuk menghapus suatu file dengan 

parameter. contoh  file COBA.TXT akan dihapus, maka bisa dihapus dengan cara: 

HAPUS COBA.TXT


Pada file ada  pointer(penunjuk) yang berguna untuk menandakan 

suatu lokasi tertentu pada file. Dengan fungsi 42h dari Dos, penunjuk file ini

dapat dipindah-pindahkan. sedang  aturan dari pemakaian  fungsi ini yaitu: 

 INPUT: 

 AH = 42h 

 BX = Handle 

 CX = Offset Hi(tinggi) yang menandakan  besarnya perpindahan 

 DX = Offset Lo(rendah) yang menandakan  besarnya perpindahan 

 AL = Mode perpindahan, dengan nilai: 

 00 untuk berpindah dari awal file 

 01 untuk berpindah pada  posisi sekarang 

 02 untuk berpindah dari akhir file 

 OUTPUT: 

 bila  berhasil, maka CF = 0 dan DX:AX = menunjuk pada posisi baru 

 bila  tidak berhasil, maka CF = 1 dan AX = kode kesalahan 

 

sedang  contoh macro dari pemakaian  fungsi ini yaitu:


Seek MACRO Handle,Mode,OffsetLo,OffsetHi 

 PUSH BX 

 PUSH CX 

 MOV AH,42h 

 MOV AL,Mode 

 MOV BX,Handle 

 MOV CX,OffsetHi 

 MOV DX,OffsetLo 

 INT 21h 

 POP CX 

 POP BX 

 ENDM


   ,, pada file ada  suatu byte yang

dipakai  sebagai atribut dari file itu . Atribut ini menentukan jenis 

dari file itu 
DOS menyediakan fungsi ke 43h untuk mengatur atribut file. sedang  aturan 

dari pemakaian fungsi ini yaitu: 

 INPUT: 

 AH = 43h 

 AL = Mode, dengan spesifikasi 

 00 untuk melihat atribut dari suatu file 

 01 untuk mengubah atribut dari suatu file 

 DS:AX = Nama file dalam bentuk ASCIIZ 

 CX = Atribut, dengan spesifikasi Nomor bit: 

 - 0 untuk File Read Only 

 - 1 untuk File Hidden 

 - 2 untuk File System 

 - 3 untuk Volume label. 

 - 4 untuk Nama subdirectory. 

 - 5 untuk File Archive 

 OUTPUT: 

 bila  berhasil, maka CF = 0 dan CX menandakan  atribut dari 

 file, bila  mode pada AL=0 

 bila  tidak berhasil, maka CF = 1 dan AX = kode kesalahan 

Cetak_Kal MACRO Kal ; Macro untuk mencetak kalimat


MOV AH,09 

 LEA DX,Kal 

 INT 21h 

 ENDM 

;/=========================/; 

 .MODEL SMALL 

 .CODE 

 ORG 100h 

TData : JMP Proses 

 Error DB 'Sorry, file tidak ditemukan atau ',13,10 

 DB ' kita  tidak menpakai  parameter $' 

 Jenis DB 'Jenis File ini : $' 

 Attr1 DB 13,10,'-> Read Only $' 

 Attr2 DB 13,10,'-> Hidden $' 

 Attr3 DB 13,10,'-> System $' 

 Attr4 DB 13,10,'-> Volume $' 

 Attr5 DB 13,10,'-> Nama Directory $' 

 Attr6 DB 13,10,'-> Archive $' 

 Tabel DW Attr1,Attr2,Attr3,Attr4,Attr5,Attr6 

Proses: 

 MOV BX,82h ; Alamat DTA, Awal parameter 

Ulang : 

 CMP BYTE PTR [BX],0Dh ; Apakah=Enter? 

 JE ASCIIZ ; Ya, Jadikan ASCIIZ 

 INC BX ; tunjuk huruf    selanjutnya 

 JMP Ulang ; ulangi, cari enter 

ASCIIZ: 

 MOV BYTE PTR[BX],0 ; Jadikan ASCIIZ 

 MOV AH,43h ; Servis untuk atribut file 

 MOV DX,82h ; DX = Awal nama file ASCIIZ 

 MOV AL,00 ; Untuk membaca atribut 

 INT 21h ; Baca atribut file 

 JNC Good ; bila  tidak error lompat 

 Cetak_Kal Error ; Error, cetak pesan dan 

 JMP Exit ; Selesai 

Good : 

 Cetak_Kal Jenis ; Cetak kalimat 

 MOV AX,1 ; AX untuk mengetes Bit 

 XOR BX,BX ; BX=penunjuk isi Tabel 

CEK : 

 PUSH AX ; 

 PUSH BX ; simpan isi register 

 PUSH CX ; 

 AND CX,AX ; Mengetest bit 

 JCXZ Tidak ; bila  CX=0 artinya bit=0 

 ADD BX,BX ; BX kali 2, untuk akses Tabel 

 MOV AH,09 ; Servis cetak kalimat 

 MOV DX,Tabel[BX] ; Alamat offset dari kalimat 

 INT 21h ; Cetak kalimat 

Tidak : 

 POP CX ; 

 POP BX ; Ambil nilai register 

 POP AX ; 

 ADD AX,AX ; AX untuk test bit berikutnya

INC BX ; BX=Banyaknya pengulangan 

 CMP BX,6 ; Apakah sudah  mengetest 6 bit? 

 JE Exit ; Ya! selesai 

 JMP CEK ; Ulangi, test bit berikutnya 

Exit : 

 INT 20h 

END TData 

program  23.3. Melihat Atribut File

Dengan program  23.3. kita  bisa melihat atribut dari suatu file, termasuk

file hidden, seperti IO.SYS. Untuk melihat atribut dari file itu 

ketikkan: 

 C:\>ATTR IO.SYS 

Jenis File ini : 

-> Read Only 

 -> Hidden 

 -> System 

 -> Archive

Mengenai pemakaian  Tabel, akan dijelaskan pada sub bab 23.11 yang

menjelaskan mengenai teknik untuk menerjemahkan kode kesalahan Dos dengan

cepat dan mudah. 


Untuk mengganti nama suatu file, dapat dipakai  fungsi ke 56h dari Dos.

sedang  aturan dari pemakaian fungsi ini yaitu: 

 INPUT: 

 AH = 56h 

 DS:DX = Nama file lama (ASCIIZ) 

 ES:DI = Nama file baru (ASCIIZ) 

 OUTPUT: 

 bila  berhasil, maka CF = 0 

 bila  tidak berhasil, maka CF = 1 dan AX = kode kesalahan 


Pada bab ini, pelajar  sudah  banyak menyinggung mengenai kode kesalahan.

Kode kesalahan biasanya dilaporkan dalam register AX sesudah  suatu operasi

mengalami kesalahan(Error). sedang  arti dari kode kesalahan ini, bisa kita  

lihat pada gambar  kode   23.1.

Kode salah Arti Kode Salah 

------------------------------------------------------------- 

 01 Salah perintah 

 02 File tidak ditemukan 

 03 Path tidak ditemukan 

 04 File yang dibuka terlalu banyak 

 05 Operasi ditolak 

 06 pemakaian  file handle yang salah 

 07 MCB(Memory Control Blocks) sudah  rusak 

 08 Kekurangan memory 

 09 Kesalahan alamat memory blok 

 10 Kesalahan environment string 

 11 Kesalahan format 

 12 Kesalahan kode akses 

 13 Kesalahan data 

 15 Kesalahan spesifikasi drive 

 16 Tidak dapat menghapus directory aktif 

 17 Device yang tidak sama 

 18 Tidak ada file yang ditemukan lagi 

 19 Tidak dapat menulis pada disket yang diprotek 

 20 Unit tidak diketahui 

 21 Drive belum siap 

 22 Perintah tidak diketahui 

 23 Data disk ada  kesalahan 

 25 Pencarian alamat pada disket ada kesalahan 

 26 Tipe media tidak diketahui 

 27 Pencarian nomor sektor tidak ditemukan 

 28 Printer tidak diberi kertas 

 29 Kesalahan pada saat penulisan 

 30 Kesalahan pada saat pembacaan 

 61 Queue Printer sudah  penuh 

 65 Perintah ditolak 

 80 File sudah  ada 

 82 Tidak bisa membuat entri directory 

 83 Kesalahan pada interupsi 24 

 86 Kesalahan password 

87 Kesalahan parameter 

------------------------------------------------------------- 

gambar  kode   23.1. Arti dari kode kesalahan DOS yang umum

Pada program  yang lengkap biasanya bila ada  error, akan dilaporkan

kepada pemakainya. Cara yang kuno untuk dipakai  untuk mencetak arti

kesalahan yaitu dengan membandingkan kode kesalahan yang dihasilkan dan 

mencetak pesannya, seperti: 

TData: JMP Proses 

 Error1 DB ' Salah perintah ! $' 

 Error2 DB ' File tidak ditemukan ! $' 

 Error3 DB ' Path tidak ditemukan ! $' 

 : 






2a
SPEED  RACING 3D
inilah screen shot game android yang bisa dimainkan dengan android 4 keatas pada android 7 layar 10 inch dengan memori 1 gb ,juga android 4 layar 3 inch memori 256 mb   pun game ini tidak patah patah masih bisa berjalan lancar , game   terbaik  dari yang terbaik  dalam hal  kecepatan graphic 3d nya ini buatan  brolicious  yang berjudul  "   SPEED  RACING 3D" dengan ukuran game hanya  44,3   mb  saja  ,pada game ini graphic nya  bagus  walaupun semua tidak terlalu halus pada dekorasi detilnya sudah cukup bagus ,cepat  sistem tampilan 3d nya sesuai kecepatan laju kendaraan anda  ,mobil anda akan berjalan lincah gesit  , ada  mobil  yang berjalan sendiri berlalulalang ,  anda diwajibkan  menjalankan misi misi sederhana  yaitu mengendalikan mobil  dengan baik tanpa ada kesalahan misalnya menabrak anda diwajibkan mebyelesaikan balapan ini dengan kecepatan tinggi  ,untuk  dapat  skor anda harus menyelesaikan setiap misi dengan cepat ,anda yang berusaha   sendiri menyelesaikan tiap tahap , ada banyak petunjuk lengkap di sepanjang  jalan yang sangat jelas sehingga bisa memperkirakan tikungan jalan agar terhindar dari menabrak ,trek jalur sangat panjang  terlalu banyak tikungan  tanjakan  tajam anda salah akan menabrak kalah bila terlalu emosi menambah kecepatan  ,jalanya agar licin ,perlu ketelitian konsentrasi tinggi game ini dibuat untuk anda yang sudah mahir mengendalikan ditikungan ,anda  tidak dapat memilih mobil , anda tidak akan  bosan memainkan game ini berulangkali,sangat sulit  mengatasi tabrakan bila anda ingin kencang ,  panorama perkotaanya sangat  lumayan bagus banyak pemandangan menarik  namun bila  anda sudah mahir anda pantas disebut hebat  , lokasi  yang ekstrem banyak kota kota , hutan gunung yang selalu jelas luarbiasa unik pada kondisi  siang ,hujan  ,anda berputar putar di mode alam yang  rumit  ,kontrol yang  sangat nyaman sebab  tidak ada gyroscope sehingga  bisa diatur dikendalikan tangan kiri atau kanan    ,  mobil atau truk yang ada  ukuranya  proposional dengan dekorasi sekitarnya lumayan mirip asli,rugi kalau anda tidak mencobanya tak ada salahnya  anda mencobanya,anda bisa mengunduhnya di google play store