I. PENDAHULUAN
E. Pointer
Tampak tampilan tugas 1
Pointer merupakan variabel yang menyimpan alamat memory.
Dengan kata lain, pointer memiliki nilai Perlu kita ketahui bahwa XOR memiliki aturan bahwa jika
alamat memory untuk melakukan referensi terhadap suatu kedua pernyataan 0 maka hasil nya 0 dan jika salah satu nya
objek yang tersimpan dalam memory ada nilai nol dan satu maka hasil nya 1. dan juga jika sama
komputer. Dengan menggunakan pointer, kita dapat memiliki sama 1 maka hasilnya nol. Hal ini tampak pada kedua integer
akses terhadap memory secara langsung. digambar.Bahwa 4 terdiri dari 100 sedangkan 5 adalah 101
Untuk setiap tipe data T, terdapat pointer ke T. Deklarasi jika di gabungkan dengan tabel akan menghasilkan 001 yang
pointer dalam bahasa C dapat dilakukan dengan berarti 2 pangkat 0 atau dengan kata lain adalah 1.
mudah, contohnya int *ptr yang merupakan pointer yang
melakukan referensi terhadap objek bertipe
B.Tugas 2:Fungsi Ekstraksi Byte
integer.
Pada tugas 2 ini kita melakukan ektraksi sebanyak ke-n
Pointer juga dapat digunakan untuk menunjukkan structure
berdasarkan alamatnya di memory. Hal ini dari data X. Sehingga di jalankan sebagai berikut:
sangat berguna untuk melakukan passing structure ke atau
dari sebuah fungsi hanya dengan memberikan alamat structure
tersebut di memory. Pointer ini juga dapat di-dereferensi
seperti halnya pointer lain dalam
bahasa C, yaitu menggunakan operator dereference (*). Selain
itu, juga terdapat operator yang sangat
berguna yaitu struct_name -> member untuk melakukan
dereferensi pointer-to-struct lalu mengakses
nilai dari anggota structure tersebut. Operator tersebut
memiliki ekuivalensi dengan
(*struct_name).member. Sebetulnya, sebuah fungsi dapat
langsung mengembalikan sebuah structure
walaupun hal ini terkadang tidak efisien saat dijalankan. Tampak tampilan tugas 2
Dalam array, indeks biasanya didefinisikan sebagai
perhitungan matematika terhadap alamat pointer. Perlu kita ketahui bahwa pada urutan ke-0 data akan
Dengan demikian penulisan array[i] memiliki ekuivalensi menampilkan nomor paling kiri, dan dilanjutkan terus
dengan *(array + i). Perhitungan menerus hingga urutan ke-3 tetapi pada urutan ke-4 nilai yang
matematika terhadap pointer untuk mengakses setiap elemen ditampilkan adalan nila n itu sendiri . Ini terjadi akibat dari
array dapat dilakukan karena array logical right shift yang mengisi nilai 0 sedangkan Arithmetic
memiliki elemen yang tersusun secara kontigu (berurutan Right Shift yang mengisi bit MSB sesuai variabel menurut two
tanpa jeda). complements.
III.HASIL DAN ANALISIS C.Tugas 3: Fungsi Masking Byte
A. Tugas I : Fungsi XOR Ditampilkan hasil dari cmd dari tugas 3 adalah sebagai
Seperti yang kita ketahui kalau nilai algoritma XOR itu berikut:
adalah sebagai berikut:
= ~( ~ ~& & ~ &~ )
Dan jika dibuat dalam bentuk tabel akan dihasilkan :
Perlu dikertahui bahwa ketika dimasukkan byte data pertam H.Tugas 8: Pointer dalam Assembly
a kemudian diminta byte data kedua maka melalui sistem two
complement, hasil pengeluaran yakni hasil pengurangan akan Pada Tugas 8 akan ditampilkan hasil sebagai berikut:
muncul misalkan 0x15 dikurangi dengan 0x07 hasilnya adalah
0x0e.
Perlu kita ketahui bahwa ketika kita input kata demi kata
maka kata tersebut akan tergabung menjadi sebuah nama. ini
terjadi akibat fungsi dari [n] dimana n merupakan banyak
Tampak tampilan tugas 9 memori untuk menampung kata.
Disini dari segi konsep hampir sama dengan tugas L.Tugas 12:Perkalian Matriks
sebelumnya hanya saja disini dilakukan looping sama seperti
program bubblestack. yang mana pada karakter ke 1 akan Pada tugas ini program akan melakukan perkalian dua
berpindah terus menerus dari karakter 2 hingga sampai ke matriks. Program ini juga menggunakan mulMatriks sebagai
karakter ke 5 hingga seterusnya. deklarasi nya. Berikut hasilnya:
REFERENSI
Basic format for books:
[1] Electrical Engineering IT Del, 2017, Modul Praktikum Arsitektur
Sistem Komputer,Laguboti.
[2] https://id.wikipedia.org/wiki/offset_address
[3] https://id.wikipedia.org/wiki/pointer
[4] https://id.wikipedia.org/wiki/array
Lampiran
1. Source code untuk tugas I
fungsi Xor.c
// Praktikum NWS3102 Arsitektur Sistem Komputer
// Modul : 2
// Percobaan : NA
// Tanggal : 13 Oktober 2017
// Kelompok : 3
// Janasde(14s15036) 1 : Praktikan 1
// Rory (14s15022) 2 : Praktikan 2
// Febrian (14s15006) :Praktikan 3
// Nama File : fungsiXor.c
// Deskripsi : sebuah fungsi yang memiliki perilaku yang sama dengan operator XOR
#include <stdio.h>
fungsi Xor.h
// Praktikum NWS3102 Arsitektur Sistem Komputer
// Modul : 2
// Percobaan : NA
// Tanggal : 13 Oktober 2017
// Kelompok : 3
// Janasde(14s15036) 1 : Praktikan 1
// Rory (14s15022) 2 : Praktikan 2
// Febrian (14s15006) :Praktikan 3
// Nama File : fungsiXor.h
// Deskripsi : header fungsi XOR
#ifndef FUNGSIXOR
#define FUNGSIXOR
int fungsiXor (int x, int y);
#endif
main.c
// Praktikum NWS3102 Arsitektur Sistem Komputer
// Modul : 2
// Percobaan : NA
// Tanggal : 13 Oktober 2017
// Kelompok : 3
// Janasde(14s15036) 1 : Praktikan 1
// Rory (14s15022) 2 : Praktikan 2
// Febrian (14s15006) :Praktikan 3
// Nama File : fungsiXor.h
// Deskripsi : main program fungsi XOR
#include<stdio.h>
#include "fungsiXor.h"
return 0;
}
getByte.c
#include<stdio.h>
#include "getByte.h"
getByte.h
// Praktikum NWS3102 Arsitektur Sistem Komputer
// Modul : 2
// Percobaan : NA
// Tanggal : 13 Oktober 2017
// Kelompok : 3
// Janasde(14s15036) 1 : Praktikan 1
// Rory (14s15022) 2 : Praktikan 2
// Febrian (14s15006) :Praktikan 3
// Nama File : getByte.c
// Deskripsi : Fungsi yang dapat melakukan ekstraksi byte ke-n dari suatu data X yang
memiliki
#ifndef GETBYTE
#define GETBYTE
int getByte(int x,int n);
#endif
main.c
// Praktikum NWS3102 Arsitektur Sistem Komputer
// Modul : 2
// Percobaan : NA
// Tanggal : 13 Oktober 2017
// Kelompok : 3
// Janasde(14s15036) 1 : Praktikan 1
// Rory (14s15022) 2 : Praktikan 2
// Febrian (14s15006) :Praktikan 3
// Nama File : getByte.c
// Deskripsi : Fungsi yang dapat melakukan ekstraksi byte ke-n dari suatu data X yang
memiliki
#include <stdio.h>
#include "getByte.h"
int main(void)
{
int x;
int result;
int 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;
}
bitMask.c
// Praktikum NWS3102 Arsitektur Sistem Komputer
// Modul : 2
// Percobaan : NA
// Tanggal : 13 Oktober 2017
// Kelompok : 3
// Janasde(14s15036) 1 : Praktikan 1
// Rory (14s15022) 2 : Praktikan 2
// Febrian (14s15006) :Praktikan 3
// 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.
#include <stdio.h>
#include "bitMask.h"
return masking>>(31-highbit);
}
}
bitMask.h
// Praktikum NWS3102 Arsitektur Sistem Komputer
// Modul : 2
// Percobaan : NA
// Tanggal : 13 Oktober 2017
// Kelompok : 3
// Janasde(14s15036) 1 : Praktikan 1
// Rory (14s15022) 2 : Praktikan 2
// Febrian (14s15006) :Praktikan 3
// Nama File : bitMask.h
// Deskripsi : main program untuk melakukan pengurangan byte
#ifndef BITMASK
#define BITMASKint bitMask(int highbit,int lowbit);
#endif
main.c
// Praktikum NWS3102 Arsitektur Sistem Komputer
// Modul : 2
// Percobaan : NA
// Tanggal : 13 Oktober 2017
// Kelompok : 3
// Janasde(14s15036) 1 : Praktikan 1
// Rory (14s15022) 2 : Praktikan 2
// Febrian (14s15006) :Praktikan 3
// Nama File : bitMask.h
// Deskripsi : main program untuk melakukan pengurangan byte
#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);
return 0;
}
#include <stdio.h>
#include "reverseBytes.h"
reverseBytes.h
// Praktikum NWS3102 Arsitektur Sistem Komputer
// Modul : 2
// Percobaan : NA
// Tanggal : 13 Oktober 2017
// Kelompok : 3
// Janasde(14s15036) 1 : Praktikan 1
// Rory (14s15022) 2 : Praktikan 2
// Febrian (14s15006) :Praktikan 3
// Nama File : reverseBytes.h
// Deskripsi : header sebagai penghubung fungsi (reverseBytes.c) dengan main program
(main.c)
#ifndef REVERSEBYTES
#define REVERSEBYTES
int reverseBytes(int x) ;
#endif
main.c
// Praktikum NWS3102 Arsitektur Sistem Komputer
// Modul : 2
// Percobaan : NA
// Tanggal : 13 Oktober 2017
// Kelompok : 3
// Janasde(14s15036) 1 : Praktikan 1
// Rory (14s15022) 2 : Praktikan 2
// Febrian (14s15006) :Praktikan 3
// Nama File : main.c
// Deskripsi : main program untuk melakukan reverse bytes
#include <stdio.h>
#include "reverseBytes.h"
int main(void)
{
int x;
return 0;
}
minBytes.c
// Praktikum EL3111 Arsitektur Sistem Komputer
// Modul : NA
// Percobaan : NA
// Tanggal : 10 Oktober 2016
// Kelompok : NA
// Nama (NIM) 1 : Praktikan 1
// Nama (NIM) 2 : Praktikan 2
// Nama File : minBytes.c
// Deskripsi : fungsi yang dapat menghitung hasil pengurangan antara
// byte data pertama dikurangi dengan byte data kedua.
#include <stdio.h>
#include "minBytes.h"
main.c
// Praktikum EL3111 Arsitektur Sistem Komputer
// Modul : NA
// Percobaan : NA
// Tanggal : 10 Oktober 2016
// Kelompok : NA
// Nama (NIM) 1 : Praktikan 1
// Nama (NIM) 2 : Praktikan 2
// Nama File : main.c
// Deskripsi : main program untuk melakukan pengurangan byte
#include <stdio.h>
#include "minBytes.h"
int main ()
{
int a,b;
printf("Masukkan nilai byte pertama (a) : ");
scanf("%d", &a);
printf("Representasi a dalam heksadesimal : 0x%08X\n", a);
printf("Masukkan nilai byte kedua (b) : ");
scanf("%d", &b);
printf("Representasi b dalam heksadesimal : 0x%08X\n", b);
printf("Maka nilai a-b adalah : %d", minBytes(a,b));
minBytes(a,b));
printf("\nRepresentasi a-b dalam heksadesimal : 0x%08X\n", minBytes(a,b));
return 0;
}
shiftRegister.c
// Praktikum NWS3102 Arsitektur Sistem Komputer
// Modul : 2
// Percobaan : NA
// Tanggal : 13 Oktober 2017
// Kelompok : 3
// Janasde(14s15036) 1 : Praktikan 1
// Rory (14s15022) 2 : Praktikan 2
// Febrian (14s15006) :Praktikan 3
// Nama File : shiftRegister.c
// Deskripsi : fungsi yang merepresentasiakan rangkaian sistem digital.
#include<stdio.h>
#include "shiftRegister.h"
int global_var = 0;
shiftRegister.h
// Praktikum NWS3102 Arsitektur Sistem Komputer
// Modul : 2
// Percobaan : NA
// Tanggal : 13 Oktober 2017
// Kelompok : 3
// Janasde(14s15036) 1 : Praktikan 1
// Rory (14s15022) 2 : Praktikan 2
// Febrian (14s15006) :Praktikan 3
// Nama File : shiftRegister.h
// Deskripsi : header sebagai penghubung fungsi.
#ifndef SHIFTREGISTER
#define SHIFTREGISTER
int shiftRegister(int x);
#endif
main.c
// Praktikum NWS3102 Arsitektur Sistem Komputer
// Modul : 2
// Percobaan : NA
// Tanggal : 13 Oktober 2017
// Kelompok : 3
// Janasde(14s15036) 1 : Praktikan 1
// Rory (14s15022) 2 : Praktikan 2
// Febrian (14s15006) :Praktikan 3
// Nama File : main.c
// Deskripsi : main program untuk fungsi shift register
#include <stdio.h>
#include "shiftRegister.h"
return 0;
}
enkripsi.c
// Praktikum NWS3102 Arsitektur Sistem Komputer
// Modul : 2
// Percobaan : NA
// Tanggal : 13 Oktober 2017
// Kelompok : 3
// Janasde(14s15036) 1 : Praktikan 1
// Rory (14s15022) 2 : Praktikan 2
// Febrian (14s15006) :Praktikan 3
// Nama File : enkripsi.c
// Deskripsi : Fungsi yang merupakan tempat terjadinya proses penyamaran pengkodean
yang dilakukan pada sebuah data.
#include <stdio.h>
#include "enkripsi.h"
return
(byte_0+byte_1+byte_2+byte_3);
}
enkripsi.h
// Praktikum NWS3102 Arsitektur Sistem Komputer
// Modul : 2
// Percobaan : NA
// Tanggal : 13 Oktober 2017
// Kelompok : 3
// Janasde(14s15036) 1 : Praktikan 1
// Rory (14s15022) 2 : Praktikan 2
// Febrian (14s15006) :Praktikan 3
// Nama File : shiftRegister.h
// Deskripsi : Fungsi yang menghubungkan fungsi main_enkripsi.c dengan fungsi proses
pengkodean data (enkripsi.c).
#ifndef ENKRIPSI
#define ENKRIPSI
int enkripsi (int angka, int desimal);
#endif
main_enkripsi.c
// Praktikum NWS3102 Arsitektur Sistem Komputer
// Modul : 2
// Percobaan : NA
// Tanggal : 13 Oktober 2017
// Kelompok : 3
// Janasde(14s15036) 1 : Praktikan 1
// Rory (14s15022) 2 : Praktikan 2
// Febrian (14s15006) :Praktikan 3
// Nama File : main_enkripsi.c
// Deskripsi : fungsi yang didalamnya terjadi pemanggilan fungsi program main
enkripsi.c .
#include <stdio.h>
#include "enkripsi.h"
int main ()
{
int desimal, bilangan_pengenkripsi;
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;
printf("\n Hasil proses enkripsi : %d\n",enkripsi(desimal,bilangan_pengenkripsi));
return 0;
}
a = *x;
b = *y;
c = *z;
d = a+b;
*y = d;
*z = b;
*x = c;
# include <stdio.h>
int main ()
{
char teks[100];
int i, length;
return(0);
Arraynama.c
// Praktikum NWS3102 Arsitektur Sistem Komputer
// Modul : 2
// Percobaan : NA
// Tanggal : 13 Oktober 2017
// Kelompok : 3
// Janasde(14s15036) 1 : Praktikan 1
// Rory (14s15022) 2 : Praktikan 2
// Febrian (14s15006) :Praktikan 3
// Nama File : Arrsynama.c
// Deskripsi : program yang didalamnya terdapat proses penyimpanan karakter ke dalam
sebuah array yang dimasukkan karakter per karakter.
#include <stdio.h>
int main (void)
{
char nama[5][100];
int x,y,i,j;
char inp,junk,out;
printf("\n");
for (i=0;i<y;i++)
{
out = nama[1][i];
printf("%c",out);
}
return(0);
}
\
11.Screeenshot hasil tugas 11
pointer_nama.c
// Praktikum NWS3102 Arsitektur Sistem Komputer
// Modul : 2
// Percobaan : NA
// Tanggal : 13 Oktober 2017
// Kelompok : 3
// Janasde(14s15036) 1 : Praktikan 1
// Rory (14s15022) 2 : Praktikan 2
// Febrian (14s15006) :Praktikan 3
// 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);
}
#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;
}
mulMatriks.h
// Praktikum NWS3102 Arsitektur Sistem Komputer
// Modul : 2
// Percobaan : NA
// Tanggal : 13 Oktober 2017
// Kelompok : 3
// Janasde(14s15036) 1 : Praktikan 1
// Rory (14s15022) 2 : Praktikan 2
// Febrian (14s15006) :Praktikan 3
// Nama File : mulMatriks.h
// Deskripsi : merupakan sebuah fungsi yang didalamnya merupakan penghubung antara
fungsi mulmatriks.c dengan main.c.
#ifndef MULMATRIKS
#define MULMATRIKS
extern struct Matriks mulMatriks
(struct Matriks A, struct Matriks B);
#endif
main.c
// Praktikum NWS3102 Arsitektur Sistem Komputer
// Modul : 2
// Percobaan : NA
// Tanggal : 13 Oktober 2017
// Kelompok : 3
// Janasde(14s15036) 1 : Praktikan 1
// Rory (14s15022) 2 : Praktikan 2
// Febrian (14s15006) :Praktikan 3
// Nama File : main.c
// Deskripsi : main program untuk perkalian matrix
#include<stdio.h>
#include<stdlib.h>
#include"multmatrix.h"
struct Matrix
{
int jumlahbaris;
int jumlahkolom;
int** nilai;
};
int main(void)
{
struct Matrix A,B,C;
int i,j;
printf("Masukkan jumlah baris matrix A: ");
scanf("%d", &A.jumlahbaris);
printf("Masukkan jumlah kolom matrix A: ");
scanf("%d", &A.jumlahkolom);
A.nilai = malloc(A.jumlahbaris*sizeof(int*));
for(i=0;i<=A.jumlahbaris;i++)
{
A.nilai[i]= malloc(A.jumlahkolom*sizeof(int));
}
for(i=0;i<=A.jumlahbaris-1;i++)
{
for(j=0;j<=A.jumlahkolom-1;j++)
{
printf("Masukkan elemen ke %d, %d: ", i+1,j+1);
scanf("%d", &A.nilai[i][j]);
}
}
printf("Masukkan jumlah baris matrix B: ");
scanf("%d", &B.jumlahbaris);
printf("Masukkan jumlah kolom matrix B: ");
scanf("%d", &B.jumlahkolom);
B.nilai = malloc(A.jumlahbaris*sizeof(int*));
for(i=0;i<=B.jumlahbaris;i++)
{
B.nilai[i]= malloc(B.jumlahkolom*sizeof(int));
}
for(i=0;i<=B.jumlahbaris-1;i++)
{
for(j=0;j<=B.jumlahkolom-1;j++)
{
printf("Masukkan elemen ke %d, %d: ", i+1,j+1);
scanf("%d", &B.nilai[i][j]);
}
}
if(A.jumlahkolom = B.jumlahbaris)
{
C = multmatrix(A,B);
printf("\nHasil perkalian dua buah matrix:\n");
for(i=0;i<=A.jumlahbaris-1;i++)
{
for(j=0;j<=C.jumlahkolom-1;j++)
{
printf("%d ", C.nilai[i][j]);
}
printf("\n");
}
}
else
{
printf("Tidak memenuhi syarat perkalian matrix!");
}
return 0;
}
13. Screenshot hasil tugas 13
// Praktikum NWS3102 Arsitektur Sistem Komputer
// Modul : 2
// Percobaan : NA
// Tanggal : 13 Oktober 2017
// Kelompok : 3
// Janasde(14s15036) 1 : Praktikan 1
// Rory (14s15022) 2 : Praktikan 2
// Febrian (14s15006) :Praktikan 3
// 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>
return value;
}
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);
}