Sabtu, 19 Juli 2014

Pendapat Salah Tentang Kelebihan Bahasa Assembly


Banyak yang beranggapan bahwa di balik kesulitan bahasa assembly, terdapat banyak kelebihan yang tidak dapat diperoleh di bahasa pemrograman tingkat tinggi. Akan tetapi, rupanya pendapat ini tidak memiliki bukti yang kuat. Kelebihan - kelebihan tersebut antara lain:

Ukuran proram lebih kecil
Sebenarnya belum tentu juga. Dalam assembly, ukuran besar kecilnya program tergantung pada seberapa kuat pemahaman programmer dalam memilih instruksi dan metode yang paling efisien.

Program lebih cepat
Poin ini juga hamper sama dengan poin pertama, karena cepat-tidaknya program dipengaruhi oleh ukuran program. Terkadang, dalam tingkat program yang sudah kompleks, akan sulit sekali memilih instruksi yang tepat untuk meningkatkan efisiensi dan kecepatan program.

Penggunaan Instruksi Tidak Terbatas

Prosesor umumnya mendukung puluhan instruksi, akan tetapi umumnya hanya digunakan sebagian saja oleh compiler Bahasa pemrograman tingkat tinggi. Poin ini boleh dikatakan benar, tapi untuk pemrograman program biasa, pernyataan poin ini kuran tepat, karena ada pula instruksi yang hanya dieksekusi oleh program yang berjalan pada system space, seperti driver dan kernel sistem operasi.

Semua pernyataan yang sudah kita dengar sebelumnya memang benar, tapi jika kita tahu latar belakang pernyataan tersebut kita akan tahu bahwa tidak sepenuhnya pernyataan itu benar.
Read more

Cara Mencari File dengan API FindFirstFile

Pengenalan
Jika anda berencana membuat scanner, metode ini adalah salah satu yang wajib anda pahami. Windows menyediakan fungsi API yang dapat dimanfaatkan untuk mendapatkan daftar file dan folder dari suatu direktori. Fungsi ini adalah FindFirstFile, FindNextFile dan FindClose. Ada pula fungsi terbaru bernama FindFirstFileEx, akan tetapi parameternya terlalu banyak, jadi kita cukup pelajari FindFirstFile saja.
Bentuk prototype FindFirstFile dalah

HANDLE FindFirstFile(LPCTSTR lpFileName, LPWIN32_FIND_DATA lpFindFileData);

lpFileName merupakan parameter yang menentukan lokasi folder yag akan kita cari daftar filenya.
lpFindFileData merupakan parameter yang berisi pointer ke struktur WIN32_FIND_DATA. Di dalamnya, kita dapat mengambil nama file satu-persatu dari hasil penelusuran yang telah dilakukan.
Bentuk struktur WIN32_FIND_DATA adalah seperti berikut:
typedef struct _WIN32_FIND_DATA {
    DWORD dwFileAttributes;
    FILETIME ftCreationTime;
    FILETIME ftLastAccessTime;
    FILETIME ftLastWriteTime;
    DWORD    nFileSizeHigh;
    DWORD    nFileSizeLow;
    DWORD    dwReserved0;
    DWORD    dwReserved1;
    TCHAR    cFileName[ MAX_PATH ];
    TCHAR    cAlternateFileName[ 14 ];
} WIN32_FIND_DATA;


nFileSizeLow adalah ukuran file total, jika ukuran file diatas 4 GB, maka gabungan nFileSizeLow dan nFileSizeHigh akan menunjukkan ukuran file seluruhnya.
cFileName[] adalah nama file yang kita dapatkan dari hasl pencarian
cAlternateName adalah nama file tradisional(alternatif). Nama file ini biasanya terdiri atas 11 karakter dengan singkatan.

Yang akan kita praktekkan adalah bagaimana mengekstrak hasil pencarian data cFileName.
Selain Fungsi FindFirstFile, kita jga harus mengetahui fungsi FindNextFile. fungsi ini digunakan untuk mencari hasil penelusuran file-file selanjutnya.
Bentuk fungsi ini adalah:
BOOL FindNextFile(HANDLE hFindFile, LPWIN32_FIND_DATA);
hFindFile adalah nilai handle yang kita dapatkan setelah pemanggilan fungsi FindFirstFile.

Cara Kerja
  1. Pertama, kita harus membuat sebuah struktur data WIN32_FIND_DATA, lalu panggil fungsi FindFirstFile dengan parameter direktori pencarian diikuti tanda bintang (misal: "C:\Windows\*") dan parameter pointer ke struktur yang telah kita buat.  Jika berhasil, fungsi ini mengembalikan nilai handle(nilainya selalu bukan 0), jika 0 artinya gagal, mungkin parameter direktori yang anda masukkan salah ketik.
  2. Berikutnya Olah hasil penelusuran pertama yang disimpan  pada struktur data.
  3. Ketiga, Lakukan pemanggilan fungsi FindNextFile secara loop, hingga mengembalikan nilai 0(false). 0 memiliki arti tidak ada file lain. Jangan lupa untuk mengolah setiap hasil di setiap loopingnya.
  4. Terakhir, setelah semua penelusuran selesai, panggil fungsi FindClose untuk mengakhirinya.
Bentuk fungsi FindClose adalah sebagai berikut:
BOOL FindClose(HANDLE hFindFile);

Kode Sepenuhnya

#include<stdio.h>
#include<windows.h>

HANDLE h;
WIN32_FIND_DATA find_data;
int main(int argc, char *argv[])
{
    h = FindFirstFile("D:\\", &find_data);
    if(h==0)
    {
        printf("error!");
        exit(1);
    }
    printf(find_data.cFileName);
   
    while(FindNextFile(h,&find_data) == TRUE)
    {
        printf(find_data.cFileName);
        putch('\n');
    }
    FindClose(h);
}


Hasil

Read more

Cara Menghasilkan Huruf Acak A-Z (Bahasa C)

Huruf acak terkadang diperlukan dalam melakukan sesuatu yang berhubungan dengan keamanan, sehingga dalam keadaan tersebut kita harus mengetahui bagaimana proses pembuatan huruf acak. Dalam postingan kali ini, kita akan mencoba bereksperimen menghasilkan sekumpulan hurufdengan bahasa C. Bagaimana caranya? simak penjelasan berikut ini.


Kode
#include<stdio.h>
#include<time.h>


char hurufacak()
{
    char huruf;a
    int n;
    n = rand() % 26;
    huruf = 'a' + n;
    return huruf;
}
int main()
{
    int i;
    char huruf;
    srand(time(NULL));
    for(i=1000;i!=0;i--)
    {
        huruf = hurufacak();
        putch(huruf);
    }
}


Penjelasan

srand(time(NULL));
fungsi ini harus kita panggil sebelum menggunakan fungsi rand() agar, fungsi rand() dapat benar-benar menghasilkan angka acak. kita juga melibatkan fungsi time(), agar bilangan acak dihasilkan berdasarkan waktu. Srand cukup dipanggil sekali saja, yaitu ketika inisialisasi program.
 
n = rand() % 26;
fungsi ini digunakan untuk menghasilkan bilangan acak. Bilangan itu kemudian dibagi dengan 26, dan sisa pembagiannya disimpan dalam variabel n, sisa pembagian bilangan acak dapat dipastikan dihasilkan antara 0 - 25, karena kita memakai 26(sesuai dengan jumlah karakter).

huruf = 'a' + n;
Setelah mendapatkan bilangan acak antara 0 - 25, kita harus menambahkan huruf 'a' dengan bilangan acak tersebut, agar didapatkan huruf acak seperti yang diinginkan.

    for(i=1000; i!=0; i--)
    {
        huruf = hurufacak();
        putch(huruf);
    }

Kode diatas akan memanggil fungsi hurufacak() dan mencetak hasilnya sebanyak 1000 kali.
Berikut ini adalah hasil dari pembuatan huruf acak:
 

Read more