Search

Python

PYTHON - Pengenalan Singkat Sejarah Singkat
Pada awalnya kita akan beranggapan bahwa penamaan bahasa pemrograman ini didasarkan pada binatang melata, anggapan tersebut salah. Penamaan bahasa pemrograman ini berdasarkan pembuatnya ketika dia menonton acara komedi di televisi di BBC yang bernama Monty Python's Flying Circus. Pembuat bahasa pemrograman ini adalah Guido van Rossum dari Amsterdam, Belanda. Pada awalnya, motivasi pembuatan bahasa pemrograman ini adalah untuk bahasa skrip tingkat tinggi pada sistem operasi terdistribusi Amoeba.
Bahasa pemrograman ini menjadi umum digunakan untuk kalangan engineer seluruh dunia dalam pembuatan perangkat lunaknya, bahkan beberapa perusahaan menggunakan python sebagai pembuat perangkat lunak komersial.
Sejak muncul tahun 1991 di domain public, bahasa pemrograman ini berkembang dengan dukungan komunitas pengguna dan pengembangnya, seperti Python Software Activity, internet newsgroup comp.lang.python, dan organisasi informal lainnya.
Python merupakan bahasa pemrograman yang freeware atau perangkat bebas dalam arti sebenarnya, tidak ada batasan dalam penyalinannya atau mendistribusikannya. Lengkap dengan source codenya, debugger dan profiler, antarmuka yang terkandung di dalamnya untuk pelayanan antarmuka, fungsi sistem, GUI (antarmuka pengguna grafis), dan basis datanya. Python dapat digunakan dalam beberapa sistem operasi, seperti kebanyakan sistem UNIX, PCs (DOS, Windows, OS/2), Macintosh, dan lainnya. Pada kebanyakan sistem operasi linux, bahasa pemrograman ini menjadi standarisasi untuk disertakan dalam paket distribusinya.

Filosofi Python
Bahasa pemrograman ini mempunyai filosofi sendiri, atara lain adalah:
Coherence. Bahasa pemrograman skrip tidaklah menjadi sulit untuk dibaca, ditulis, dan dimaintain.
Power (kekuatan). Bahasa pemrograman ekstensi tidaklah mempunyai fungsi yang terbatas.
Scope (jangkauan). Bahasa pemrograman dinamis dapat digunakan untuk berbagai macam tugas. Tidak ada alasan bahwa bahasa pemrograman tidak dapat menyediakan tanggapan yang cepat selama masa pembuatan sistem aplikasi dan juga mempunyai kelebihan yang membuatnya berguna untuk membuat lebih daripada sistem aplikasi tingkat tinggi.
Object. Pemrograman berorientasi objek dapat menjadi paradigma yang berguna, karena pemrograman berorientasi objek mempunyai kekuatan dalam strukturnya dan penggunaan kembali kode yang telah ada. Bahasa pemrograman berorientasi objek tidak perlu untuk menjadi kompleks atau sulit untuk digunakan.
Integration(integrasi). Tidak ada bahasa pemrograman yang menjadi pulau. Penyediaan dari kekuatan bahasa pemrograman dinamis, dan antarmuka yang terdefenisi dengan baik untuk bahasa pemrograman lainnya, python membantu sistem hibrid yang secara simultan pengungkitan kecepatan perubahan dari python, dan efisiensi dari C.
Perlu diketahui pula bahasa pemrograman python cenderung untuk menyerupai bahasa pemrograman tradisional seperti C dan Pascal, daripada bahasa permrograman skrip seperti Perl dan Tcl. Pada kenyataannya, Python adalah suatu dari bahasa pemrograman skrip dalam samaran dari bahasa perograman tradisional. Ada pendapat lain yang menyatakan bahwa Python merupakan jembatan antara bahasa skrip dan C.

Kelebihan Python
Bahasa pemrograman ini mempunyai kelebihan dari beberapa bahasa pemrograman skrip dan bahasa pemrograman C.


Kelebihan

Keuntungan
Tidak ada tahapan kompilasi dan penyambungan (link). Kecepatan perubahan pada masa pembuatan sistem aplikasi.
Tidak ada deklarasi tipe. Program menjadi lebih sederhana, singkat, dan lebih fleksible.
Manajemen memori otomatis. Kumpulan sampah memori sehingga dapat menghindari pencatatan kode.
Tipe data dan operasi tingkat tinggi. Kecepatan pembuatan sistem aplikasi menggunakan tipe objek yag telah ada.
Pemrograman berorientasi objek. Penstrukturan kode dan penggunaan kembali, integrasi C++.
Pelekatan dan perluasan dalam C. Integrasi C, sistem bahasa campuran
Kelas, Modul, Eksepsi. Dukungan pemrograman skala besar secara modular.
Pemuatan dinamis modul C. Ekstensi yang sederhana, serta berkas biner yang lebih kecil.
Pemuatan kembali secara dinamis modul Python. Memodifikasi aplikasi tanpa menghentikannya.
Model objek universal kelas satu. Fewer restriction dan special-case rules.
Konstruksi pada saat aplikasi berjalan. Handle unforeseen need, end-user coding.
Interaktif, dinamis alamiah. Incremental development and testing.
Akses hingga informasi interpreter. Metaprogramming, introspective object.
Portabilitas secara luas. Pemrograman antar platform tanpa ports.
Kompilasi untuk portabel kode byte. Kecepatan eksekusi, melindungi kode sumber.
Antarmuka terpasang untuk pelayanan keluar. Perangkat bantu sistem, GUI, persistence, database, dan lain sebagainya.
Secara jujur, Python merupakan konglomerat dari kelebihan yang dibawa dari bahasa pemrograman lainnya, termasuk element dari C, C++, Modula-3, ABC, Icon, dan lainya. Modul python datang dari modula, dan potongan operasi dari Icon
   










Apa yang baik bagi Python ?
Penggunaan python pada lingkungan yang berbagai macam ragam, sulit untuk menjawab secara resmi terhadap pertanyaan di atas. Pada bagian bawah ini merupakan rangkuman dari beberapa bidang yang menggunakan python pada saat ini:
  • Perangkat bantu shell. Tugas-tugas sistem administrator, program baris perintah.
  • Kerja bahasa ekstensi. Antarmuka untuk pustaka C/C++, kustomisasi
  • Pembuatan prototipe secara cepat/pembuatan sistem aplikasi. Prototipe yang dapat dibuang atau sesuai dengan permintaan.
  • Modul berdasarkan bahasa pemrograman. Pengganti dari penulisan parser khusus.
  • Antarmuka pengguna grafis. Penggunaan GUI API sederhana dan canggih.
  • Pengaksesan basisdata. Penyimpanan objek tetap, antarmuka sistem SQL.
  • Pemrograman terdistribusi. Penggunaan API mekanisme client/server terintegrasi.
  • Skrip internet. Skrip CGI, antarmuka HTTP, Aplet WWW, dan lainnya.
Pada pengertian umum, python memberikan pelayanan terhadap jangkauan bidang:
  • Bahasa pemrograman dinamis, untuk situasi dimana salah satu tahap link atau kompilasi tidak memungkinkan (modifikasi di tempat klien), atau tidak nyaman (pembuatan prototipe, pembuatan aplikasi secara cepat, perangkat bantu shell).
  • Bahasa pemrograman yang powerful tetapi sederhana, untuk situasi dimana kompleksitas dari bahasa pemrograman yang besar is sometimes a liability (prototipe, pengkodean pada pemakai akhir).
  • Generalized language tool, untuk situasi dimana dibutuhkan untuk menanamkan dan implementasi bahasa pemrograman kecil lainnya (antarmuka sistem yag dapat di program, perangkat bantu konfigurasi).
Berdasarkan properti umum yang diberikan, python dapat di terapkan pada area mana saja ynag kita ingin kan, dengan meningkatkannya dengan pustaka pada bidangnya, melekatkannya dengan sistem aplikasi, atau menggunakannya secara sendiri. Pada tabel di bawah ini terdapat beberapa ektensi python yang populer.
Bidang
Ekstensi
Pemrograman sistem Soket, thread, signal, pipe, pemanggil RPC, POSIX binding.
Antarmuka pengguna grafis X11, Tk, Tix, MFC, STDWIN
Antarmuka basisdata Oracle, Sybase, PostGres, mSQL, persistence ("pickling"), dbm
Perangkat bantu microsoft windows MFC, OLE
Perangkat bantu internet Grail web browser(aplet), parser HTML, antarmuka CGI.
Objek terdistribusi ILU (CORBA)
Perangkat bantu populer lainnya Expect, ekspresi regula, ekstensi numerik, kriptograpi.
Apa yang telah kita lihat, arsitektur python yang terbuka mendukung bentuk pembuatan sistem aplikasi dan produknya secara dinamis. Pada python pula, kita dapat mencampurkan prototipe, pembuatan sistem aplikasi secara cepat, dan engineering perangkat lunak secara tradisional, berdasarkan pada permintaan dalam suatu projek. Penggunaan python sebagai perangkat bantu pembuat skrip, kita dapat membuka sebagian dari sistem untuk modifikasi oleh pemakai akhir. Apa yang kurang baik bagi Python ?
Beberapa penugasan terdapat diluar dari jangkauan python, seperti bahasa pemrograman dinamis lainnya, python tidak secepat atau efisien sebagai statis, tidak seperti bahasa pemrograman kompilasi seperti bahasa C. Pada beberapa bidang hal ini tidak menjadi pertimbangan utama, tetapi dalam bidang lainnya, efisiensi menjadi prioritas tertinggi.
Disebabkan python merupakan interpreter, python bukan merupakan perangkat bantu terbaik untuk pengantar komponen performa kritis. Sebaliknya, penggunaan operasi komputasi intensif dapat diimplementasikan sebagai ekstensi kompilasi bagi python, dan dikodekan dalam bahasa pemrograman tingkat rendah seperti bahasa C. Python tidak dapat digunakan sebagai dasar bahasa pemrograman implementasi untuk beberapa komponen, tetapi dapat bekerja dengan baik sebagai bagian depan skrip antarmuka untuk mereka.
Python memberikan efisiensi dan fleksibilitas tradeoff by dengan tidak memberikannya secara menyeluruh. Python menyediakan bahasa pemrograman optimasi untuk kegunaan, bersama dengan perangkat bantu yang dibutuhkan untuk diintegrasikan dengan bahasa pemrograman lainnya. Sementara python unlikely that it'll ever be secepat bahasa C, kecepatan python dalam pembuatan sistem aplikasi paling tidak menjadi penting sebagaimana kecepatan eksekusi bahasa C.
Pilihan ada di tangan anda
Penggunaan bahasa pemrograman python akhirnya ditentukan oleh penggunanya yang didasarkan pada kebutuhannya dan bidang yang dapat ditangani oleh pyhton. Python dapat digunakan secara menyeluruh pada sistem yang tebuka terhadap penggunaan antarmuka yang ada dan tidak mengorbankan unsur penting lainnya yang akhirnya akan menurunkan hasil akhir yang ingin dicapai.
Pemandangan menyeluruh terhadap tiap unsur atau bagian yang ada secara detail dalam pembuatan suatu sistem aplikasi pada tahap analisa akan memudahkan kita pada tahap pemrograman selanjutnya.

| Open Source Campus Agreement (OSCA) | INSTALASI LINUX REDHAT 6.X |

Hash Code Cracker

Hash Code Cracker

Dah lama gak nge-post nih,mumpung ada kesempatan nge-post dulu ah..
temen-temen semua yang hobi hacking website dan berhasil ndapetin username dan passwordnya yng bentuknya MD5,SHA-1 dll,pastinya berusaha meng-crack ntu password dong,entah pake hash cracker online atau offline..nha,ni tools bisa jadi salah satu referensi...


downloadnya disini

Remot PC menggunakan Android

Remote PC menggunakan Android

 
Setelah selesai ngoprek FTP, Sekarang saatnya ngoprek RDP sedikit demi sedikit lah :) 
langsung aja, ada yang belum tau RDP. RDP adalah Remote Desktop Protocol (sering disingkat menjadi RDP) adalah sebuah protokol jaringan yang digunakan oleh Microsoft Windows Terminal Services dan Remote Desktop. RDP dibuat berdasarkan protokol T.120 yang spesifikasinya diumumkan oleh International Telecommunication Union (ITU), yang juga merupakan protokol yang digunakan di dalam perangkat lunak konferensi jarak jauh.
Kali ini kita akan gunakan RDP client pada android untuk melakukan remote pada komputer kita, topologi yang saya gunakan kurang lebih sama saat koneksi FTP
 
 

 
 
masih seperti sebelumnya media yang kita gunakan adalah wifi, 
Instal Remote Desktop Android Client, disini sebenarnya banyak aplikasi lain untuk remote desktop seperti Teamviewer, RemoteDroid, dll tapi saya lebih senang menggunakan Remote Desktop selain tanpa menginstal Aplikasi lain di komputer juga membantu kita dalam memahami Remote Desktop itu sendiri karena konfigurasi secara manual.  Meskipun kendalanya adalah premium tapi gak masalah saya share yang udah di crack :P ini link downloadnya 
 password rar :  ecity.tk 
  1. koneksikan android dan laptop/PC dengan wifi
  2. Setting PC terlebih dahulu pada bagian MyComputer > Properties > Remote Setting > check pada "Allow Connection from Computer Runing any version of Remote Desktop"
  3. Setting Username dan Password kita, agar lebih mudah beri password pada user windows kita.
  4. Jalankan Remote Desktop dari android
  5. Masukkan Address dengan IP kita, jika tidak tahu ketika ipconfig pada cmd lalu lihat ip kita,
  6. Masukkan Username PC kita dan passwordnya
  7. Untuk yang selebihnya bersifat optional bisa di isi atau tidak,
  8. tentukan resolusi juga, saya sarankan 600x800 saja sudah cukup
  9. setelah itu save lalu tekan connect.
hasilnya adalah sebagai berikut :
 
 
happy new year, lohh.. =))
happy exploring aja lah.. 
thanks for God :D

Bahasa mesin komputer

Bahasa Mesin

Setiap jenis CPU (Central Processing Unit) atau dikenal juga sebagai mikroprosesor, hanya dapat mengerti atau menterjemahkan setiap bahasa mesin yang dimilikinya. Artinya setiap CPU telah dilengkapi perangkat intruksi (instructions set) yang dimilikinya. Menyusun program dengan perangkat instruksi pada CPU tertentu disebut dengan program bahasa mesin (machine language). Instruksi-instruksi dalam bahasa mesin adalah bilangan-bilangan yang merupakan kode mesin disimpan dalam memori. Setiap instruksi akan memiliki kode numerik yang unik disebut sebagai kode operasi (operation code) atau disingkat sebagai opcode. Instruksi pada Prosesor 80x86 memiliki variasi ukuran. Opcode selalu berada pada awal setiap instruksi. Beberapa instruksi juga diikuti dengan data 
(seperti konstanta atau alamat) digunakan oleh instruksi.
Bahasa mesin sangat sulit diprogram secara langsung.  Menterjemahkan  maksud/arti dari instruksi yang berupa kode numerik bagi manusia sangat membosankan untuk dihapalkan atau dimengerti maksudnya. Sebagai contoh, instruksi katakan untuk menambah isi dari register EAX dan EBX dan hasilnya disimpan kembali dalam register EAX dikodekan oleh kode heksa: 03 CE.
Program bahasa mesin yang merupakan kumpulan kode operasi disimpan dalammemori CPU untuk selanjutnya dieksekusi satu persatu sehingga membentuk program secara utuh.


Bahasa Assembly

Tidak seperti halnya bahasa mesin yang merupakan kumpulan kode operasi yang berupa kode numerik yaitu kode heksa, yang sangat sulit untuk diingat atau dimengerti. Penulisan program bahasa assembly disimpan sebagai teks seperti halnya bahasa pemrograman aras tinggi. Setiap instruksi assembly kenyataannya mewakili satu instruksi bahasa mesin. Sebagai contoh, instruksi penjumlahan yang telah diuraikan sebelumnya akan mewakili bahasa assembly berikut ini: 
           add     eax, ebx
 Instruksi ini akan lebih bisa dimengerti daripada kode mesin. Instruksi add adalah sebuah mnemonic untuk instruksi penjumlahan. Bentuk secara umum dari sebuah instruksi assembly adalah:
           mnemonic     operand(s)
Assembler adalah sebuah program yang membaca file teks dari instruksi assembly dan dikonversi menjadi kode mesin. Kompiler adalah program juga melakukan pengkonversian namun untuk bahasa tingkat tinggi. Assembler lebih sederhana daripada kompiler. Setiap perintah bahasa assembly secara langsung mewakili satu instruksi mesin. Perintah bahasa tingkat tinggi lebih komplek dan memerlukan banyak instruksi mesin. Perbedaan penting lainnya antara assembly dan bahasa tingkat tinggi adalah, bahwa setiap perbedaan jenis CPU akan memiliki instruksi mesin tersendiri juga akan memiliki bahasa assembly tersendiri pula. Porting (maksudnya: peng-adaptasi-an) program assembly ke berbagai jenis arsitektur komputer sangatlah sulit jika dibandingkan dengan bahasa pemrograman beraras tinggi (high level language). Dalam pembahasan selanjutnya digunakan Netwide Assembler atau disingkat NASM. NASM tersedia secara gratis di internet. Yang sering digunakan adalah Microsoft's Assembler (MASM) atau Borland's Assembler (TASM). Terdapat perbedaan sintak untuk MASM/TASM dan NASM.

Operand sebuah Instruksi

Instruksi bahasa mesin memiliki sejumlah variasi dan jenis operand; akan tetapi, secara umum, setiap instruksi itu sendiri akan memiliki sejumlah operand yang telah ditetapkan (0 sampai 3).
Jenis-jenis operand yang ada adalah sebagai berikut:
  • Register
    Operand ini mengarah secara langsung ke isi dari register-register CPU.
  • Memori
    Operand ini mengarah ke data dari isi memori. Alamat dari data dalam memori dapat berupa konstan yang dikodekan dalam instruksi atau dihitung melalui sebuah nilai dalam register-register. Alamat biasanya offset dari awal sebuah segmen.
  • Seketika (Immidiate)
Operand ini merupakan nilai yang tetap yang diperlihatkan dalam instruksi itu sendiri, disimpan dalam instruksi itu sendiri (dalam segmen kode), tidak dalam segmen data.
  • Implikasi (Implied)
Operand ini tidak ditunjukkan secara ekplisit. Sebagai contoh, instruksi menaikkan (increment) adalah menaikkan satu isi dari sebuah register atau memori. Ini salah satu dari implikasi (implied).

 

 

Instruksi Dasar

Sebagian besar instruksi dasar adalah instruksi MOV. Instruksi ini memindahkan data dari salah satu lokasi ke lokasi lainnya, seperti operator assignment dalam bahasa pemrograman beraras tinggi.
Terdiri dari dua operand:
            mov     dest, src
Data yang dispesifikasikan oleh src disalin ke dest. Satu pembatasan adalah bahwa keduanya tidak diperbolehkan operand memori, artinya tidak dapat memindahkan data dari memori ke memori.
Hal ini ini ke luar ciri-ciri dari assembly. Sedikit banyak terdapat aturan yang harus diikuti tentang bagaimana cara variasi  instruksi digunakan. Operand harus memiliki ukuran yang sama. Nilai  register AX  tidak dapat disimpan dalam register BL. Ukuran dari register AX adalah pasangan register sebesar 32bit, sedangkan BL ukurannya 16bit untuk mikroprosesor 80486.
Sebagai contoh:
            mov eax, 3             ; store 3 into EAX register (3 is immediate operand)

            mov bx, ax             ; store the value of AX into the BX register
Tanda semikolon ';' merupakan tanda awal untuk penulisan komentar.
Instruksi ADD digunakan untuk operasi penjumlahan integer:
            add eax, 4             ; eax = eax + 4

            add al, ah             ; al = al + ah

Instruksi SUB merupakan instruksi pembagian secara integer:
            sub bx, 10             ; bx = bx - 10

            sub ebx, edi           ; ebx = ebx - edi
Instruksi INC dan DEC adalah instruksi penaikan (increment) atau penurunan (decrement) dengan nilai satu. Ini adalah salah satu dari operan secara implisit, kode mesin untuk INC dan DEC adalah kecil ukurannya dibanding dengan instruksi ADD dan SUB.
            inc ecx                ; ecx++

            dec dl                 ; dl--

Pengarahan (Directive)

Directive merupakan sebuah artifak assembler bukan CPU. Secara umum digunakan untuk menginstruksikan assembler untuk melakukan sesuatu atau menginformasikan tentang sesuatu ke assembler. Directive tidak diubah kedalam kode mesin.
Penggunaan umum dari directive adalah:
  1. Mendefinisikan konstanta
  2. Mendefinisikan memori untuk penyimpanan data
  3. Kelompok memori kedalam segmen
  4. Melampirkan kode sumber (source code) secara kondisional (conditionally include)
  5. Melampirkan file lainnya

 
Pelolosan kode NASM melalui sebuah perintah (command) preprosesor (preprocessor) seperti C. Begitu pula, pengarahan preprosesor (directive preprocessor) dimulai dengan % dibandingkan # dalam C.

 

Pengarahan EQU

Pengarahan EQU dapat digunakan untuk mendefinisikan sebuah simbol. Simbol adalah nama dari konstanta yang dapat digunakan dalam program assembly.
Formatnya adalah:
                                simbol     equ     nilai
Nilai dari simbol tidak dapat didefinisikan secara berulang (didefinisikan kembali).

Pengarahan %define

Pengarahan ini adalah sama dengan pengarahan #define dalam C. Ini secara umum digunakan untuk mendefinisikan mkro konstan seperti dalam C.
                                %define     SIZE 100
                                mov        eax, SIZE
Kode di atas mendefinisikan sebuah makro dengan nama SIZE sebagai konstanta 100 dan ditunjukkan penggunaannya dalam instruksi. Makro sangat fleksibel daripada simbol dalam dua cara. Makro dapat didefinisikan kembali dan bisa lebih dari sekedar bilangan konstan.


Pengarahan Data 

Pengarahan data digunakan dalam segmen data untuk mendefinisikan ruang memori. Terdapat dua cara menyiapkan ruang memori. Cara pertama, hanya mendefinisikan ruang untuk data; cara kedua mendefinisikan ruang dan nilai awal. Metode pertama menggunakan satu dari pengarahan RESX. X diganti dengan huruf sebagai ukuran dari obyek (atau beberapa obyek) yang akan disimpan. Berikut ini ditunjukkan beberapa kemungkinan nilai itu. 

       UNIT       
       HURUF    
byte
B
word
W
double word
D
quad word
Q
ten bytes
T

Metode kedua (mendefinisikan sebuah nilai awal) menggunakan satu dari pengarahan DX. Huruf X adalah sama dengan pengarahan RESX. Hal ini sangat umum untuk menandai lokasi memori dengan label. Label merupakan salah satu cara mudah untuk mengarahkan lokasi memori dalam kode.
Berikut ini terdapat beberapa contoh: 



   LABEL  
      INSTRUKSI     
KOMENTAR
L1
db     0
; byte dengan label L1 diinisialisasi dengan nilai 0
L2
dw    1000
; word dengan label L2 ddiinisialisasi dengan nilai 1000
L3
db     110101b
; byte diinisialisasi dengan biner 110101 (53 dalam desimal)
L4
db     12h
; byte diinisialisasi dengan heksa 12 (18 dalam desimal)
L5
db     17o
; byte diinisialisasi dengan oktal 17 (15 dalam desimal)
L6
dd     1A92h
; double word ddiinisialisasi dengan heksa 1A92
L7
resb  1
; menyiapkan ruang 1 byte tidak diinisialisasi
L8
db     "A"
; byte diinisialisasi oleh kode ASCII untuk A (65)
  
Tanda "..." dan '...' adalah sama perlakuannya. Konsekwensinya data yang didefinisikan disimpan secara berurutan dalam memori.  Dengan demikian L2 disimpan secara seketika sesuada L1 dalam memori. urutan dari memori dapat didefinisikan juga.

   LABEL  
      INSTRUKSI     
KOMENTAR
L9
db 0, 1, 2, 3
; mendefinisikan ruang 4 byte dinisialisasi dengan nilai 0, 1, 2, 3
L10
db "w", "o", "r", ’d’, 0    
; mendefinisikan urut-urutan karakter dalam memori yaitu ASCII w, o, r, d dan diakhiri dengan konstanta 0
L11
db ’word’, 0
; mendefinisikan urut-urutan karakter dalam memori yaitu ASCII word dan diakhir dengan konstanta 0
 

Untuk urutan yang sangat besar, pengarahan TIMES dalam NASM seringkali digunakan. Pengarahan ini mengulang sejumlah operand spesifik, sebagai contoh:

   LABEL  
      INSTRUKSI     
KOMENTAR
L12
times 100 db 0
; sama dengan db 0 sebanyak 100 kali
L13
resw 100
; menyediakan ruang memori untuk 100 word

Ingat bahwa label dapat digunakan untuk mengarahkan ke data dalam kode. Terdapat dua cara bahwa sebuah label dapat digunakan. Jika label akan digunakan, label akan diinterprestasikan sebagai alamat (atau offset) dari data. Jika label diletakkan dalam kurung kotak ([...]), akan diinterprestasikan sebagai data pada alamat yang ditunjukkan oleh label. Dalam bentuk yang lain, salah satu yang harus diingat bahwa sebuah label adalah sebagai pointer data pada alamat tertentu dan kurung kotak direferensikan sebagai pointer seperti halnya araterisk (*) dalam C. (MASM/TASM memiliki perbedaan konvensi). Dalam mode 32bit, pengalamatannya adalah 32bit.
Berikut ini terdapat beberapa contoh:
  
   NO 
      INSTRUKSI     
KOMENTAR
 1
 mov al, [L1]
 ; salin byte memori dengan alamat yang ditunjukkan oleh L1 ke register AL
 2
 mov eax, L1
 ; register EAX = alamat byte ditunjukkan oleh L1
 3
 mov [L1], ah
 ; salin AH ke byte memori dengan alamat oleh L1
 4
 mov eax, [L6]
 ; salin double word memori dengan alamat oleh L6 ke register EAX
 5
 add eax, [L6]
 ; EAX = EAX + double word memori dengan alamat oleh L6
 6
 add [L6], eax
 ; double word memori dengan alamat oleh L6 += EAX
 7
 mov al, [L6]
 ; salin byte pertama dari double word memori dengan alamat oleh L6 ke AL

Label yang digunakan dalam contoh di atas merupakan label yang diberikan dalam contoh sebelumnya. Baris 7 dari contoh di atas menunjukkan sebuah properti yang penting untuk NASM. Assembler tidak dapat menangkap dari jenis data yang ditunjukkan oleh label tersebut. Ini tergantung pada programmer untuk membuat suatu kepastian bahwa penggunaan sebuah label harus benar. Selanjutnya hal ini secara umum untuk menyimpan alamat dari sebuah data dalam register dan menggunakan register seperti halnya pointer dalam variabel C. Lagi, tidak ada pengecekan yang dilakukan bahwa sebuah pointer digunakan secara benar. Cara ini, assembly akan lebih banyak menghasilkan error daripada C.
Instruksi berikutnya adalah: 
mov [L6], 1    ; simpan (store) 1 byte ke memori yang ditunjukkan oleh label L6
Pernyataan tersebut menghasilkan sebuah operasi dengan ukuran yang tidak salah (error), mengapa ?. Sebab assembler tidak mengetahui apa yang akan disimpan (store) sebagai 1 byte, word atau double word. Untuk memperbaiki ini, tambahkan sebuah spesifikasi ukuran:
mov dword [L6], 1      ; simpan (store) 1 byte ke memori yang ditunjukkan oleh label L6
Hal ini akan mengatakan ke assembler untuk menyimpan 1 byte ke double word yang dimulai dengan alamat yang ditunjukkan oleh label L6. Spesifikasi ukuran lainnya adalah:  BYTE, WORD, QWORD and TWORD.

Input and Output

Input dan output merupakan aktifitas yang sangat bergantung dengan sistem. Hal ini merupakan antarmuka denga perangkat keras sistem. Bahasa tingkat tinggi, seperti C, dilengkapi dengan pustaka (library) standar berupa rutin-rutin program yang dapat diperoleh secara sederhana, programming membentuk antarmuka I/O. Bahasa assembly tidak memiliki library standar. C harus secara langsung mengakses perangkat keras (melalui operasi pengijinan dalam mode protect) atau menggunakan rutin beraras rendah yang diperoleh dalam sistem operasi.
Sangat umum rutin assembly di-antarmuka-kan dengan C. Salah satu keuntungannya bahwa kode assembly dapat digunakan sebagai library standar C untuk rutin I/O. Selanjutnya, salah satu yang harus diketahui adalah aturan untuk meloloskan informasi rutin dengan informasi yang digunakan C. Aturan ini sangat komplek untuk dijelaskan disini (akan dijelaskan pada pembahasan berikutnya). Untuk menyederhanakan I/O, digunakan rutin yang siap dipakai untuk menyembunyikan aturan-aturan C yang komplek dan akan diperoleh cara antarmuka yang sangat sederhana.
Berikut ini diuraikan fungsi setiap rutin yang dapat anda peroleh disini.

NAMA RUTIN
FUNGSI RUTIN
print_int                 
tampilkan ke layat nilai integer yang disimpan dalam register EAX
print_char
tampilkan ke layar karekter dalam bentuk nilai ASCII yang disimpan dalam register AL
print_string
tampilkan ke layar berupa string dengan alamat yang disimpan dalam register EAX. String harus berupa Ctype string (diakhiri dengan null).
print_nl
tampilkan ke layar karakter baris baru (new line)
read_int
baca sebuah nilai integer dari keyboard dan disimpan kedalam register EAX
read_char
baca karakter tunggal dari keyboard dan disimpan dalam bentuk kode ASCII kedalam register EAX.

Seluruh rutin menyediakan nilai dari seluruh register, kecuali rutin read. Rutin ini memodifikasi nilai yang ada dalam register EAX. Untuk menggunakan rutin ini, harus menyertakan file rutin dalam program dengan pengarahan preprosesor %include yang akan menginformasikan ke assemble mengenai penggunaan file rutin tersebut.
Berikut ini harus ditambahkan ke program assembly anda sebelum menggunakan rutin:
%include "asm_io.inc"
Untuk menggunakan salah satu rutin print,  terlebih dahulu muati register EAX dengan nilai yang benar dan gunakan instruksi CALL untuk mengakses rutin. Instruksi CALL adalah sama dengan sebuah pemanggilan fungsi dalam bahasa pemrograman beraras tinggi. Selanjutnya akan melompat mengeksekusi ke bagian kode yang lainnya, tetapi akan kembali ke asalnya sesudah rutin selesai dieksekusi.


http://fpga.songolimo.net/kuliah-1/bahasa-assembly/pengantar-bahasa-assembly

Bahasa Mesin dalam Komputer

Bahasa Mesin

Setiap jenis CPU (Central Processing Unit) atau dikenal juga sebagai mikroprosesor, hanya dapat mengerti atau menterjemahkan setiap bahasa mesin yang dimilikinya. Artinya setiap CPU telah dilengkapi perangkat intruksi (instructions set) yang dimilikinya. Menyusun program dengan perangkat instruksi pada CPU tertentu disebut dengan program bahasa mesin (machine language). Instruksi-instruksi dalam bahasa mesin adalah bilangan-bilangan yang merupakan kode mesin disimpan dalam memori. Setiap instruksi akan memiliki kode numerik yang unik disebut sebagai kode operasi (operation code) atau disingkat sebagai opcode. Instruksi pada Prosesor 80x86 memiliki variasi ukuran. Opcode selalu berada pada awal setiap instruksi. Beberapa instruksi juga diikuti dengan data (seperti konstanta atau alamat) digunakan oleh instruksi.
Bahasa mesin sangat sulit diprogram secara langsung.  Menterjemahkan  maksud/arti dari instruksi yang berupa kode numerik bagi manusia sangat membosankan untuk dihapalkan atau dimengerti maksudnya. Sebagai contoh, instruksi katakan untuk menambah isi dari register EAX dan EBX dan hasilnya disimpan kembali dalam register EAX dikodekan oleh kode heksa: 03 CE.
Program bahasa mesin yang merupakan kumpulan kode operasi disimpan dalammemori CPU untuk selanjutnya dieksekusi satu persatu sehingga membentuk program secara utuh.


Bahasa Assembly

Tidak seperti halnya bahasa mesin yang merupakan kumpulan kode operasi yang berupa kode numerik yaitu kode heksa, yang sangat sulit untuk diingat atau dimengerti. Penulisan program bahasa assembly disimpan sebagai teks seperti halnya bahasa pemrograman aras tinggi. Setiap instruksi assembly kenyataannya mewakili satu instruksi bahasa mesin. Sebagai contoh, instruksi penjumlahan yang telah diuraikan sebelumnya akan mewakili bahasa assembly berikut ini: 
           add     eax, ebx
 Instruksi ini akan lebih bisa dimengerti daripada kode mesin. Instruksi add adalah sebuah mnemonic untuk instruksi penjumlahan. Bentuk secara umum dari sebuah instruksi assembly adalah:
           mnemonic     operand(s)
Assembler adalah sebuah program yang membaca file teks dari instruksi assembly dan dikonversi menjadi kode mesin. Kompiler adalah program juga melakukan pengkonversian namun untuk bahasa tingkat tinggi. Assembler lebih sederhana daripada kompiler. Setiap perintah bahasa assembly secara langsung mewakili satu instruksi mesin. Perintah bahasa tingkat tinggi lebih komplek dan memerlukan banyak instruksi mesin. Perbedaan penting lainnya antara assembly dan bahasa tingkat tinggi adalah, bahwa setiap perbedaan jenis CPU akan memiliki instruksi mesin tersendiri juga akan memiliki bahasa assembly tersendiri pula. Porting (maksudnya: peng-adaptasi-an) program assembly ke berbagai jenis arsitektur komputer sangatlah sulit jika dibandingkan dengan bahasa pemrograman beraras tinggi (high level language). Dalam pembahasan selanjutnya digunakan Netwide Assembler atau disingkat NASM. NASM tersedia secara gratis di internet. Yang sering digunakan adalah Microsoft's Assembler (MASM) atau Borland's Assembler (TASM). Terdapat perbedaan sintak untuk MASM/TASM dan NASM.

Operand sebuah Instruksi

Instruksi bahasa mesin memiliki sejumlah variasi dan jenis operand; akan tetapi, secara umum, setiap instruksi itu sendiri akan memiliki sejumlah operand yang telah ditetapkan (0 sampai 3).
Jenis-jenis operand yang ada adalah sebagai berikut:
  • Register
    Operand ini mengarah secara langsung ke isi dari register-register CPU.
  • Memori
    Operand ini mengarah ke data dari isi memori. Alamat dari data dalam memori dapat berupa konstan yang dikodekan dalam instruksi atau dihitung melalui sebuah nilai dalam register-register. Alamat biasanya offset dari awal sebuah segmen.
  • Seketika (Immidiate)
Operand ini merupakan nilai yang tetap yang diperlihatkan dalam instruksi itu sendiri, disimpan dalam instruksi itu sendiri (dalam segmen kode), tidak dalam segmen data.
  • Implikasi (Implied)
Operand ini tidak ditunjukkan secara ekplisit. Sebagai contoh, instruksi menaikkan (increment) adalah menaikkan satu isi dari sebuah register atau memori. Ini salah satu dari implikasi (implied).

 

 

Instruksi Dasar

Sebagian besar instruksi dasar adalah instruksi MOV. Instruksi ini memindahkan data dari salah satu lokasi ke lokasi lainnya, seperti operator assignment dalam bahasa pemrograman beraras tinggi.
Terdiri dari dua operand:
            mov     dest, src
Data yang dispesifikasikan oleh src disalin ke dest. Satu pembatasan adalah bahwa keduanya tidak diperbolehkan operand memori, artinya tidak dapat memindahkan data dari memori ke memori.
Hal ini ini ke luar ciri-ciri dari assembly. Sedikit banyak terdapat aturan yang harus diikuti tentang bagaimana cara variasi  instruksi digunakan. Operand harus memiliki ukuran yang sama. Nilai  register AX  tidak dapat disimpan dalam register BL. Ukuran dari register AX adalah pasangan register sebesar 32bit, sedangkan BL ukurannya 16bit untuk mikroprosesor 80486.
Sebagai contoh:
            mov eax, 3             ; store 3 into EAX register (3 is immediate operand)

            mov bx, ax             ; store the value of AX into the BX register
Tanda semikolon ';' merupakan tanda awal untuk penulisan komentar.
Instruksi ADD digunakan untuk operasi penjumlahan integer:
            add eax, 4             ; eax = eax + 4

            add al, ah             ; al = al + ah

Instruksi SUB merupakan instruksi pembagian secara integer:
            sub bx, 10             ; bx = bx - 10

            sub ebx, edi           ; ebx = ebx - edi
Instruksi INC dan DEC adalah instruksi penaikan (increment) atau penurunan (decrement) dengan nilai satu. Ini adalah salah satu dari operan secara implisit, kode mesin untuk INC dan DEC adalah kecil ukurannya dibanding dengan instruksi ADD dan SUB.
            inc ecx                ; ecx++

            dec dl                 ; dl--

Pengarahan (Directive)

Directive merupakan sebuah artifak assembler bukan CPU. Secara umum digunakan untuk menginstruksikan assembler untuk melakukan sesuatu atau menginformasikan tentang sesuatu ke assembler. Directive tidak diubah kedalam kode mesin.
Penggunaan umum dari directive adalah:
  1. Mendefinisikan konstanta
  2. Mendefinisikan memori untuk penyimpanan data
  3. Kelompok memori kedalam segmen
  4. Melampirkan kode sumber (source code) secara kondisional (conditionally include)
  5. Melampirkan file lainnya

 
Pelolosan kode NASM melalui sebuah perintah (command) preprosesor (preprocessor) seperti C. Begitu pula, pengarahan preprosesor (directive preprocessor) dimulai dengan % dibandingkan # dalam C.

 

Pengarahan EQU

Pengarahan EQU dapat digunakan untuk mendefinisikan sebuah simbol. Simbol adalah nama dari konstanta yang dapat digunakan dalam program assembly.
Formatnya adalah:
                                simbol     equ     nilai
Nilai dari simbol tidak dapat didefinisikan secara berulang (didefinisikan kembali).

Pengarahan %define

Pengarahan ini adalah sama dengan pengarahan #define dalam C. Ini secara umum digunakan untuk mendefinisikan mkro konstan seperti dalam C.
                                %define     SIZE 100
                                mov        eax, SIZE
Kode di atas mendefinisikan sebuah makro dengan nama SIZE sebagai konstanta 100 dan ditunjukkan penggunaannya dalam instruksi. Makro sangat fleksibel daripada simbol dalam dua cara. Makro dapat didefinisikan kembali dan bisa lebih dari sekedar bilangan konstan.


Pengarahan Data 

Pengarahan data digunakan dalam segmen data untuk mendefinisikan ruang memori. Terdapat dua cara menyiapkan ruang memori. Cara pertama, hanya mendefinisikan ruang untuk data; cara kedua mendefinisikan ruang dan nilai awal. Metode pertama menggunakan satu dari pengarahan RESX. X diganti dengan huruf sebagai ukuran dari obyek (atau beberapa obyek) yang akan disimpan. Berikut ini ditunjukkan beberapa kemungkinan nilai itu. 

       UNIT       
       HURUF    
byte
B
word
W
double word
D
quad word
Q
ten bytes
T

Metode kedua (mendefinisikan sebuah nilai awal) menggunakan satu dari pengarahan DX. Huruf X adalah sama dengan pengarahan RESX. Hal ini sangat umum untuk menandai lokasi memori dengan label. Label merupakan salah satu cara mudah untuk mengarahkan lokasi memori dalam kode.
Berikut ini terdapat beberapa contoh: 



   LABEL  
      INSTRUKSI     
KOMENTAR
L1
db     0
; byte dengan label L1 diinisialisasi dengan nilai 0
L2
dw    1000
; word dengan label L2 ddiinisialisasi dengan nilai 1000
L3
db     110101b
; byte diinisialisasi dengan biner 110101 (53 dalam desimal)
L4
db     12h
; byte diinisialisasi dengan heksa 12 (18 dalam desimal)
L5
db     17o
; byte diinisialisasi dengan oktal 17 (15 dalam desimal)
L6
dd     1A92h
; double word ddiinisialisasi dengan heksa 1A92
L7
resb  1
; menyiapkan ruang 1 byte tidak diinisialisasi
L8
db     "A"
; byte diinisialisasi oleh kode ASCII untuk A (65)
  
Tanda "..." dan '...' adalah sama perlakuannya. Konsekwensinya data yang didefinisikan disimpan secara berurutan dalam memori.  Dengan demikian L2 disimpan secara seketika sesuada L1 dalam memori. urutan dari memori dapat didefinisikan juga.

   LABEL  
      INSTRUKSI     
KOMENTAR
L9
db 0, 1, 2, 3
; mendefinisikan ruang 4 byte dinisialisasi dengan nilai 0, 1, 2, 3
L10
db "w", "o", "r", ’d’, 0    
; mendefinisikan urut-urutan karakter dalam memori yaitu ASCII w, o, r, d dan diakhiri dengan konstanta 0
L11
db ’word’, 0
; mendefinisikan urut-urutan karakter dalam memori yaitu ASCII word dan diakhir dengan konstanta 0
 

Untuk urutan yang sangat besar, pengarahan TIMES dalam NASM seringkali digunakan. Pengarahan ini mengulang sejumlah operand spesifik, sebagai contoh:

   LABEL  
      INSTRUKSI     
KOMENTAR
L12
times 100 db 0
; sama dengan db 0 sebanyak 100 kali
L13
resw 100
; menyediakan ruang memori untuk 100 word

Ingat bahwa label dapat digunakan untuk mengarahkan ke data dalam kode. Terdapat dua cara bahwa sebuah label dapat digunakan. Jika label akan digunakan, label akan diinterprestasikan sebagai alamat (atau offset) dari data. Jika label diletakkan dalam kurung kotak ([...]), akan diinterprestasikan sebagai data pada alamat yang ditunjukkan oleh label. Dalam bentuk yang lain, salah satu yang harus diingat bahwa sebuah label adalah sebagai pointer data pada alamat tertentu dan kurung kotak direferensikan sebagai pointer seperti halnya araterisk (*) dalam C. (MASM/TASM memiliki perbedaan konvensi). Dalam mode 32bit, pengalamatannya adalah 32bit.
Berikut ini terdapat beberapa contoh:
  
   NO 
      INSTRUKSI     
KOMENTAR
 1
 mov al, [L1]
 ; salin byte memori dengan alamat yang ditunjukkan oleh L1 ke register AL
 2
 mov eax, L1
 ; register EAX = alamat byte ditunjukkan oleh L1
 3
 mov [L1], ah
 ; salin AH ke byte memori dengan alamat oleh L1
 4
 mov eax, [L6]
 ; salin double word memori dengan alamat oleh L6 ke register EAX
 5
 add eax, [L6]
 ; EAX = EAX + double word memori dengan alamat oleh L6
 6
 add [L6], eax
 ; double word memori dengan alamat oleh L6 += EAX
 7
 mov al, [L6]
 ; salin byte pertama dari double word memori dengan alamat oleh L6 ke AL

Label yang digunakan dalam contoh di atas merupakan label yang diberikan dalam contoh sebelumnya. Baris 7 dari contoh di atas menunjukkan sebuah properti yang penting untuk NASM. Assembler tidak dapat menangkap dari jenis data yang ditunjukkan oleh label tersebut. Ini tergantung pada programmer untuk membuat suatu kepastian bahwa penggunaan sebuah label harus benar. Selanjutnya hal ini secara umum untuk menyimpan alamat dari sebuah data dalam register dan menggunakan register seperti halnya pointer dalam variabel C. Lagi, tidak ada pengecekan yang dilakukan bahwa sebuah pointer digunakan secara benar. Cara ini, assembly akan lebih banyak menghasilkan error daripada C.
Instruksi berikutnya adalah: 
mov [L6], 1    ; simpan (store) 1 byte ke memori yang ditunjukkan oleh label L6
Pernyataan tersebut menghasilkan sebuah operasi dengan ukuran yang tidak salah (error), mengapa ?. Sebab assembler tidak mengetahui apa yang akan disimpan (store) sebagai 1 byte, word atau double word. Untuk memperbaiki ini, tambahkan sebuah spesifikasi ukuran:
mov dword [L6], 1      ; simpan (store) 1 byte ke memori yang ditunjukkan oleh label L6
Hal ini akan mengatakan ke assembler untuk menyimpan 1 byte ke double word yang dimulai dengan alamat yang ditunjukkan oleh label L6. Spesifikasi ukuran lainnya adalah:  BYTE, WORD, QWORD and TWORD.

Input and Output

Input dan output merupakan aktifitas yang sangat bergantung dengan sistem. Hal ini merupakan antarmuka denga perangkat keras sistem. Bahasa tingkat tinggi, seperti C, dilengkapi dengan pustaka (library) standar berupa rutin-rutin program yang dapat diperoleh secara sederhana, programming membentuk antarmuka I/O. Bahasa assembly tidak memiliki library standar. C harus secara langsung mengakses perangkat keras (melalui operasi pengijinan dalam mode protect) atau menggunakan rutin beraras rendah yang diperoleh dalam sistem operasi.
Sangat umum rutin assembly di-antarmuka-kan dengan C. Salah satu keuntungannya bahwa kode assembly dapat digunakan sebagai library standar C untuk rutin I/O. Selanjutnya, salah satu yang harus diketahui adalah aturan untuk meloloskan informasi rutin dengan informasi yang digunakan C. Aturan ini sangat komplek untuk dijelaskan disini (akan dijelaskan pada pembahasan berikutnya). Untuk menyederhanakan I/O, digunakan rutin yang siap dipakai untuk menyembunyikan aturan-aturan C yang komplek dan akan diperoleh cara antarmuka yang sangat sederhana.
Berikut ini diuraikan fungsi setiap rutin yang dapat anda peroleh disini.

NAMA RUTIN
FUNGSI RUTIN
print_int                 
tampilkan ke layat nilai integer yang disimpan dalam register EAX
print_char
tampilkan ke layar karekter dalam bentuk nilai ASCII yang disimpan dalam register AL
print_string
tampilkan ke layar berupa string dengan alamat yang disimpan dalam register EAX. String harus berupa Ctype string (diakhiri dengan null).
print_nl
tampilkan ke layar karakter baris baru (new line)
read_int
baca sebuah nilai integer dari keyboard dan disimpan kedalam register EAX
read_char
baca karakter tunggal dari keyboard dan disimpan dalam bentuk kode ASCII kedalam register EAX.

Seluruh rutin menyediakan nilai dari seluruh register, kecuali rutin read. Rutin ini memodifikasi nilai yang ada dalam register EAX. Untuk menggunakan rutin ini, harus menyertakan file rutin dalam program dengan pengarahan preprosesor %include yang akan menginformasikan ke assemble mengenai penggunaan file rutin tersebut.
Berikut ini harus ditambahkan ke program assembly anda sebelum menggunakan rutin:
%include "asm_io.inc"
Untuk menggunakan salah satu rutin print,  terlebih dahulu muati register EAX dengan nilai yang benar dan gunakan instruksi CALL untuk mengakses rutin. Instruksi CALL adalah sama dengan sebuah pemanggilan fungsi dalam bahasa pemrograman beraras tinggi. Selanjutnya akan melompat mengeksekusi ke bagian kode yang lainnya, tetapi akan kembali ke asalnya sesudah rutin selesai dieksekusi.


http://fpga.songolimo.net/kuliah-1/bahasa-assembly/pengantar-bahasa-assembly