aplikasi penjumlahan dengan bahasa rakitan “assembly”

Disini saya akan membagikan postingan tentang membuat sebuah aplikasi penjumlahan dengan bahasa rakitan atau lebih dikenal dengan bahasa Assembly, mungkin dari sahabat semua sudah tidak asing lagi dengan aplikasi seperti ini, langsung saja kita bahas bersama sama ..

Untuk operasi penjumlahan di bahasa rakitan atau assembly kita bisa menggunakan perintah ADD. Pada opearasi penjumlahan ini secara umum strukturnya adalah ADD AX,BX dimana nilai AX = AX+BX. Atau bisa di katakan jika hasil penjumlahan AX dan BX akan di simpan di register AX. Contoh di atas adalah penjumlahan 16 bit untuk 8 bit bisa di tulis dengan struktur seperti ini ADD AL,BL dimana hasil penjumlahan AL (8 bit) dan BL (8 bit) akan di simpan di register AL.

Contoh program penjumlahan dua buah bilangan

;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
;                             Program: coba.asm                              ;
;                             Oleh: Eko Yunianto                              ;
;                      Fungsi : Operasi Penjumlahan                ;
;=================================;

.MODEL SMALL
.CODE
ORG 100h
MULAI :
JMP PROSES
a DW 62                                                                   ; data a sebagai Angka 1
b DW 25                                                                   ; data b sebagai Angka 2
c DW 2                                                                      ; data c sebagai komparasi
Kal01 DB ‘A = $’                                                    ; statement 1
Kal02 DB ‘B = $’                                                    ; statement 2
Ent DB 13,10,’$’                                                    ; funsi 13,10 untuk enter
Kal03 DB ‘Hasil Penjumlahan A+B = $’      ; statement 3

PROSES:
MOV AH,09                                 ; Buka service cetak karakter
MOV DX,OFFSET Kal01          ; Ambil alamat offset Kal02
INT 21h                                         ; Cetak perkarakter sampai tanda $
MOV AX, a                                   ; AX = a
JMP TAMPIL                              ; Loncat ke label tampil
SATU :
MOV AH,09                                ; Buka service cetak karakter
MOV DX,OFFSET Ent               ; Ambil alamat offset Ent
INT 21h                                         ; Cetak perkarakter sampai tanda $
MOV DX,OFFSET Kal02          ; Ambil alamat offset Kal02
INT 21h                                         ; Cetak perkarakter sampai tanda $
MOV AX, b                                   ; AX = b
JMP TAMPIL                              ; Lompat ke label TAMPIL
DUA :
MOV AH,09                                ; Buka service cetak karakter
MOV DX,OFFSET Ent              ; Ambil alamat offset Ent
INT 21h                                        ; Cetak perkarakter sampai tanda $
MOV DX,OFFSET Kal03          ; Ambil alamat offset Kal03
INT 21h                                         ; Cetak perkarakter sampai tanda $
MOV AX, a                                   ; AX = a
ADD AX, b                                     ; AX = AX + b
TAMPIL :
DEC c                                               ; Kurangi sate data di c
MOV BX,10                                   ; BL = penyebut = 10 (desimal)
XOR CX,CX                                    ; CX = 0
ULANG :
XOR DX,DX                                   ; Cegah sisa bagi menjadi pembilang !
DIV BX                                           ; Bagi angka yg 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                                  ; Jika belum, ulangi lagi !
CETAK :
POP DX                                           ; Ambil 1 angka yang disimpan
ADD DL,’0′                                     ; Ubah angka tersebut dalam kode ASCII
MOV AH,02                                  ;
INT 21h                                          ; Cetak angka tersebut
LOOP CETAK                                ; ulangi

CMP c,1h                                        ; Membandingkan nilai c dengan 1h
JE SATU                                         ; Loncat ke labelSATU jika nilai c = 1h
JB DUA                                           ; Loncat ke label DUA jika nilai c < 1h
INT 20h                                         ; Interupt 20h untuk menghentikan program
END MULAI

Demikian yang bisa saya sampaikan, semoga postingan kali ini bermanfaat bagi sahabat semua Smile

Post a Comment