Anda di halaman 1dari 21

Percobaan II

Pointer,Structure,Array,dan Operasi dalam


Level Bit
Gomgom Marbun (14S16019)
Tanggal Percobaan : 11/10/2018
NWS3103 Praktikum Arsitektur Sistem Komputer
Laboratorium Sistem Digital – Teknik Elektro
Institut Teknologi Del

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

P ada bahasa C terdapat fitur yang dapat mempermudah


pengguna dalam perancangan program diantaranya adalah
pointer,array,dan structure.Pointer merupakan variable yang
level byte, operator bitwise akan mengoperasikan data untuk
setiap bit. Sedangkan operator level byte, data akan diolah
dalam bentuk 1 byte.
berisikan alamat memori.Array adalah sekumpulan variable Berikut adalah operator dalam bitwise :
yang memiliki tipe data yang sama dan dinyatakan dalam nama
yang sama pada folder,sedangkan structure adalah suatu
struktur data yang menggabungkan beberapa data dengan
berbagai tipe data yang memiliki ukuran berbeda kemudian
dikelompokkan dalam suatu deklarasi yang saling berkaitan
Tujuan yang akan dilakukan dalam praktikum ini adalah :
1. Praktikan dapat memahami representasi informasi
dalam level bit yang disimpan pada memory.
2. Praktikan memahami penggunaan array beserta
representasi nya dalam meori. C. Structure
3. Praktikan dapat memahami penggunakan structure
Structure (struct) merupakan complex data type yang
dan reperesentasi nya pada memory.
mendefinisikan daftar variabel yang akan ditempatkan dalam
4. Praktikan memahami penggunaan fungsi pointer dan blok memory menggunakan satu nama. Dengan demikian,
representasi nya dalam memory. setiap variabel berbeda pada structuredapat diakses
5. Praktikan dapat memahami penggunaan operator menggunakan sebuah single pointer atau dengan menggunakan
bitwise pada bahasa C. nama structureitu sendiri. Pada structure, masing-masing
variabel disimpan dalam blok memory yang kontinu yang
biasanya memiliki delimiter berupa panjang word.
D. Array
Array merupakan kumpulan lokasi penyimpanan data yang
kontigu (berurutan) dengan tipe data yang sama. Setiap lokasi
penyimpanan dalam sebuah array disebut elemen array. Array
dialokasikan secara sekaligus dalam memorysesuai dengan
ukurannya. Karena letak elemen yang berurutan, akses elemen
arraypada memory relatif lebih mudah dan cepat dibandingkan
dengan struktur data Linked-List.

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.

III. HASIL DAN ANALISIS


A. Tugas I : Fungsi bitwise XOR dengan bitwise NOT dan And
Berikut table XOR : B. Tugas 2 : Membuat suatu fungsi untuk mengekstrak Byte.
X Y X^Y Fungsi ekstraksi Byte adalah fungsi ke ‘n’ byte data dapat
0 0 0 melakukan ekstraksi dari data tersebut. Proses ekstraksi ini
membutuhkan urutan/besar byte ekstraksi (Dalam kode
0 1 1 program adalah nilai ‘n’) yaitu pada Low Significant Bit
1 0 1 bernilai 0 hinggi 2 untuk nilai Most Significant Bit nya.
1 1 0 Berikut adalah code nya :

Jika table XOR diatas representasikan ke bentuk bitwise NOT


dan AND maka akan menghasilkan :
~(X&~ ~(~X& ((~(x&~y))&(~(~ ~((~(x&~y))&(~(~
Y) Y) x&y))) x&y)))
1 1 1 0
1 0 0 1
0 1 0 1
1 1 1 0 Dan hasil kompilasi nya adalah :

Dara data diatas maka kita dapat membuat codenya seperti :

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 :

Berikut adalah hasil compiler :

Berikut adalah hasil compiler :

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 :

Berikut adalah hasil compiler :


Berikut adalah hasil compiler : H. Tugas 8 : Pointer dan Assembly
Pada tugas 8 ini praktikan akan mencoba menganalisis
penggunaan memory dengan menggunakan pointer melalui file
assembly.Ada dua tipe file yang akan kita coba yaitu .s dan .c.

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.

Dapat kita lihat Tugas 6 dan 5 berhasil dengan kata lain


makefile memiliki fungsi yang sama dengan batchfle dan
lebih praktis. Analisis :
Dapat kita lihat bahwa penggunaan memory sudah
G. Tugas 7 : Program Enkripsi Sederhana berbeda.Pada tipe integer terdapat sub1,$16,%esp sedangkan
Pada program enkripsi (encrypt) sederhana yang berfungsi pada tipe data double sub1 $32,%esp.
untuk menyamarkan 9 digit yang telah menjadi inputan
menggunakan keyboard oleh pengguna. Enkripsi denagn XOR I. Tugas 9 : Fungsi Membalik Urutan Arrayy
untuk setiap 8 bit dari 32 bit input dengan sebuah angka desimal
8 bit. Pada tugas 9 ini akan dibuat suatu program yang dapat
Berikut adalah codenya : menerima karakter yang diberikan oleh user,menyimpan
karakter-karakter tersebut pada sebuah arrat of character dan
menampilkan nya di layar.
Berikut adalah codenya :

Berikut adalah hasil compiler :

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

K. Tugas 11 : Matriks Nama dengan Pointer


Pada tugas 11 ini praktikan akan membuat program
menggunakan memory lebih maksimal karna kita akan
menggunakan array statis dan panjang array dibuat sebanyak 10
kolom dan 31 maks baris.
Berikut adalah code nya :

Berikut hasil compiler :


Analisis :
Dapat kita lihat bahwa program meminta inputan baris per baris
Analisis :
dan akan melakukan perkalian dan menampilkan nya di layar.
Dapat kita lihat bahwa program akan meminta inputan 2 angka
dan akan menjumlahkan nya baik biner maupun decimal.
M. Tugas 13 : Penjumlahan Biner dengan Array
Pada tugas 13 ini akan dibuat program yang dapat melakukan
operasi penjumlahan pada level bit dengan representasi two’s IV. SIMPULAN
complement dengan array.  Suatu data maupun informasi dapat
Berikut adalah codenya : disimpandalam meory dengan tipe data yang sama.
 Operator bitwise dapat digunakan untuk
pengolahan data secara langsung.
 Pointer digunakan sebagai petunjuk suatu alamat
dengan data tertentu.Pointer juga dapat digunakan
sebagai pengubah nilai variable.
 Array adalah type data tertentu yang tersusun
secara berurutan dengan alamat yang juga
berurutan.
 Structure dapat digunakan untuk membentuk suatu
tipe data bentukan agar lebih mudah digunakan
Berikut adalah hasil compiler :
dalam program.

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;
}

//Praktikum NWS3103 Arsitektur Sistem Komputer


//Modul :2
//Percobaan : 0
//Tanggal : 13 Oktober 2018
//Kelompok :
//Rombongan : 02
//Nama (NIM) 1 : Gomgom Marbun (14S16019)
//Nama File : fungsiXOR.c
// Deskripsi : Header untuk fungsi Xor

#ifndef FUNGSIXOR
#define FUNGSIXOR
int fungsiXor (int x, int y);
#endif

//Praktikum NWS3103 Arsitektur Sistem Komputer


//Modul :2
//Percobaan : 0
//Tanggal : 13 Oktober 2018
//Kelompok :
//Rombongan : 02
//Nama (NIM) 1 : Gomgom Marbun (14S16019)
//Nama File : main.c
// Deskripsi : fungsi main Xor

// 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;
}
}

//Praktikum NWS3103 Arsitektur Sistem Komputer


//Modul :2
//Percobaan : 0
//Tanggal : 11 Oktober 2018
//Kelompok :
//Rombongan : 02
//Nama (NIM) 1 : Gomgom Marbun(14S16019)
//Nama File : getByte.h
// Deskripsi : header sebagai penghubung fungsi
(getByte.c) dengan main program (main.c)
#ifndef GETBYTE
#define GETBYTE
int getByte(int x,int n);
#endif

//Praktikum NWS3103 Arsitektur Sistem Komputer


//Modul :2
//Percobaan : 0
//Tanggal : 11 Oktober 2018
//Kelompok :
//Rombongan : 02
//Nama (NIM) 1 : Gomgom Marbun(14S16019)
//Nama File : getByte.h
// Deskripsi : main program (main.c)

#include <stdio.h> #include "getByte.h"


int main(void)
{
int x,result,n;
printf("Masukan data yang akan di ekstraksi :
0x");
scanf ("%x",&x);
printf("Ekstraksi dilakukan pada data ke-: ");
scanf("%d",&n);
printf("Hasil ekstraksi data : 0x%x", getByte(x,n));
return 0;
}

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.

#include <stdio.h> #include "bitMask.h"


int bitMask (int highbit, int lowbit)
{
int range = highbit-lowbit;
//Banyak bit yang akan di mask sesuai
dengan range+1(maks adalah 32)
unsigned masking;
if (range<1)
return 0; // masking dilakukan
untuk seluruh bit
else {
masking = (1<<31)>>range;
//dilakukan pengeseran suatu bilangan
dengan bit ke 31-(31-range) bernilai 1
return masking>>(31-highbit);
}
}

//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.h
// Deskripsi : header sebagai penghubung
fungsi (bitMask.c) dengan main program
(main.c)

#ifndef BITMASK
#define BITMASK
int bitMask(int highbit,int lowbit);
#endif

//Praktikum NWS3103 Arsitektur Sistem


Komputer
//Modul :2
//Percobaan : 0
//Tanggal : 11 Oktober 2018
//Kelompok :
//Rombongan : 02
//Nama (NIM) 1 : Gomgom Marbun (14S16019)
// Deskripsi : main program untuk masking bit

#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;
}

//Praktikum NWS3103 Arsitektur Sistem


Komputer
//Modul :2
//Percobaan : 0
//Tanggal : 11 Oktober 2018
//Kelompok :
//Rombongan : 02
//Nama (NIM) 1 : Gomgom Marbun(14S16019)
// Deskripsi : fungsi yang dapat membalik
urutan byte dari suatu data X dengan menukar
byte ke-0 dengan byte ke-3 dan byte ke-2
dengan byte ke-1. Urutan byte pada data
berurutan dari byte ke-0 pada LSB dan byte ke-
3 pada MSB.

#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);
}

//Praktikum NWS3103 Arsitektur Sistem


Komputer
//Modul :2
//Percobaan : 0
//Tanggal : 11 Oktober 2018
//Kelompok :
//Rombongan : 02
//Nama (NIM) 1 : Gomgom Marbun(14S16019)
// Nama File : reverseBytes.h
// Deskripsi : header sebagai penghubung
fungsi (reverseBytes.c) dengan main program
(main.c)
#ifndef REVERSEBYTE
#define REVERSEBYTE
int reverseBytes(int x);
#endif

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;
}

//Praktikum NWS3103 Arsitektur Sistem Komputer


//Modul :2
//Percobaan : 0
//Tanggal : 11 Oktober 2018
//Kelompok :
//Rombongan : 02
//Nama (NIM) 1 : Gomgom Marbun(14S16019)
// Nama File : shiftRegister.c
// Deskripsi : fungsi yang merepresentasikan sebuah
shift register pada rangkaian sistem digital. // Asumsi
yang digunakan yaitu jumlah bit sebanyak 32 bit dan
setiap nilai dimasukan ke dalam shift register secara
bergantian adalah 5 bit
#include<stdio.h>
#include "shiftRegister.h"
int global_var = 0;
int shiftRegister (int x)
{
global_var = (global_var << 8) | x;
return global_var;
}

//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
(shiftRegister.c) dengan main program (main.c)
#ifndef SHIFTREGISTER
#define SHIFTREGISTER
int shiftRegister(int x);
#endif

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)

//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.h

#ifndef ENKRIPSI
#define ENKRIPSI
int enkripsi (int angka, int desimal);
#endif

//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_enkripsi.c
// Deskripsi : main program enkripsi
#include <stdio.h>
#include "enkripsi.h"
int main()
{
// deklarasi variabel
int desimal, bilangan_pengenkripsi;
//Meminta input masukan dari user
printf("Masukan bilangan desimal yang akan di enkripsi (9 digit) : ");
scanf("%d", &desimal);
printf("Masukan bilangan desimal untuk input enkripsi : ");
scanf("%d", &bilangan_pengenkripsi);
bilangan_pengenkripsi = bilangan_pengenkripsi & 0x000000FF;
// untuk memastikan bilangan desimal untuk input enkripsi sebanyak
maksimum 8 bit, jika lebih maka akan dipotong
// Menampilkan hasil proses enkripsi
printf("\n Hasil proses enkripsi :
%d\n",enkripsi(desimal,bilangan_pengenkripsi));
return 0;
}

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

void coba(int* x, int* y, int* z)


{
// Kamus
int a;
int b;
int c;
int d;
// Algoritma
a = *x;
b = *y;
c = *z;
d = a+b;
*y = d;
*z = b;
*x = c;
}

int main (void)


{
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 : coba1.c

void coba1(int* x, int* y, int* z)


{
// Kamus
double a;
double b;
double c;
double d;
// Algoritma
a = *x;
b = *y;
c = *z;
d = a+b;
*y = d;
*z = b;
*x = c;
}

int main (void)


{
return(0);
}

9. Tugas 9
#include <stdio.h>
#include <string.h>

int main()
{
char kata[100];
int i, n;;

printf("Masukkan input kata \n");


gets(kata);//mengambil sebuah kata inputan
n=strlen(kata);
printf("Karakter yang sudah dibalik urutannya : \n");
for (i=n-1;i>=0;i--)
{
printf("%c",kata[i]);
}

printf ("\nPanjang kata = %d",n);


return 0;
}

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>

int fungsiXor (int x, int y)


{
int result;
result = ~((~(~x&y))&(~(x&~y)));
return result;#ifndef START_VAL
#define START_VAL 0
void sumofbiner (int bil1, int bil2);
#endif

int getBit (int x, int n)


{
return ((x>>n)&1);
}

int bitDes (int *A)


{
int i;
int value = 0;
for (i=0;i<=6;i++)
{
value += A[i]*pow(2,i);
}
value -= A[7]*pow(2,7);
return value;
}

int main (void)


{
int x,y,i,temp,hasil,plus, min;
int C[8],D[8],E[8],result[8];
int carry = 0;
printf("Masukan bilangan pertama :\n");
scanf("%d",&x);
printf("Masukan bilangan kedua :\n");
scanf("%d",&y);

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;
}

//Praktikum NWS3103 Arsitektur Sistem Komputer


//Modul :2
//Percobaan : 0
//Tanggal : 11 Oktober 2018
//Kelompok :
//Rombongan : 02
//Nama (NIM) 1 : Gomgom Marbun(14S16019)

#ifndef START_VAL
#define START_VAL 0
void sumofbiner (int bil1, int bil2);
#endif

Anda mungkin juga menyukai