Tugas Ke 8
“Struktur Program Assambler dan Program C”
STRUKTUR ASSEMBLY
1. LABEL
Pelabelan simbol dari alamat assembler (alamat perintah pada tingkat mesin)
2. MNEMONIC
Deskripsi simbol operasi
a. Mnemonic Code
3. OPERANDS
Berisi alamat atau variabel jika perlu
4. COMMENTS
CONTOH PROGRAM BAHASA C
}
//definisi fungsi jumlah dengan parameter
// berupa pointer var1 dan *var2 uraian program
int jumlah(var1, *var2,);
{
return var1 + var2 ; penutup
}
Keterangan program:
a. Mul digunakan untuk mengalikan suatu operand dengan register AL atau AX. AX sebagai nilai awal,
1. BL diset dengan nilai factorial yang akan di cari.
b. ULANG, jika BL = 0 maka EXIT, jika tidak maka MUL BX, DEC BL, lalu kembali ke ULANG.
c. Hasil faktorial disimpan dalam register AX.
d. Sebagai informasi tambahan, angka 4 dapat diubah-ubah.
Penjelasan
• Header baris
Di baris paling awal, terdapat kode #include. Perintah #include digunakan untuk
memasukkan sebuah file khusus yang memungkinkan dalam mengakses berbagai
fitur tambahan dalam bahasa C. Dalam contoh diatas, file stdio.h berisi kode
program agar nantinya dapat mengakses perintah printf. File stdio.h sendiri
merupakan singkatan dari Standard Input/Output. Dengan kata lain, agar di dalam
kode program nanti dapat menggunakan perintah printf, di bagian paling atas kode
program C harus terdapat baris #include <stdio.h>. File include ini juga sering
disebut sebagai header file, dan karena itu pula menggunakan akhiran .h.
• Fungsi Main()
Satu-satunya perintah yang harus ada di setiap kode program bahasa C adalah
main(). Struktur main() sendiri pada dasarnya merupakan sebuah fungsi (function).
Isi dari function ini diawali dan diakhiri dengan tanda kurung kurawa ” { ” dan ” } “
. Di dalam tanda kurung inilah “ isi ” dari kode program penyusun fungsi main()
ditulis. Kode int sebelum main() menandakan nilai kembalian atau hasil akhir dari
function main(). Kode int merupakan singkatan dari integer, yakni tipe data angka
bulat. Dengan demikian, kode program main() yang ditulis di atas harus
menghasilkan sebuah angka bulat (menggunakan perintah return).
• Deklarasi Variabel
Membuat variabel angka1, angka2, angka3. Dengan type data float dan
Variabel jumlah dan rata_rata dengan type data float yang akan diisi nilai
dengan menggunakan perintah input output
*variabel jumlah berisi penjumlahan tiga buah nilai (belum dibagi 3).
*rata_rata berisi nilai dari variabel jumlah kemudian dibagi 3(Rata-Rata nilai).
Nama : Sawung Seta P. Y NIM 5301419017 Robel 1
Beri contoh program dengan bahasa Assambler dan bahasa C, masing-masing satu buah. Tunjukan
strukturnya
Bahasa Assambler
.include “m8535def.inc”
.org 0x00
rjmp main
main: ldi r16, low(RAMEND)
out SPL,r16 Inisialisasi program
ldi r16, high(RAMEND)
out SPH,r16
Bahasa C
#include <avr.h>
#include <delay.h> Kepala program
Uint8_t on,off;
Int main (void) Judul program
{
DDRD = 0xFF;
on = 0xFF;
off = 0;
while(1)
{
PORTD = on; Uraian program
delay_ms(1000);
PORTD = off;
delay_ms(100);
}
Return 0;
} Penutup
Nama : Andi M. Dzulfikar NIM 5301419018 Robel 1
A. Bahasa Assambler
.include “m32def.inc” ; Memanggil Librari ATMEGA 32
Org 0h ; Memulai program dari alamat 0H INISIALISASI PROGRAM
Mulai: ; Label Program
Mov P1,#01010101B ; LED P1.0, P1.2, P1.4 dan P1.6 menyala (=55h)
Acall Delay ; lakukan penundaan sesaat
Mov P1,#10101010B ; LED P1.1, P1.3, P1.5 dan P1.7 menyala (=0AAh)
Acall Delay ; lakukan penundaan sesaat
Sjmp Mulai ; ulangi lagi dari awal
; sub-rutin DELAY
PROGRAM UTAMA
DELAY: MOV R0,#5H ; Isi Register R0 dengan 5 (5x ulang)
DELAY1: MOV R1,#0FFH ; Isi Register R1 dengan 255 (255x ulang
DELAY2: MOV R2,#0 ; Isi register R2 dengan 0 (256x ulang)
DJNZ R2,$ ; R2=R2-1, jika R2 belum 0 ulangi lagi
DJNZ R1,DELAY2 ; R1=R1-1, jika R1 belum 0 ulangi DELAY2
DJNZ R0,DELAY1 ; R0=R0-1, jika R0 belum 0 ulangi DELAY1
RET ; Kembali ke pemanggil subrutin DELAY
END ; Mengakhiri program PENUTUP PROGRAM
B. Bahasa C
#include <mega32.h> ; Memanggil fungsi library pada ATMEGA32
#include <delay.h> ; Memanggil fungsi delay
HEADER PROGRAM
#include <stdio.h> ; Memanggil fungsi Input Output
void main(void) ; Permulaan program yang dijalankan
PEMBUKA PROGRAM
{
DDRC=0b11111111; ; Mengubah Pin C menjadi Output
while (1) INISIALISASI PROGRAM
{ PORTC=0b11111111; ; Output seluruh Pin C menjadi High
delay_ms(30); ; Delay / tunda progam selama 30 ms
PORTC=0b00000000; ; Output seluruh Pin C menjadi Low PROGRAM UTAMA
delay_ms(30); ; Delay / tunda progam selama 30 ms
}
Return; ; Penutup Program
PENUTUP PROGRAM
}
Nama : Vada Candra W. P. NIM 5301419019 Robel 1
Contoh Program Bahasa Assembler
Input Output Port
.model small
.code
org 100h Inisialisasi Program
mulai:
mov ah,2
mov dl,'B'
int 21h
int 20h Program Utama
end mulai
Ø .Model small (program yang akan dibuat hanya membutuhkan memory kecil)
Ø .Code org 100h (kita memberitahukan bahwa kita akan menggunkan kode segmen)
Ø Mulai : (label, dan diakhir dengan label end mulai untuk membatasi kode inti)
Ø Mov ah,2 (perintah menampilakan karakter yang disimpan dalam register DL)
Ø Mov dl, “B” ()
Ø Int 21h dipasangkan dengan int 20h (berfungsi untuk menampilkan sebuah karakter pada layar)
Output Program Menampilkan Karakter
Bahasa C
Struktur program menggunakan fungsi scanf
INIT_uC: ;Label
;Inisialisasi Awal
CALL FUNGSI1
WHILE_1:
; program utama
ACALL
FUNGSI2
LCALL
FUNGSI3
SJMP
WHILE_1 ;Loop forever
STRUKTUR ASSEMBLY
5. LABEL
Pelabelan simbol dari alamat assembler (alamat perintah pada tingkat mesin)
6. MNEMONIC
Deskripsi simbol operasi
d. Mnemonic Code
e. Symbolic operated specification
f. Declaration off data
7. OPERANDS
Berisi alamat atau variabel jika perlu
8. COMMENTS
#include <stdio.h>
int N, i;
int arr[100];
main(){
printf(" Masukkan nilai panjang array (maksimal 100) : ");
scanf("%d", &N);
i=0;
while(i<N){
printf(" Masukkan angka pada posisi %d : ", i);
scanf("%d", &arr[i]);
i++;
}
/*
for(i=0;i<N;i==){
printf(" Masukkan angka pada posisi %d: ", i);
scanf("%d", &arr[i];
}
*/
printf(" Angka-angka pada array : ");
for(i=0;i<N;i++){
printf("%d;", arr[i]);
}
Return 0;
}
Nama : Ika Nurjanah NIM 5301419022 Robel 1
Bahasa C
#include <io.h> Kepala Program
void main(void)
Judul Program
{
DDRA=0xFF;
DDRB=0xFF; Definisi
while(1) konstanta/variabel
Uraian Program
{
PORTB=0x92; Uraian Program
PORTA=0x7F;
}
Return 0;
Penutup
}
Bahasa Assambler
.include “m8535def.inc : menggunakan fasilitas file2 yang dalam AtMega8535
.org 0x0000 : alamat awal program
rjmp main
main: ldi R16,low(RAMEND) : mengisi R16 dengan Low Inisialisasi
out SPL,R16 : output SPL diisi dengan R16 Program
ldi R16,high(RAMEND) : mengisi R16 dengan High
out SPH,R16 : output SPH diisi dengan R16
out ddra,R16
Program Utama
cbi PortA,1
sbi PortA,1
rjmp ulang
Nama : Novira Rizki A NIM 5301419023 Robel 1
CONTOH PROGRAM BAHASA C
A. Storing Number within Array
#include <stdio.h>
int N, i;
float arr[50], sum;
Kepala Program
main(){
Kepala Program
printf("Masukkan nilai panjang array (maksimal 50): ");
scanf("%d", &N);
for(i=0;i<N;i++){ Definisi
konstanta/variabel
printf("Masukkan angka pada posisi %d: ", i);
scanf("%f", &arr[i]);
}
i=0; sum=0;
for(i=0;i<N;i++){
arr[i]=(arr[i]/100)*50;
sum=sum+arr[i]; Uraian Program
}
printf("Hasil penjumlahan: %f", sum);
} Penutup
.org 0x00
rjmp main
Inisialisasi Program
main:
ldi r16,low(RAMEND)
out SPL,r16
ldi r16,high(RAMEND)
out SPH,r16
cpi r18,3
brge END_IF
;THEN
Program Utama
STS 0x60,r18 ; copy isi r18 ke lokasi SRAM alamat 0x60
END_IF:
Bahasa C
File header
#include <avr.h>
Kepala program
#include <delay.h>
Deklarasi variabel
Uint8_t on,off;
Nama file
Int main (void) Judul program
Uraian program (pindah baris ditandai dengan tanda titik koma)
{
Buat port D menjadi output
DDRD = 0xFF;
on = 0xFF;
off = 0;
perulangan program
while(1)
{
PORTD = on;
Uraian program
delay_ms(1000);
PORTD = off;
delay_ms(100);
}
Return 0;
Penutup
}
Nama : Novi Ayu Suryani NIM 5301419025 Robel 1
#include <mega32.h>
File Header, file yang terdapat didalam internal
#include <delay.h>
mikrokontroler.
void main(void){
Nama File, fungsi dalam file program yang dapat dipanggil.
DDRC=0b11111111;
{
PORTC=0b11111111; Tanda untuk pembuka program dimana diletakkan
delay_ms(30); sata program akan dimulai.
PORTC=0b10101010;
delay_ms(30);
PORTC=0b11010101;
delay_ms(30); Uraian Program LED, saat dimana setiap tahap
PORTC=0b11101101; program diproses sesuai keinginan pembuat.
delay_ms(30);
PORTC=0b11110111;
delay_ms(30);
PORTC=0b11111111;
}
Return; Perintah untuk menutup program dengan mengembalikan ke awal.
}
Tanda penutup program, dimana terletak pada
akhir sebuah proses program.
.include “m8535def.inc”
.org 0x00
rjmp main
main: ldi r16,low(RAMEND)
Inisialisasi Program
out SPL,r16
ldi r16,high(RAMEND)
out SPH,r16
ldi r16,0x80
ldi r17,0x80
add r16,r17
ldi r18,0x02 Program Utama
adc r16,r18
here: rjmp here
Bahasa C
File Header
#include <stdio.h>“
#include <conio.h> Kepala Program
#include <iostream.h>
Nama File
Main() Judul Program
Deklarasi Variabel
{
Float a, b, c;
a = 7.5;
b = 8.4; Definisi konstanta/variabel
c=0;
Uraian Program (pindah baris ditandai dengan tanda titik koma)
clrs();
cout<< ”Masukkan nilai A : “ <<a;
cout<< ”Masukkan nilai b : “ <<b; Uraian Program
cout<< “Masukkan nilai c : “ <<c;
c = a + b;
getch(); Penutup
}
Nama : M. Dicky Ari S NIM 5301419027 Robel 1
Penulisan Dalam Bahasa Assembly
PROGRAM FACTORIAL
PROSES:
MOV AX, 1
MOV BL, 4
ULANG:
CMP BL, 0
JE EXIT
MUL BX
DEC BL
JMP ULANG
EXIT:RET
INT 20H
END
Penjelasan
Include, adalah file header yang memanggil library fungsi stdio
Int main() adalah fungsi yang pertama kali akan dijalankan oleh program
Baris 5 adalah deklarasi variable yang akan digunakan untuk menyimpan nilai
Baris 7, mengisi nilai pada variable angka1, angka2, angka3
Baris 9 dan 10 adalah proses perhitungan jumlah dan berdasarkan nilai pada angka1, angka2, dan angka3
Baris 12 dan 13, adalah perintah output ke layar
Return(); adalah perintah untuk memberikan nilai kembali, karena main diatas program bersifat
fungsi(int)
Hasil