Abstrak—Pada modul kedua ini praktikan akan mencoba II. LANDASAN TEORETIS
melakukan 13 percobaan yang berkaitan dengan
pointer,structure,array,dan operasi dalam level bit.Dalam A. Type of Data
percobaan ini dibutuhkan beberapa software seperti Notpad++,C Tipe data merupakan representasi suatu data dalam memori
Compiler,HexEdit,dan Code Block.Praktikan diharapkan dan menentukan operasi yang dapat dilakukan pada suatu
mampu mennganalisis dan memahami reperesentasi dari data bertipe tertentu, rentang nilai yang mungkin dimiliki
informasi yang dalam bentuk bit dan mengolahnya di dalam
oleh data bertipe tertentu, arti dari data, dan cara menyimpan
memory,
data tersebut dalam memory. Terdapat beberapa tipe data
yang telah tersedia dalam bahasa C.
Kata Kunci— Pointer,Array,Structure,Memory.
B. Operasi Bitwise dalam Bahasa C
Bahasa C mendukung pengolahan informasi dalam level bit
I. PENDAHULUAN
menggunakan operator bitwise. Berbeda dengan operator
E. Pointer
Pointer merupakan variabel yang menyimpan alamat memory.
Dengan kata lain, pointer memiliki nilai alamat memory untuk
melakukan referensi terhadap suatu objek yang tersimpan
dalam memory komputer. Dengan menggunakan pointer, kita
Dan hasil kompilasi nya adalah :
dapat memiliki akses terhadap memory secara langsung.
Untuk setiap tipe data T, terdapat pointer ke T. Deklarasi
pointer dalam bahasa C dapat dilakukan dengan mudah,
contohnya int* ptr yang merupakan pointer yang melakukan
referensi terhadap objek bertipe integer.
Pointer juga dapat digunakan untuk menunjukkan structure
berdasarkan alamatnya di memory. Hal ini sangat berguna
untuk melakukan passing structure ke atau dari sebuah fungsi
hanya dengan memberikan alamat structure tersebut di
memory.
Analisis :
Dari kode program di atas kita dapat melihat bahwa terdapat
sebuat variabel yaitu x dan y. X merupakan target byte
ekstraksi dan y adalah besar byte pengekstrasian.
0 sampai 2. Output dari proses ekstraksi tergantung pada nilai x
dan y(berupa unsigned int).
C. Tugas 3 : Membuat Fungsi Masking Byte
Pada tugas 3 ini praktikan akan membuat program yang dapat
melakukan suatu mask pada urutan bit dengan aturan bit mulai
dari batas atas hingga batas bawah di set menjadi 1 sedangkan
bit lainnya di set menjadi 0. Analisis :
Berikut adalah code nya : Dari hasil compiler di atas dapat kita lihat bahwa setiap 2 bit
akan tertukar atau menjadi terbalik jika dibandingkan dengan
urutan bit yang pertama.
E. Tugas 5: Fungsi Pengurangan Byte
Pada tugas 5 ini praktikan akan mencoba membuat suatu
program untuk menghitung hasil pengurangan antara byte
pertama dengan byte kedua.
Berikut adalah code nya :
Analisis :
Pada fungsi ini program akan membuat suatu bit bernilai 1 dan
melakukan shift kiri sebanyak 31x,lalu melakukan shift kanan
sebanyak selisih antara batas atas dan batas bawah.Langkah
terkahir adalah melakukan shift right sebanyak 31-batas atas. Analisis :
Pada program diatas bilangan pertama kan dikurangi dengan
D. Tugas 4: Fungsi Membalik Ukuran Byte bilangan kedua seperti pengurangan matematika biasa.Angka
Pada tugas 4 ini praktikan akan melakukan percobaan yang digunakan maks 2 angka.
membalik ukuran byte dari suatu data X dengan switch byte ke
0 dengan byte ke 3 dan byte ke 2 dengan byte ke 1. F. Tugas 6:Fungsi Shift Register
Berikut adalah code nya : Pada tugas 6 ini praktikan akan mencoba membuat fungsi yang
merepresentasikan sebuah shift register pada rangkaian system
digital.Misal kita memiliki jumlah bit sebanyak 32 bit dan
setiap nilai yang dimasukkan kedalam shift register secara
bergantian adalah 5 bit.Shift register memliki awalan
0x00000000.Kemudia diberikan inpu 0x04,maka shift register
menjadi 0x00000004.
Berikut adalah codenya :
Analisis :
Dari hasil compiler diatas dapat kita lihat kita akan menentukan
jumlah inputan dan setelah itu akan muncul hasil shift
registernya sesuai dengan yang kita tentukan.
Analisis :
Cara kerja dari program ini adalah fungsi enkripsi dilakukan Berikut adalah hasil compiler :
byte per byte dan akan dilakukan operasi XOR pada varabel
decimal kemudian dlakukan operasi AND dengan 0xFF dan
diperolah hasil byte pertama.Begitu seterusnya hingga byte
selanjutnya.
J. Tugas 10 : Matriks Nama Berikut adalah hasil compiler :
Pada percobaan kali ini praktikan akan melakukan percobaan
membuat program yang dapat menerima input berupa nama dan
disimpan di array.
Berikut adalah code nya :
Analisis :
Program akan meminta inputan kata demi kata dan menyimpan
nya di array dank an ditampilkan kembali menjadi 1 baris.
Berikut adalah hasil compiler :
L. Tugas 12 : Perkalian Matriks
Pada tugas 12 ini praktikan akan melakukan percobaan
membuat program yang dapat melakukan perkalian 2 buah
matriks dan menghasilkan output hasil perkalian.
Berikut adalah code nya :
Analisis :
Dapat kita lihat bahwa program akan meminta inputan berupa
jumlah mahasiswa dan nama masing2 siswa dan akan di simpan
di array dan ditampilkan dalam bentuk matriks
Referensi
Basic format for books:
[1] Modul Praktikum Arsitektur Sistem Komputer Institut Teknologi Del
Lampiran
1. Tugas 1
//Praktikum NWS3103 Arsitektur Sistem Komputer
//Modul :2
//Percobaan : 0
//Tanggal : 11 Oktober 2018
//Kelompok :
//Rombongan : 02
//Nama (NIM) 1 : Gomgom Marbun (14S16019)
//Nama File : fungsiXOR.c
// Deskripsi : sebuah fungsi yang sama dengan XOR menggunakan AND dan
Komplemen
#include<stdio.h>
int fungsiXor (int x, int y);
int fungsiXor (int x, int y)
{
// algoritma
int result;
result = ~((~(~x&y))&(~(x&~y))); // fungsi AND dan komplement.
return result;
}
#ifndef FUNGSIXOR
#define FUNGSIXOR
int fungsiXor (int x, int y);
#endif
// librray
#include<stdio.h>
#include "fungsiXOR.h"
// code
int main (void) {
//Deklarasi variabel
int a,b ;
printf("Masukan bilangan integer pertama : ");
scanf("%d",&a);
printf("Masukan bilangan integer kedua : ");
scanf("%d",&b);
printf("Hasil operasi XOR : %d",fungsiXor(a,b));
return 0;
}
2. Tugas 2
//Praktikum NWS3103 Arsitektur Sistem Komputer
//Modul :2
//Percobaan : 0
//Tanggal : 13 Oktober 2018
//Kelompok :
//Rombongan : 02
//Nama (NIM) 1 : Gomgom Marbun (14S16019)
//Nama File : getByte.c
// Deskripsi : Fungsi yang dapat melakukan
ekstraksi byte ke-n dari suatu data X yang memiliki
ukuran tertentu. urutan byte pada data X diberi
nomor 0 untuk LSB hingga 3 untuk MSB.
#include<stdio.h>
#include "getByte.h"
int getByte (int x, int n)
{
switch (n)
{ case 0 :
return ((unsigned) (x & 0x000000FF)) >>
0;
case 1 :
return ((unsigned) (x & 0x0000FF00)) >>
8;
case 2 :
return ((unsigned) (x & 0x00FF0000)) >>
16;
case 3 :
return ((unsigned) (x & 0xFF000000)) >>
24;
}
}
3. Tugas 3
//Praktikum NWS3103 Arsitektur Sistem
Komputer
//Modul :2
//Percobaan : 0
//Tanggal : 11 Oktober 2018
//Kelompok :
//Rombongan : 02
//Nama (NIM) 1 : Gomgom
Marbun(14S16019)
//Nama File : bitMask.c
// Deskripsi : fungsi yang menghasilkan
suatu mask dengan aturan seluruh bit
diantara batas atas
// (highbit) dan batas bawah
(lowbit) diset menjadi 1 sedangkan bit
diluar highbit dan lowbit diset menjadi 0.
// Asumsi yang digunakan adalah
0<= batas bawah <=31 dan 0<= batas atas
<= 31.
#ifndef BITMASK
#define BITMASK
int bitMask(int highbit,int lowbit);
#endif
#include <stdio.h>
#include "bitMask.h"
int main(void)
{
int x,y;
printf("Masukan batas atas bit yang akan
dimasking : ");
scanf ("%d",&x);
printf("Masukan batas bawah bit yang akan
dimasking : ");
scanf("%d",&y);
printf("Hasil masking bit : 0x%x",
bitMask(x,y));
return 0;
}
4. Tugas 4
//Praktikum NWS3103 Arsitektur Sistem
Komputer
//Modul :2
//Percobaan : 0
//Tanggal : 11 Oktober 2018
//Kelompok :
//Rombongan : 02
//Nama (NIM) 1 : Gomgom
Marbun(14S16019)
// Nama File : main.c
// Deskripsi : main program untuk melakukan
reverse bytes
#include <stdio.h>
#include "reverseByte.h"
int main(void)
{
int x;
printf("Masukan data yang akan di reverse
urutannya : 0x");
scanf ("%x",&x);
printf("Hasil reverse urutan byte : 0x%x",
reverseBytes(x));
return 0;
}
#include <stdio.h>
#include "reverseByte.h"
int reverseBytes(int x)
{
unsigned Byte3 = (x & 0xFF000000);
//byte ke-3 dari x tetap, byte lainnya diset 0
unsigned Byte2 = (x & 0x00FF0000);
//byte ke-2 dari x tetap, byte lainnya diset 0
unsigned Byte1 = (x & 0x0000FF00);
//byte ke-1 dari x tetap, byte lainnya diset 0
unsigned Byte0 = (x & 0x000000FF);
//byte ke-0 dari x tetap, byte lainnya diset 0
Byte3 = Byte3 >> 24;
//Byte3 ini menjadi byte ke-0 atau di shift
kanan sebanyak 6 byte
Byte2 = Byte2 >> 8;
//Byte2 ini menjadi byte ke-1 atau di shift
kanan sebanyak 2 byte
Byte1 = Byte1 << 8;
//Byte1 ini menjadi byte ke-2 atau di shift
kiri sebanyak 2 byte
Byte0 = Byte0 << 24; //Byte0 ini menjadi
byte ke-3 atau di shift kiri sebanyak 6 byte
return (Byte0 + Byte1 + Byte2 + Byte3);
}
5. Tugas 5
//Praktikum NWS3103 Arsitektur
Sistem Komputer
//Modul :2
//Percobaan : 0
//Tanggal : 11 Oktober 2018
//Kelompok :
//Rombongan : 02
//Nama (NIM) 1 : Gomgom
Marbun(14S16019)
// Nama File : minBytes.h
// Deskripsi : header sebagai
penghubung fungsi (minBytes.c)
dengan main program (main.c)
#ifndef MINBYTES
#define MINBYTES
int minBytes(int x, int y);
#endif
6. Tugas 6
//Praktikum NWS3103 Arsitektur Sistem Komputer
//Modul :2
//Percobaan : 0
//Tanggal : 11 Oktober 2018
//Kelompok :
//Rombongan : 02
//Nama (NIM) 1 : Gomgom Marbun(14S16019)
// Nama File : main.c
// Deskripsi : main program untuk fungsi shift register
#include <stdio.h>
#include "shiftRegister.h"
int main (void)
{
// Deklarasi variabel
int x,n=0;//Meminta masukan input dari user
while(n<=4){
printf("Masukan input : 0x");
scanf("%x",&x); //Menampilkan hasil shift register
printf("Hasil shift register yaitu : 0x%.8x",
shiftRegister(x));
printf("\n");
n++;
}
return 0;
}
7. Tugas 7
//Praktikum NWS3103 Arsitektur Sistem Komputer
//Modul :2
//Percobaan : 0
//Tanggal : 11 Oktober 2018
//Kelompok :
//Rombongan : 02
//Nama (NIM) 1 : Gomgom Marbun(14S16019)
// Nama File : enkripsi.c
// Deskripsi : fungsi yang melakukan enkripsi sederhana yang berfungsi
menyamarkan 9 digit angka yang dimasukan menggunakan keyboard oleh user
#include<stdio.h>
#include <enkripsi.h>
int enkripsi (int angka, int desimal)
{
int byte_0, byte_1, byte_2, byte_3;
byte_0 = (angka^desimal)& 0x000000FF;
byte_1 = (((angka>>8)^desimal)<<8) & 0x0000FF00;
byte_2 = (((angka>>16)^desimal)<<16) & 0x00FF0000;
byte_3 = (((angka>>24)^desimal)<<24) & 0xFF000000;
return (byte_0+byte_1+byte_2+byte_3); // angka = angka yang akan di
enkripsi // desimal = pengenkripsi (8 bit)
#ifndef ENKRIPSI
#define ENKRIPSI
int enkripsi (int angka, int desimal);
#endif
8. Tugas 8
//Praktikum NWS3103 Arsitektur Sistem Komputer
//Modul :2
//Percobaan : 0
//Tanggal : 11 Oktober 2018
//Kelompok :
//Rombongan : 02
//Nama (NIM) 1 : Gomgom Marbun(14S16019)
// Nama File : coba.c
9. Tugas 9
#include <stdio.h>
#include <string.h>
int main()
{
char kata[100];
int i, n;;
10. Tugas 10
#include <stdio.h>
int main(){
int jM,n;
char nama[100][100];
printf("Jumlah Mahasiswa :
");
scanf("%d", &n);
for(jM=0;jM<n;jM++){
printf("Nama Mahasiswa-
%d : ",jM+1);
scanf("%s", &nama[jM]);
}
for(jM=0;jM<n;jM++){
printf("%s",nama[jM]);
printf("\n");
}
return 0;
}
11. Tugas 11
// Praktikum EL3111 Arsitektur Sistem Komputer
// Modul : 2
// Percobaan : 11
// Tanggal : 12 Oktober 2017
// Kelompok : 10
// Rombongan : 1
// Nama (NIM) 1 : Gomgom Marbun (14S16019)
// Nama File : pointer_nama.c
// Deskripsi : merupakan sebuah program yang didalamnya
terdapat pengaplikasian array of pointer to array of array of
character.
#include<stdio.h>
#define MAX 10
#define SIZE 31
int main ()
{
char *nama[MAX],input[MAX][SIZE];
int n,x,y;
printf("Masukkan nama kata per kata (maksimal 10 enter) :
\n");
for(n=0;n<MAX;n++)
{
gets(input[n]);
nama[n]=input[n];
if(!strcmp(nama[n],"exit"))
{
break;
}
}
printf("\n=======Output========\n");
for(x=0;x<n;x++)
{
printf("%s ",nama[x] );
}
return (0);
}
12. Tugas 12
// Praktikum Arsitektur Sistem Komputer (NWS3102)
// Modul :2
// Percobaan : 11
// Tanggal : 11 Oktober 2018
// Rombongan : 2
// Nama (NIM) 1 : Gomgom Marbun (14S16019)
// Nama File : mulMatriks.c
// Deskripsi : merupakan sebuah yang akan melakukan proses perkalian
antara dua inputan matriks.
#include <stdio.h>
#include <stdlib.h>
#include "mulMatriks.h"
struct Matriks
{
int jumlahBaris;
int jumlahKolom;
int** nilai;
};
struct Matriks mulMatriks (struct Matriks A, struct Matriks B)
{
int i,j,k,l;
struct Matriks x;
x.jumlahKolom = B.jumlahKolom;
x.jumlahBaris = A.jumlahBaris;
x.nilai = (int**)
calloc(x.jumlahBaris,sizeof(int*));
for (i=0;i<x.jumlahBaris;i++)
{
x.nilai[i] = (int*)
calloc(x.jumlahKolom, sizeof(int));
}
for (k=0;k<A.jumlahKolom;k++)
{
for (i=0;i<A.jumlahBaris;i++)
{
l = A.nilai[i][k];
for (j=0;j<x.jumlahKolom;j++)
{
x.nilai[i][j] +=
l*B.nilai[k][j];
}
}
}
return x;
}
13. Tugas 13
// Praktikum EL3111 Arsitektur Sistem
Komputer
// Modul : 2
// Percobaan : 12
// Tanggal : 12 Oktober 2017
// Kelompok : 10
// Rombongan : 1
// Nama (NIM) 1 : Gomgom Marbun
(14S16019)
// Nama File : main.c
// Deskripsi : merupakan sebuah file yang
didalamnya terdapat proses penjumlahan
dan pengurangan biner menggunakan
fungsi array.
#include <stdio.h>
#include <math.h>
for (i=0;i<8;i++)
{
C[i] = getBit(x,i);
D[i] = getBit(y,i);
}
for (i=0;i<8;i++)
{
result[i] =
fungsiXor(fungsiXor(C[i],D[i]),carry);carry
=((C[i]&carry)|(D[i]&carry))|(C[i]&D[i]);
}
printf("Hasil penjumlahan biner : ");
for (i=0;i<8;i++)
{
printf("%d",result[i]);
}
plus = bitDes(result);
printf("\nHasil desimal : %d",plus);
y = ~y+1;
for (i=0;i<8;i++)
{
E[i] = getBit(y,i);
}
for (i=0;i<8;i++)
{
result[i] =
fungsiXor(fungsiXor(C[i],E[i]),carry);
carry
=((C[i]&carry)|(E[i]&carry))|(C[i]&E[i]);
}
printf("\nHasil pengurangan biner: ");
for (i=0;i<8;i++)
{
printf("%d",result[i]);
}
min = bitDes(result);
printf("\nHasil desimal : %d",min);
return(0);
}
//Praktikum NWS3103 Arsitektur Sistem Komputer
//Modul :2
//Percobaan : 0
//Tanggal : 11 Oktober 2018
//Kelompok :
//Rombongan : 02
//Nama (NIM) 1 : Gomgom Marbun(14S16019)
// Nama File : main.c
//Deskrips : Program Utama
#include <stdio.h>
#include "sumofbiner.h"
int main ()
{
int des_1, des_2;
printf("Masukkan bilangan desimal pertama:");
scanf("%d",&des_1);
printf("Masukkan bilangan desimal kedua:");
scanf("%d",&des_2);
sumofbiner(des_1,des_2);
return 0;
}
#ifndef START_VAL
#define START_VAL 0
void sumofbiner (int bil1, int bil2);
#endif