Archive

Archive for the ‘programming’ Category

Assembler: Membuat Insertion Sort+Minimum Sort

March 20, 2009 wonggoblog Leave a comment

Ini bakal panjang dan membosankan, sumpah. Jika tidak tertarik atau berkepentingan saya harap tidak memaksakan diri membacanya.

Program ini mempunyai kemampuan mengurutkan masukan baik berupa integer, real maupun karakter. Proses pengurutan dapat dilakukan dengan insertion sort maupun minimum sort.

#########################################################################
# author    :     Kuncoro Dwi Atmojo     nama program:             >>> SuperSorter <<<                                                   #
##########################################################################
#>>>>>>>>>>>>>>>>               main program                    <<<<<<<<<<<<<<<<<<<<<<<<#
#>>>>                  program meminta masukan N bilangan/karakter                 <<<<<#
#>>>>>>>>             program mengurutkan bilangan/karakter                      <<<<<<<#
#>>>>>>>>>>             tersebut dengan insertion sort/minimum sort         <<<<<<<<<<<<#

############# penggunaan register #######################################################
#$s1    :nilai N, jumlah input                                                            #
#$s0    :counter untuk pengisian N bilangan/karakter                                    #
#$s2    :pilihan integer, pecahan atau karakter                                            #
#$s3    :counter untuk menampilkan isi array yang terurut                                #
#$t1    :index untuk menggeser nilai yang lebih besar dari masukan baru                    #
#$t3    :index dari masukan baru, selalu bertambah setiap ada masukan                    #
#$t4    :nilai masukan pengguna                                                            #
#$t5    :index dari nilai yang dibandingkan dengan masukkan baru                        #
#$t6    :nilai dalam array yang akan dibandingkan, nilai dari array dengan indeks $t5    #
#$t7    :index array yang akan ditampilkan                                                #
#$t8    :temp karakter yang akan diprint                                                #
#$f2    :masukan baru berupa pecahan                                                    #
#$f4    :pecahan yang akan dibandingkan dengan masukan baru                                #
###############     kamus     ###########################################################
.data
arrint: .word 0:300
arrfloat: .space 2048
arrchar: .space 1024
##############   algoritma   #################
.text
.globl main
main:                                            # main program
jal inisial                                    # menanyakan jenis masukkan, metode sorting yang dipakai, jumlah N
beq $t0,98, main_minsort                    # jika memilih metode minimum sort (b), selanjutnya ke main_minsort

main_insort:                                # main untuk insertion sort
li $s0, 1
li $t3, 0                                # index masukan, jika char maka t3 +1, int maka t3+4, double maka t3+8
muter:
jal input                        # minta masukan
jal insort                        # langsung mengurutkan setiap masukan
addi $s0,1
ble $s0, $s1, muter                # terus minta masukan hingga s0 sama dengan N
jal tampilkan                            # menampilkan hasilnya ke layar
j keluar                                # keluar program

main_minsort:                                 # main untuk minimum sort
li $s0, 1
li $t3, 0                                # index masukan, jika char maka t3 +1, int maka t3+4, double maka t3+8
jal input_minsort                    # meminta masukan, memasukkan ke dalam array tanpa mengurutkannya
addi $s0,1
ble $s0, $s1, input_minsort            # terus minta masukan hingga s0 sama dengan N
jal minsort                            # mengurutkan isi array dengan metode minimum sort
jal tampilkan                            # menampilkan hasil urutan ke layar
j keluar                                # keluar dari program
#>>>>>> end of main program <<<<<<#

#>>>>>> inisial <<<<<<<<<#
.data
str0: .asciiz “   ~~~ program mengurutkan N masukan ~~~\n   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n”
str1: .asciiz “\n N:”
str7: .asciiz “anda ingin memasukkan integer, pecahan atau karakter(i/p/k)? “
str8: .asciiz “\n pilih metode pengurutan:\n a. insertion sort\n b. minimum sort\n”
str9: .asciiz “(a/b)?”
pilihan: .space 8
.text
inisial:
la $a0, str0                        # menampilkan tulisan
li $v0, 4                            # ‘~~~ program mengurutkan…’
syscall

pilihinput:                            # >>>> memilih jenis input <<<<
la $a0, str7                    # menampilkan tulisan
li $v0,4                        # ‘anda ingin memasukkan integer…’
syscall

li $v0,8                        # meminta masukan
la $a0,pilihan                    # menyimpannya di ‘pilihan’
li $a1, 8
syscall

lb $t2,($a0)                    # meload pilihan ke $t2

beq $t2,105, pilihmetode        # jika masukan sudah benar, pilih metode
beq $t2,112, pilihmetode        # masukan yang benar ‘i’, ‘p’, atau ‘k’
beq $t2,107, pilihmetode

b pilihinput                    # jika masukan salah, minta masukan lagi

pilihmetode:                        # >>> memilih metode sorting yang digunakan <<<
la $a0, str8                    # menamppilkan tulisan
li $v0,4                        # ‘pilih metode…’
syscall

masukanpilihan:
la $a0, str9                # menampilkan tulisan ‘(a/b)?’
li $v0,4
syscall

li $v0,8                    # meminta masukan
la $a0,pilihan                # menyimpannya di ‘pilihan’
li $a1, 8
syscall

lb $t0,($a0)                    # meload masukan jenis metode ke $t0

beq $t0,97, masukkanN            # jika pilihan benar (a/b)
beq $t0,98, masukkanN            # branch ke masukkanN

b masukanpilihan                # jika salah minta masukan lagi

masukkanN:                                # >>> meminta masukan N jumlah input <<<
la $a0, str1                        # menampilkan tulisan
li $v0, 4                            # ‘N: ‘
syscall

li $v0,5                            # meminta masukan, menyimpan di $v0
syscall
move $s1,$v0                        # memindah masukan ke $s1

blez $s1, keluar                    # jika N kurang dari 1, keluar

jr $ra                                # kembali ke register $ra (setelah jal inisial)
#>>>>>>>> end of inisial <<<<<<<<<<<<#

#>>>>>>>> input <<<<<<<<<<<<<<<<<<<#
.data
str3: .asciiz “<> masukan ke-”
str4: .asciiz “: “

.text
input:                                    # >>> meminta input bilangan/karakter yang ingin diurutkan <<<
la $a0, str3                        # menampilkan tulisan ‘masukan ke-’
li $v0, 4
syscall

move $a0, $s0                        # menampilkan counter masukan
li $v0, 1
syscall

la $a0, str4                        # menampilkan ‘: ‘
li $v0, 4
syscall

beq $t2,105, input.ins.int            # branch sesuai pilihan jenis input
beq $t2,112, input.ins.float        # i (105), p(112), atau k(107)
beq $t2,107, input.ins.char

input.ins.int:
li $v0,5                        # meminta masukan integer, menyimpan di $v0
syscall
jr $ra                            # kembali ke langkah setelah input

input.ins.float:
li $v0,7                        # meminta masukan pecahan (double), menyimpak di $f0
syscall
jr $ra                            # kembali ke langkah setelah input

input.ins.char:
li $v0,8                        # meminta masukan karakter
la $a0, arrchar($t3)            # menyimpan di arrchar($t3)
li $a1,1024
syscall
jr $ra                            # kembali ke langkah setelah input
#>>>>>> end of input <<<<<<<<<<#
Read more…

membuat Program Pengecek Palindrome dengan Assembler

March 7, 2009 wonggoblog 4 comments

Assembly merupakan bahasa pemrograman tingkat rendah yang sangat dekat dengan kode-kode mesin. Assembly pertama kali dikembangkan pada tahun 1950 sebagai bahasa pemrograman generasi kedua. Pada masa itu bahasa ini merupakan bahasa yang canggih karena programmer tidak perlu lagi mengingat alamat memori dalam memprogram. Sekarang Assembly berguna sebagai perantara bahasa-bahasa tingkat tinggi seperti C, C++, Java dan lain sebagainya. Assembly digunakan dalam pembuatan embedded system. Assembler berguna untuk  mentranslate perintah-perintah Assembly ke dalam kode-kode mesin.  Syntax Assembly agak bervariatif bergantung dengan organisasi dan arsitektur komputer. Kali ini kita belajar assemply MIPS, dengan menggunakan simulatornya SPIM.

download pcSPIM di sini

Program yang akan kita buat adalah program pengecek palindrom. Program akan meminta masukan kalimat yang diakhiri tanda “#” kemudian menyatakan apakah kalimat tersebut merupakan palindrom. Palindrom merupakan kalimat yang dibaca sama dari depan maupun belakang, contohnya: “malam”, “kasur rusak”, “kodok”, dan sebagainya.

 

#PROGRAM IsPalindrom

#program meminta masukkan kalimat dengan diakhiri tanda “#”

#program memberitahu apakah kalimat tersebut merupakan palindrom

.data #kamus

str1: .asciiz “masukkan sebuah kalimat dan akhiri dengan #: “

str2: .asciiz “kalimat tersebut adalah sebuah palindrom”

str3: .asciiz “kalimat tersebut bukan sebuah palindrom”

kalimat: .space 64


.text #algoritma

main:

li $v0, 4

la $a0, str1

syscall #menampilkan str1 ke layar


li $v0, 8

la $a0, kalimat #menyiapkan buffer

li $a1, 64 #menyiapkan panjang tempat

syscall #meminta masukkan kalimat


move $s0, $a0 #menyimpan address huruf pertama kalimat ke $s0

move $s1, $a0 #dan juga $s1, yang akan

#digunakan sebagai pencacah

loop:

lb $s2, ($s1) #meload isi byte di $s1 dan memasukkannya ke $s2

addi $s1, 1 #mencacah $s1

bne $s2, 35, loop #loop berhenti jika bertemu tanda “#”

addi $s1, -2 #mengurangi $s1 dengan 2, ini adalah

#address huruf terakhir kalimat


li $s4, 1 #inisiasi $s4 dengan 1, berarti true

putar: 

lb $s2, ($s0) #mengeluarkan isi byte $s0 dan $s1

lb $s3, ($s1)

bne $s2, $s3, ngenol #membandingkannya, jika tidak sama

  #$s4 menjadi 0/false

addi $s0, 1 #mencacah $s0 naik, $s1 turun

addi $s1, -1

ble $s0, $s1, putar #kembali ke putar hingga $s0 lebih besar dari $s1


li $v0, 4

la $a0, str2

syscall #$s4=1, menampilkan str2

j metu


ngenol: li $s4, 0

li $v0, 4

la $a0, str3

syscall #$s4=0, menampilkan str3


metu: li $v0,10

 syscall

Sedikit Penjelasan

tanda # berarti awal komentar. Suatu komentar dapat dibaca oleh manusia tetapi diabaikan oleh komputer. .data menandakan awal kamus atau variabel-variabel dan konstanta yang akan digunakan dalam kode program. .text menandakan awal algoritma / instruksi-instruksi dalam program.

str2: .asciiz “kalimat tersebut adalah sebuah palindrom” berarti kita mengassign ”kalimat tersebut adalah…”  yang bertipe ascii ke dalam variabel str2.

 

li $v0, 4

la $a0, str1

syscall 

berguna untuk menampilkan str1 ke layar. li$v0,4 menyediakan instruksi print string ke dalam alamat $v0. la $a0, str1 menyediakan string yang akan diprint ke dalam alamat $a0. syscall mengeksekusi instruksi dalam $v0.

bne $s2, 35, loop berarti branch if not equal, jika $s2 tidak sama dengan 35, maka program kembali ke instruksi loop:

untuk penjelasan-penjelasan yang lebih lengkap anda dapat langsung membaca komentar-komentar pada program di atas.

 

 

 

 

Starting Java Programming

February 26, 2009 wonggoblog Leave a comment

Java is an object oriented programming language.  It’s developed by James Gosling at Sun Microsystem in 1995. Java is a language derived from C++, so its instruction is similar to C++. Java sourcecode is compiled to bytecode (.class file). This bytecode can run in any computer architecture, as it’s slogan, “write once run anywhere” .

What to do?

1. Install JDK (Java Development Kit)

Download JDK at http://java.sun.com/javase/downloads/index.jsp. After downloading, install it by double clicking its installer. After it is installed, copy its bin address to Environtment of your computer. Right click My Computer -> Properties -> Advanced -> Environtment variable, look for the variable path , edit it, add the directories of your java.exe file (in bin folder) to it.

Now you can write javac and java to your command prompt  windows.

2. Start Programming

Open your text editor, I usually used notepad++, because it support many languages. If you use notepad++, change the language into Java. Try to write down this things..

public class HelloWorld{
                  public static void main(String[] args){
                                System.out.println(“Hello world….”);
                  }
}

Save this as HelloWorld.java

3. Compile it

Open command prompt. Change the directory to the directory you save HelloWorld.java.

>javac   HelloWorld.java

If you want to compile from other directory

>javac   (directory)/HelloWorld.java

After compiling, a .class file will be made. This .class file can run in any platform with JVM (Java Virtual Machine). JVM automatically installed when you install JDK.

4. Run your program

Write in your command prompt

>java   HelloWorld

Write the file name without the extension.. Then… you’ll see your text..

OK, that’s enough for today….

Categories: programming Tags: , ,

Robocode: Build The Best, Destroy The Rest

February 24, 2009 wonggoblog Leave a comment

robocode23

 

Robocode adalah sebuah game yang juga mengharuskan penggunanya untuk melakukan coding program. Bahasa pemrograman yang digunakan adalah Java TM, sehingga game ini bisa memperkenalkan bahkan melatih penggunanya dalam belajar bahasa Java dengan cara yang menyenangkan. Game ini berupa perang robot tank. Yang harus dilakukan pertama adalah membuat robot baru. Robot kita akan diberi perilaku standar, kita dapat mengganti sikap robot kita dalam menanggapi berbagai keadaan dengan melakukan coding. Misalnya kitaingin robot kita mendekati musuhnya ketika musuh terlihat. Robot buatan kita akan dipertandingkan dengan robot-robot lain. Robot yang dapat bertahan hingga akhir adalah pemenangnya.

Read more…

Categories: programming Tags: ,