Anda di halaman 1dari 28

Percobaan II

Pointer, Structure, Array dan Operasi dalam


Level Bit
Kevin Manatar Oloan Situmorang (13212029)
Asisten : Michael (13211028)
Tanggal Percobaan : 20/10/2014
EL3111 Praktikum Arsitektur Sistem Komputer
Laboratorium Sinyal dan Sistem Sekolah Teknik Elektro dan Informatika
Institut Teknologi Bandung

Abstrak Pada praktikum ini, praktikan akan memahami


tentang representasi informasi dalam level bit yang disimpan di
dalam memory. Kemudian praktikan juga akan menggunakan
operator bitwise, menggunakan fungsi pointer, array, dan
structure dalam melakukan pengolahan informasi.
Kata Kunci Memory, pointer, array, data structure

I. PENDAHULUAN

ARRAY, DAN OPERASI DALAM LEVEL


BIT adalah hal yang sangat mendasari proses pengolahan
informasi yang tersimpan dalam memory. Pada praktikum ini,
akan dipahami setiap aplikasi dari masing-masing fungsi
tersebut.
Adapun beberapa tujuan yang hendak dicapai adalah sebagai
berikut.
1. Praktikan memahami representasi informasi dalam level
bit yang disimpan pada memory.
2. Praktikan mampu menggunakan operator-operator bitwise
dalam bahasa C untuk mengolah informasi yang tersimpan
dalam memory.
3.

4.

OINTER, STRUCTURE,

Praktikan memahami fungsi pointer dan mampu


menggunakan pointer untuk melakukan pengolahan data di
dalam memory.

II. LANDASAN TEORETIS


A. Tipe Data
Tipe data merupakan representasi data yang disimpan dalam
memory. Tipe data menentukan operasi yang dapat dilakukan
pada suatu data bertipe tertentu, rentang nilai yang mungkin
dimiliki oleh data bertipe tertentu, arti dari data, dan cara
menyimpan data tersebut dalam memory. Terdapat beberapa
tipe data yang telah tersedia dalam bahasa C. Tipe data yang
tersedia ini disebut simple data type. Masing-masing tipe data
memiliki ukuran yang berbeda-beda untuk disimpan di dalam
memory.
Berikut dipaparkan beberapa tipe data serta penjelasannya:
Type

smallest addressable unit of the machine


that can contain basic character set. It is
char

an integer type. Actual type can be either


signed or unsigned depending on the
implementation.

Praktikan memahami arraybeserta representasinya dalam


memory dan pengolahan informasinya dalam bahasa C.

5.

Praktikan memahami structure beserta representasinya


dalam memory dan pengolahannya dalam bahasa C.
Kemudian untuk dapat melakukan praktikum ini, dibutuhkan
beberapa perangkat praktikum sebagai berikut.
1. Komputer Desktop / Laptop dengan sistem operasi
Microsoft Windows7/8/8.1
2. CompilerGCC dalam paket program CodeBlocks untuk
melakukan kompilasi program.
3.

Explanation

Notepad++ sebagai teks editor.

same size as char , but guaranteed to be


signed char

signed.

same size as char , but guaranteed to be


unsigned char

unsigned.

unsigned long lo
short
short int
signed short
signed short int

short signed integer type. At least in the

ng int

[32767,+32767] range, thus at least 16


bits in size.
single precision floating-point type.
Actual properties unspecified (except
minimum limits), however on most

unsigned short
unsigned short in

same as short , but unsigned.

float

systems this is the IEEE 754 singleprecision binary floating-point format.


This format is required by the optional
Annex F "IEC 60559 floating-point

int
signed int

arithmetic".

basic signed integer type. At least in the


[32767,+32767] range, thus at least 16
bits in size.

double precision floating-point type.


Actual properties unspecified (except

unsigned

minimum limits), however on most


same as int , but unsigned.

unsigned int

double

systems this is the IEEE 754 doubleprecision binary floating-point format.


This format is required by the optional

long
long int
signed long
signed long int

Annex F "IEC 60559 floating-point


long signed integer type. At least in the

arithmetic".

[2147483647,+2147483647] range, thus


at least 32 bits in size.
extended precision floating-point type.
Actual properties unspecified. Unlike

unsigned long

types float and double, it can be


same as long , but unsigned.

either 80-bit floating point format, the

unsigned long int


long double

non-IEEE "double-double" or IEEE 754


quadruple-precision floating-point

long long
long long int
signed long long
signed long long i
nt

long long signed integer type. At least in

format if a higher precision format is

the

provided, otherwise it is the same

[9223372036854775807,+9223372036

as double.

854775807] range, thus at least 64 bits in


size. Specified since the C99 version of
the standard.

same as long long , but unsigned.


unsigned long lo

Specified since the C99 version of the

ng

standard.

Tabel II. A. 1 Beberapa tipe data dan penjelasannya [1]


Untuk melihat besar tipe data dari setiap tipe data, dapat
digunakan source code yang tertera pada modul. Kemudian
diperoleh hasil sebagai berikut.

Khusus untuk operator Right Shift, terdapat dua jenis


operator Right Shift, yaitu Logical Right Shift dan Arithmetic
Right Shift. Logical Right Shift akan mengisi bit MSB dengan
nilai 0 sementara Arithmetic Right Shift akan mengisi bit MSB
sesuai dengan tanda (sign) variabel tersebut menurut aturan
twos complement. Untuk Left Shift, tidak ada perbedaan antara
Logical Left Shift dan Arithmetic Left Shift. Pada umumnya,
seluruh mesin dapat mendukung dua jenis operator Right Shift
dan Left Shift ini.

Gambar II. A. 1 Hasil Eksekusi sizeof.c (Source code tertera


pada modul)
Dengan adanya perbedaan ukuran masing-masing tipe data,
diperlukan sebuah mekanisme alignment pada memory agar
setiap data tersusun dengan baik di dalam memory dan dapat
diproses oleh mikroprosesor. Dengan alignment, data-data
variabel disimpan dalam lokasi memory yang memiliki address
offset yang berupa kelipatan dari ukuran word. Hal ini akan
menambah performance karena data disusun sesuai cara
mikroprosesor menggunakan memory.

Gambar II. B. 1. Skema Left Logical Shift [3]

B. Operator Bitwise dalam Bahasa C


Bahasa C mendukung pengolahan informasi dalam level bit
menggunakan operator bitwise. Berbeda dengan operator level
byte, operator bitwise akan mengoperasikan data untuk setiap
bit. Sedangkan operator level byte, data akan diolah dalam
bentuk 1 byte (1 byte = 8 bit). Operator bitwise dapat digunakan
pada berbagai tipe data seperti char, int, short, long, atau
unsigned.
Operator-operator bitwisedalam bahasa C didefinisikan
sebagai berikut.

Gambar II. B. 2. Skema Right Logical Shift [3]

Gambar II. B. 3. Skema Left Arithmetic Shift [3]

Bahasa C juga memiliki operator logika AND, inclusive OR,


dan NOT. Operator ini sering tertukar dengan operator bitwise.
Operator logika tersebut diberikan sebagai berikut. Pada
operasi logika, setiap argumen bukan nol merepresentasikan
TRUE, sedangkan argumen nolmerepresentasikan FALSE.
Ekspresi logika akan mengembalikan nilai 1 untuk TRUE dan
nilai 0 untuk FALSE.

Gambar II. B. 4. Skema Right Arithmetic Shift [3]

C. Structure
Structure (struct) merupakan complex data type yang
mendefinisikan daftar variabel yang akan ditempatkan dalam
blok memory menggunakan satu nama. Dengan demikian,
setiap variabel berbeda pada structuredapat diakses
menggunakan sebuah single pointer atau dengan menggunakan
nama structureitu sendiri. Pada structure, masing-masing
variabel disimpan dalam blok memory yang kontigu yang
biasanya memiliki delimiter berupa panjang word. Kita juga
dapat menggunakan sintaks sizeof untuk memeriksa ukuran
structureyang kita definisikan. Perlu diingat bahwa bahasa C
tidak mengizinkan kita melakukan deklarasi rekursif terhadap
structure (sebuah structure tidak boleh berisi structure bertipe
yang sama dengan structure tersebut). Kita dapat menggunakan
pointer untuk melakukannya. Beberapa mesin juga
membutuhkan alignment data pada memory secara spesifik
sehingga ukuran structure dapat berbeda karena compiler
secara otomatis melakukan alignment data-data pada structure,
contohnya dengan padding.
Untuk mengatur alignment data, perlu dimasukkan beberapa
bytes (yang sebenarnya tidak digunakan) di antara akhir dari
data structure terakhir dan awal dari data structure selanjutnya.
Hal ini yang disebut dengan data structure padding. [2]
Berikut dijelaskan bagaimana cara menghitung jumlah bytes
dari padding :

bertipe integer namun dengan banyak elemen yang belum


didefinisikan. Untuk melakukan alokasi terhadap array
pusheen, kita dapat menggunakan perintah malloc atau calloc
dalam bahasa C. Untuk mengubah ukuran array dinamis yang
telah dialokasikan, kita dapat menggunakan perintah realloc.
Untuk melakukan dealokasi array dinamis, kita dapat
menggunakan perintah free. Perhatikan bahwa pada beberapa
kasus, perintah realloc dapat menyebabkan program tidak
efisien contohnya saat array diubah ukurannya menjadi lebih
besar dan sistem harus melakukan pemindahan elemen-elemen
array ke posisi memory yang baru agar perbesaran ukuran array
dapat dilakukan.
Array juga dapat memiliki elemen array berupa array. Dengan
demikian, kita dapat mendefinisikan array n-dimensi.
Contohnya, sebuah matriks merupakan array dengan dua
dimensi. Array tersebut memiliki elemen array berupa array,
contohnya int pusheen[][5] atau int pusheen[4][5]. Namun,
karena memory komputer bersifat linear, komputer akan
menyimpan array n-dimensi dalam bentuk linear juga. Hal ini
menyebabkan kita harus memperhatikan urutan indeks untuk
mengakses setiap elemen array n-dimensi karena hal ini akan
berpengaruh terhadap performance dari program yang kita buat
terlebih data array yang diolah cukup besar, contohnya seberapa
baikkah program yang kita buat dalam memanfaatkan cache
memory (cache-friendly).

padding = (align (offset mod align)) mod align


new offset = offset + padding = offset + (align (offset
mod align)) mod align

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. Setiap elemen dalam array
dapat diakses menggunakan indeks yang biasanya berupa
bilangan bulat skalar bukan negatif. Dalam bahasa C, elemen
pertama dalam array diberi indeks 0. Representasi array dalam
memory dengan deklarasi int nim [8] adalah sebagai berikut
(asumsikan address elemen ke-0 adalah 0x4000 dengan nilai
elemen pertama adalah 1, nilai elemen kedua adalah 3, nilai
elemen ketiga adalah 2, nilai elemen keempat adalah 1, nilai
elemen kelima adalah 1, nilai elemen keenam adalah 0, nilai
elemen ketujuh adalah 0, dan nilai elemen kedelapan adalah 7).

Bahasa C mendukung deklarasi array secara statis maupun


secara dinamis. Array statis memiliki ukuran yang tidak bisa
diubah-ubah sedangkan array dinamis memiliki ukuran yang
dapat ditentukan saat program sedang berjalan.Array dinamis
dapat dideklarasikan dengan contoh int pusheen []. Dengan
demikian pusheen merupakan array yang memiliki elemen

Gambar di atas menunjukkan bagaimana penyimpanan variabel


matriks 1 dimensi pada memory.

Gambar di atas menunjukkan bagaimana penyimpanan variabel


matriks 2 dimensi pada memory.

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
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. 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.
Dalam array, indeks biasanya didefinisikan sebagai
perhitungan matematika terhadap alamat pointer. Dengan
demikian penulisan array[i] memiliki ekuivalensi dengan
*(array + i). Perhitungan matematika terhadap pointer untuk
mengakses setiap elemen array dapat dilakukan karena array
memiliki elemen yang tersusun secara kontigu (berurutan tanpa
jeda).

B. Tugas 2 : Fungsi Ekstraksi Byte


Hasil yang diperoleh setelah menjalan main.exe adalah
sebagai berikut.

C. Tugas 3 : Fungsi Masking Byte


Hasil yang diperoleh setelah menjalan main.exe adalah
sebagai berikut.

D. Tugas 4: Fungsi Membalik Urutan Byte


Hasil yang diperoleh setelah menjalan main.exe adalah
sebagai berikut.

E. Tugas 5 : Fungsi Pengurangan Byte


Hasil yang diperoleh setelah menjalan main.exe adalah
sebagai berikut.

F. Tugas 6 : Fungsi Shift Register


Hasil yang diperoleh setelah menjalan main.exe adalah
sebagai berikut.
Gambar di atas menunjukkan pointer a melakukan reference
terhadap memory address yang menunjukkan variable b. [4]
III. HASIL DAN ANALISIS
A. Tugas I : Fungsi XOR
Hasil yang diperoleh setelah menjalan main.exe adalah
sebagai berikut.

G. Tugas 7 : Program Enkripsi Sederhana


Hasil yang diperoleh setelah menjalan main.exe adalah
sebagai berikut.

H. Tugas 8 : Pointer dalam Assemlby


Hasil yang diperoleh sebagai berikut.
.file "coba.c"
.text
.globl _coba
.def _coba; .scl 2; .type 32; .endef
_coba:
pushl %ebp
movl %esp, %ebp
subl $16, %esp
movl 8(%ebp), %eax
movl (%eax), %eax
movl %eax, -4(%ebp)
movl 12(%ebp), %eax
movl (%eax), %eax
movl %eax, -8(%ebp)
movl 16(%ebp), %eax
movl (%eax), %eax
movl %eax, -12(%ebp)
movl -8(%ebp), %eax
movl -4(%ebp), %edx
addl %edx, %eax
movl %eax, -16(%ebp)
movl 12(%ebp), %eax
movl -16(%ebp), %edx
movl %edx, (%eax)
movl 16(%ebp), %eax
movl -8(%ebp), %edx
movl %edx, (%eax)
movl 8(%ebp), %eax
movl -12(%ebp), %edx
movl %edx, (%eax)
leave
ret
.ident "GCC: (tdm-2) 4.8.1"

.file "coba02.c"
.text
.globl _coba
.def _coba; .scl 2; .type 32; .endef
_coba:
pushl %ebp
movl %esp, %ebp
subl $32, %esp
movl 8(%ebp), %eax
fldl (%eax)
fstpl -8(%ebp)
movl 12(%ebp), %eax
fldl (%eax)
fstpl -16(%ebp)
movl 16(%ebp), %eax
fldl (%eax)
fstpl -24(%ebp)
fldl -8(%ebp)
faddl -16(%ebp)
fstpl -32(%ebp)
movl 12(%ebp), %eax
fldl -32(%ebp)
fstpl (%eax)
movl 16(%ebp), %eax
fldl -16(%ebp)
fstpl (%eax)
movl 8(%ebp), %eax
fldl -24(%ebp)
fstpl (%eax)
leave
ret
.ident "GCC: (tdm-2) 4.8.1"
File coba02.s
I. Tugas 9 : Fungsi Membalik Urutan Array
Hasil yang diperoleh setelah menjalan main.exe adalah
sebagai berikut.

File coba.s
J. Tugas 10 : Matriks Nama
Hasil yang diperoleh setelah menjalan main.exe adalah
sebagai berikut.

M. Tugas 13 : Penjumlahan Biner dengan Array


Hasil yang diperoleh setelah menjalan main.exe adalah
sebagai berikut.

Representasi tipe data float dalam memory digambarkan


sebagai berikut.

Representasi tipe data double dalam memory digambarkan


sebagai berikut.

K. Tugas 11 : Matriks Nama dengan Pointer


Program berhasil dikompilasi, namun di tengah keberjalanan
eksekusi main.exe, program error.
L. Tugas 12 : Perkalian Matriks
Hasil yang diperoleh setelah menjalan main.exe adalah
sebagai berikut.

Urutan structure dapat mempengaruhi ukuran dari structure


tersebut karena adanya proses alignment yang dilakukan. Salah
satu penyebab bertambahnya ukuran structure karena adanya
penambahan bytes untuk menjaga alignment structure, hal
tersebut yang kita kenal padding. Oleh seban itu untuk
mengurangi besarnya bytes padding yang muncul, data
structure perlu disusun berdasarkan tipe data yang sama terlebih
dahulu. Kemudian tipe data yang ukuruannya lebih kecil
diletakkan di awal structure.
Perbedaan antara data structure dan array adalah pada data
structure, setiap variable hanya dapat diakses menggunakan
sebuah single pointer atau dengan menggunakan nama structure
itu sendiri. Namun untuk array, dapat diakses pada lokasi
penymipanan yang berbeda. Akses elemen array pada memory
akan lebih mudah dan cepat dibandingkan dengan structure
data. Cara mengakses elemen pada array harus menggunakan
indeks, contoh int data[15].
Perbedaan antara array statis dan array dinamis, array statis
memiliki ukuran yang tidak bisa diubah-ubah sedangkan array
dinamis memiliki ukuran yang dapat ditentukan saat program
sedang berjalan.
Untuk array n-dimensional, alamatnya dialokasikan sesuai
dengan besar dimensinya. Misal jika 2 dimensi, maka tiap array
akan memiliki dua slot alamat kosong untuk diisi. Kemudian
lokasi penyimpanan dari seluruh array itu akan kontigu
(berurutan).
Prinsip pengurangan twos complement dapat diilustrasikan
melalui contoh berikut.

Dipilih prototype yang ketiga (sesuai pada modul) dengan


menjadikan matriks sebagai array dinamis. Dengan penggunaan
prototype ini, pengaksesan memory lebih cache friendly.

adanya proses alignment dalam data structure.


Penggunaan array lebih mudah dan cepat dibandingkan
dengan penggunaan data structure.
REFERENSI
[1] http://en.wikipedia.org/wiki/C_data_types. Diakses Kamis,
23 Oktober 2014, pukul 16.50 WIB.
Pointer dapat digunakan untuk mengakses alamat secara
langsung. Pointer juga dapat digunakan untuk menunjukkan
structure berdasarkan alamatnya di memory. Hal ini berguna
untuk melakukan passing structure ke atau dari sebuah fungsi
hanya dengan memberikan alamat structure tersebut di
memory. Pointer juga dapat didereferensi untuk mengakses
nilai dari suatu anggota structure tersebut.
Bahaya yang mungkin muncul dengan adanya pointer :
Bahaya yang mungkin ada dengan pointer sebagai
moniker: memory leak, double delete, invalid memory
access.
Bahaya yang mungkin ada dengan pointer sebagai iterator:
array out of bound.
Bahaya yang mungkin ada dengan pointer sebagai
abstraksi fixed memory.

[2]
http://en.wikipedia.org/wiki/Data_structure_alignment#Data_s
tructure_padding. Diakses Kamis, 23 Oktober 2014, pukul
17.01 WIB.
[3] http://en.wikipedia.org/wiki/Bitwise_operation. Diakses
Kamis, 23 Oktober 2014, pukul 17.47 WIB.
[4]
http://en.wikipedia.org/wiki/Pointer_(computer_programming
). Diakses Kamis, 23 Oktober 2014, pukul 18.02 WIB.
[5] Hanindhito, Bagus. Modul Praktikum EL3111 Arsitektur
Sistem Komputer, Sekolah Teknik Elektro dan Informatika,
Bandung, 2014.
[6] Bryant, Randal, dan David OHallaron. Computer Systems
: A Programmers Perspective 2nd Edition. 2011.
Massachusetts : Pearson Education Inc.

IV. SIMPULAN
Informasi
yang
disimpan
di
memory
dapat
direpresentasikan dalam level bit.
Dalam mengolah informasi pada memory, dapat digunakan
operator-operator bitwise.
Pointer memiliki banyak kegunaan dalam pengolahan
informasi, namun memiliki banyak bahaya juga.
Penggunaan data structure yang tidak terartur, akan
menyebabkan semakin besar ukurannya. Hal ini disebabkan

[7] Patterson, David, dan John Hennessy. Computer


Organization and Design: The Hardware/Software Interface.
2012. Waltham : Elsevier Inc.

Lampiran
1. Source code untuk tugas I :
//
//
//
//
//
//
//
//
//
//

Praktikum EL3111 Arsitektur Sistem Komputer


Modul
: 2
Percobaan
: 1
Tanggal
: 20 Oktober 2014
Kelompok
: 16
Rombongan
: A
Nama (NIM) 1 : Khairunnisa (13212028)
Nama (NIM) 2 : Kevin Situmorang (13212029)
Nama File
: bitXor.h
Deskripsi
: File header

#ifndef START_VAL
#define START_VAL 0
int bitXor(int x, int y);
#endif
File bitXor.h

//
//
//
//
//
//
//
//
//
//

Praktikum EL3111 Arsitektur Sistem Komputer


Modul
: 2
Percobaan
: 1
Tanggal
: 20 Oktober 2014
Kelompok
: 16
Rombongan
: A
Nama (NIM) 1 : Khairunnisa (13212028)
Nama (NIM) 2 : Kevin Situmorang (13212029)
Nama File
: main_bitXor.c
Deskripsi
: Fungsi yang berperilaku sama dengan operator bitwise XOR

#include "bitXor.h"
#include <stdio.h>
int bitXor(int x, int y)
{
return (~( ~(~x&y) & ~(x&~y) ));
}
File bitXor.c
//
//
//
//
//
//
//
//
//
//

Praktikum EL3111 Arsitektur Sistem Komputer


Modul
: 2
Percobaan
: 1
Tanggal
: 20 Oktober 2014
Kelompok
: 16
Rombongan
: A
Nama (NIM) 1 : Khairunnisa (13212028)
Nama (NIM) 2 : Kevin Situmorang (13212029)
Nama File
: main.c
Deskripsi
: Program utama untuk memasukkan masukan dalam fungsi XOR

#include "bitXor.h"
#include <stdio.h>
int main ()
{
int a,b;
printf("Nilai a: ");
scanf("%d", &a);
printf("a dalam heksadesimal: 0x%08X\n",a);
printf("\nNilai b : ");
scanf("%d", &b);
printf("b dalam heksadesimal : 0x%08X\n",b);
printf("\na XOR b adalah : %d \n", bitXor(a,b));
printf("a XOR b dalam heksadesimal : 0x%08X\n",bitXor(a,b));
return 0;
}
File main.c

2. Source code untuk tugas II :

//
//
//
//
//
//
//
//
//
//

Praktikum EL3111 Arsitektur Sistem Komputer


Modul
: 2
Percobaan
: 2
Tanggal
: 20 Oktober 2014
Kelompok
: 16
Rombongan
: A
Nama (NIM) 1 : Khairunnisa (13212028)
Nama (NIM) 2 : Kevin Situmorang (13212029)
Nama File
: getByte.h
Deskripsi
: File header

#ifndef START_VAL
#define START_VAL 0
int getByte (int x, int n);
#endif
File getByte.h
//
//
//
//
//
//
//
//
//
//

Praktikum EL3111 Arsitektur Sistem Komputer


Modul
: 2
Percobaan
: 2
Tanggal
: 20 Oktober 2014
Kelompok
: 16
Rombongan
: A
Nama (NIM) 1 : Khairunnisa (13212028)
Nama (NIM) 2 : Kevin Situmorang (13212029)
Nama File
: getByte.c
Deskripsi
: Fungsi untuk melakukan ekstraksi byte ke-n.

#include <stdio.h>
#include "getByte.h"
int getByte (int x, int n)
{
return ((( x << ((3-n)*8)) >> 24) & 0x000000ff );
}
File getByte.c

//
//
//
//
//
//
//
//
//
//

Praktikum EL3111 Arsitektur Sistem Komputer


Modul
: 2
Percobaan
: 2
Tanggal
: 20 Oktober 2014
Kelompok
: 16
Rombongan
: A
Nama (NIM) 1 : Khairunnisa (13212028)
Nama (NIM) 2 : Kevin Situmorang (13212029)
Nama File
: main.c
Deskripsi
: Program utama untuk getByte.c.

#include <stdio.h>
#include "getByte.h"
int main ()
{
int a,b;
printf("Masukkan bilangan integer : ");
scanf("%d", &a);
printf("Representasi bilangan tersebut dalam heksadesimal : 0x%08X\n",a);
printf("\nMasukkan urutan byte yang ingin diambil (0 sampai 3) : ");
scanf("%d", &b);
printf("\nMaka byte yang diambil adalah : %d", getByte(a,b));
printf("\nRepresentasi byte yang diambil dalam heksadesimal :
0x%08X\n",getByte(a,b));
return 0;
}
File main.c
3. Source code untuk tugas III :
//
//
//
//
//
//
//
//
//
//

Praktikum EL3111 Arsitektur Sistem Komputer


Modul
: 2
Percobaan
: 3
Tanggal
: 20 Oktober 2014
Kelompok
: 16
Rombongan
: A
Nama (NIM) 1 : Khairunnisa (13212028)
Nama (NIM) 2 : Kevin Situmorang (13212029)
Nama File
: bitMask.h
Deskripsi
: File header

#ifndef START_VAL
#define START_VAL 0
int bitMask (int highbit, int lowbit);
#endif
File bitMask.h

//
//
//
//
//
//
//
//
//
//

Praktikum EL3111 Arsitektur Sistem Komputer


Modul
: 2
Percobaan
: 3
Tanggal
: 20 Oktober 2014
Kelompok
: 16
Rombongan
: A
Nama (NIM) 1 : Khairunnisa (13212028)
Nama (NIM) 2 : Kevin Situmorang (13212029)
Nama File
: bitMask.c
Deskripsi
: Fungsi untuk menghasilkan suatu mask.

#include <stdio.h>
#include "bitMask.h"
int bitMask (int highbit, int lowbit)
{
if (lowbit >= highbit)
return 0;
else
return (((0xffffffff >> (31-highbit)) >> lowbit) << lowbit);
}
File bitMask.c
//
//
//
//
//
//
//
//
//
//

Praktikum EL3111 Arsitektur Sistem Komputer


Modul
: 2
Percobaan
: 3
Tanggal
: 20 Oktober 2014
Kelompok
: 16
Rombongan
: A
Nama (NIM) 1 : Khairunnisa (13212028)
Nama (NIM) 2 : Kevin Situmorang (13212029)
Nama File
: main.c
Deskripsi
: Program utama untuk bitMask.c.

#include <stdio.h>
#include "bitMask.h"
int main ()
{
int a,b;
printf("Masukkan nilai highbit (antara 0-31) : ");
scanf("%d", &a);
printf("Masukkan nilai lowbit (antara 0-31) : ");
scanf("%d", &b);
printf("\nMaka hasil bitmask adalah : %d", bitMask(a,b));
printf("\nRepresentasi bitmask dalam heksadesimal : 0x%08X\n", bitMask(a,b));
return 0;
}
File main.c
4. Source code untuk tugas IV :

//
//
//
//
//
//
//
//
//
//

Praktikum EL3111 Arsitektur Sistem Komputer


Modul
: 2
Percobaan
: 4
Tanggal
: 20 Oktober 2014
Kelompok
: 16
Rombongan
: A
Nama (NIM) 1 : Khairunnisa (13212028)
Nama (NIM) 2 : Kevin Situmorang (13212029)
Nama File
: reverseBytes.h
Deskripsi
: File header

#ifndef START_VAL
#define START_VAL 0
int reverseBytes (int x);
#endif
File reverseBytes.h
//
//
//
//
//
//
//
//
//
//

Praktikum EL3111 Arsitektur Sistem Komputer


Modul
: 2
Percobaan
: 4
Tanggal
: 20 Oktober 2014
Kelompok
: 16
Rombongan
: A
Nama (NIM) 1 : Khairunnisa (13212028)
Nama (NIM) 2 : Kevin Situmorang (13212029)
Nama File
: reverseBytes.c
Deskripsi
: Fungsi untuk membalikkan urutan byte.

#include <stdio.h>
#include "getByte.h"
int reverseBytes (int x)
{
return ( (getByte(x,0)<<24) + (getByte(x,1)<<16) + (getByte(x,2)<<8) +
(getByte(x,3)) );
}
File reverseBytes.c

//
//
//
//
//
//
//
//
//
//

Praktikum EL3111 Arsitektur Sistem Komputer


Modul
: 2
Percobaan
: 4
Tanggal
: 20 Oktober 2014
Kelompok
: 16
Rombongan
: A
Nama (NIM) 1 : Khairunnisa (13212028)
Nama (NIM) 2 : Kevin Situmorang (13212029)
Nama File
: main.c
Deskripsi
: Program utama

#include <stdio.h>
#include "getByte.h"
#include "reverseBytes.h"
int main ()
{
int a;
printf("Masukkan sebuah integer : ");
scanf("%d", &a);
printf("Representasi integer dalam heksadesimal : 0x%08X\n",a);
printf("Maka reverseBytes dari integer tersebut adalah : %d\n",
reverseBytes(a));
printf("Representasi reverseBytes dalam heksadesimal :
0x%08X\n",reverseBytes(a));
return 0;
}
File main.c
Pada tugas ini juga digunakan kode getByte.h dan getByte.c yang sama seperti source code untuk tugas II.
5. Source code untuk tugas V :
//
//
//
//
//
//
//
//
//
//

Praktikum EL3111 Arsitektur Sistem Komputer


Modul
: 2
Percobaan
: 5
Tanggal
: 20 Oktober 2014
Kelompok
: 16
Rombongan
: A
Nama (NIM) 1 : Khairunnisa (13212028)
Nama (NIM) 2 : Kevin Situmorang (13212029)
Nama File
: minBytes.h
Deskripsi
: File header

#ifndef START_VAL
#define START_VAL 0
int minBytes (int x, int y);
#endif
File minBytes.h

// Praktikum EL3111 Arsitektur Sistem Komputer


// Modul
: 2
// Percobaan
: 5
// Tanggal
: 20 Oktober 2014
// Kelompok
: 16
// Rombongan
: A
// Nama (NIM) 1 : Khairunnisa (13212028)
// Nama (NIM) 2 : Kevin Situmorang (13212029)
// Nama File
: minBytes.c
// Deskripsi
: Fungsi untuk menghitung hasil pengurangan antara byte data
pertama dengan kedua.
#include <stdio.h>
#include "minBytes.h"
int minBytes (int x, int y)
{
return ( x + (~y+1) );
}
File minBytes.c
//
//
//
//
//
//
//
//
//
//

Praktikum EL3111 Arsitektur Sistem Komputer


Modul
: 2
Percobaan
: 5
Tanggal
: 20 Oktober 2014
Kelompok
: 16
Rombongan
: A
Nama (NIM) 1 : Khairunnisa (13212028)
Nama (NIM) 2 : Kevin Situmorang (13212029)
Nama File
: main.c
Deskripsi
: Program utama untuk minBytes.c.

#include <stdio.h>
#include "minBytes.h"
int main ()
{
int a,b;
printf("Masukkan nilai
scanf("%d", &a);
printf("Representasi a
printf("Masukkan nilai
scanf("%d", &b);
printf("Representasi b
printf("Maka nilai a-b
printf("\nRepresentasi
return 0;
}

byte pertama (a) : ");


dalam heksadesimal : 0x%08X\n", a);
byte kedua (b) : ");
dalam heksadesimal : 0x%08X\n", b);
adalah : %d", minBytes(a,b));
a-b dalam heksadesimal : 0x%08X\n", minBytes(a,b));

File main.c
6. Source code untuk tugas VI :

//
//
//
//
//
//
//
//
//
//

Praktikum EL3111 Arsitektur Sistem Komputer


Modul
: 2
Percobaan
: 6
Tanggal
: 20 Oktober 2014
Kelompok
: 16
Rombongan
: A
Nama (NIM) 1 : Khairunnisa (13212028)
Nama (NIM) 2 : Kevin Situmorang (13212029)
Nama File
: shiftRegister.h
Deskripsi
: File header

#ifndef START_VAL
#define START_VAL 0
extern int accumulation;
int shiftRegister (int x);
#endif
File shiftRegister.h
//
//
//
//
//
//
//
//
//
//

Praktikum EL3111 Arsitektur Sistem Komputer


Modul
: 2
Percobaan
: 6
Tanggal
: 20 Oktober 2014
Kelompok
: 16
Rombongan
: A
Nama (NIM) 1 : Khairunnisa (13212028)
Nama (NIM) 2 : Kevin Situmorang (13212029)
Nama File
: shiftRegister.c
Deskripsi
: Fungsi untuk merepresentasikan shift register.

#include <stdio.h>
#include "shiftRegister.h"
int accumulation = 0;
int shiftRegister (int x)
{
accumulation = accumulation << 5;
accumulation = accumulation + (x & 31);
return accumulation;
}
File shiftRegister.c

//
//
//
//
//
//
//
//
//
//

Praktikum EL3111 Arsitektur Sistem Komputer


Modul
: 2
Percobaan
: 6
Tanggal
: 20 Oktober 2014
Kelompok
: 16
Rombongan
: A
Nama (NIM) 1 : Khairunnisa (13212028)
Nama (NIM) 2 : Kevin Situmorang (13212029)
Nama File
: main.c
Deskripsi
: Program utama untuk shiftRegister.c.

#include <stdio.h>
#include "shiftRegister.h"
int main ()
{
int a,b,c;
printf("Isi register saat ini : 0x%08X\n \n", accumulation);
printf("Masukkan nilai pertama yang akan dimasukkan ke register (maksimum 5
bit) : ");
scanf("%d", &a);
printf("Representasi nilai pertama dalam heksadesimal : 0x%08X\n",a);
printf("Maka isi register saat ini adalah : 0x%08X\n", shiftRegister(a));
printf("\n\nMasukkan nilai kedua yang akan dimasukkan ke register (maksimum 5
bit) : ");
scanf("%d", &b);
printf("Representasi nilai kedua dalam heksadesimal : 0x%08X\n",b);
printf("Maka isi register saat ini adalah : 0x%08X\n", shiftRegister(b));
printf("\n\nMasukkan nilai ketiga yang akan dimasukkan ke register (maksimum 5
bit) : ");
scanf("%d", &c);
printf("Representasi nilai ketiga dalam heksadesimal : 0x%08X\n",c);
printf("Maka isi register saat ini adalah : 0x%08X\n", shiftRegister(c));
return 0;
}
File main.c
7. Source code untuk tugas VII :
//
//
//
//
//
//
//
//
//
//

Praktikum EL3111 Arsitektur Sistem Komputer


Modul
: 2
Percobaan
: 7
Tanggal
: 20 Oktober 2014
Kelompok
: 16
Rombongan
: A
Nama (NIM) 1 : Khairunnisa (13212028)
Nama (NIM) 2 : Kevin Situmorang (13212029)
Nama File
: enkripsi.h
Deskripsi
: File header

#ifndef START_VAL
#define START_VAL 0
int enkripsi (int x, int y);
#endif

File enkripsi.h

//
//
//
//
//
//
//
//
//
//

Praktikum EL3111 Arsitektur Sistem Komputer


Modul
: 2
Percobaan
: 7
Tanggal
: 20 Oktober 2014
Kelompok
: 16
Rombongan
: A
Nama (NIM) 1 : Khairunnisa (13212028)
Nama (NIM) 2 : Kevin Situmorang (13212029)
Nama File
: enkripsi.c
Deskripsi
: Program enkripsi.

#include "enkripsi.h"
int enkripsi (int x, int y)
{
int a,b,c,d;
a = bitXor ((getByte(x,3)),(y &
b = bitXor ((getByte(x,2)),(y &
c = bitXor ((getByte(x,1)),(y &
d = bitXor ((getByte(x,0)),(y &
return ( (a << 24) + (b << 16)+

255));
255));
255));
255));
(c << 8) + d );
}
File enkripsi.c

//
//
//
//
//
//
//
//
//
//

Praktikum EL3111 Arsitektur Sistem Komputer


Modul
: 2
Percobaan
: 7
Tanggal
: 20 Oktober 2014
Kelompok
: 16
Rombongan
: A
Nama (NIM) 1 : Khairunnisa (13212028)
Nama (NIM) 2 : Kevin Situmorang (13212029)
Nama File
: dekripsi.h
Deskripsi
: File header

#ifndef START_VAL
#define START_VAL 0
int dekripsi (int x, int y);
#endif

File dekripsi.h

//
//
//
//
//
//
//
//
//
//

Praktikum EL3111 Arsitektur Sistem Komputer


Modul
: 2
Percobaan
: 7
Tanggal
: 20 Oktober 2014
Kelompok
: 16
Rombongan
: A
Nama (NIM) 1 : Khairunnisa (13212028)
Nama (NIM) 2 : Kevin Situmorang (13212029)
Nama File
: dekripsi.c
Deskripsi
: Program untuk melakukan deskripsi.

#include "dekripsi.h"
int dekripsi (int x, int y)
{
return ( enkripsi(x,y) );
}
File dekripsi.c
//
//
//
//
//
//
//
//
//
//

Praktikum EL3111 Arsitektur Sistem Komputer


Modul
: 2
Percobaan
: 7
Tanggal
: 20 Oktober 2014
Kelompok
: 16
Rombongan
: A
Nama (NIM) 1 : Khairunnisa (13212028)
Nama (NIM) 2 : Kevin Situmorang (13212029)
Nama File
: main.c
Deskripsi
: Program utama untuk mengambil masukan.

#include <stdio.h>
#include "dekripsi.h"
#include "enkripsi.h"
#include "getByte.h"
#include "bitXor.h"
int main ()
{
int m,n,p;
printf("Masukkan sebuah integer : ");
scanf("%d", &m);
printf("Masukkan kode enkripsi : ");
scanf("%d", &n);
p = enkripsi(m,n);
printf("Maka hasil enkripsi integer tersebut adalah : %d", p);
printf("\nHasil deskripsi dari enkripsi bilangan tersebut adalah : %d",
dekripsi(p,n));
return 0;
}
File main.c
Pada tugas ini juga digunakan kode bitXor.h dan bitXor.c yang sama seperti source code untuk tugas I. Begitu juga dengan
getByte.h dan getByte.c seperti source code untuk tugas II.
8. Source code untuk tugas VIII sama seperti yang tertera pada modul praktikum.
9. Source code untuk tugas IX :

//
//
//
//
//
//
//
//
//
//

Praktikum EL3111 Arsitektur Sistem Komputer


Modul
: 2
Percobaan
: 9
Tanggal
: 20 Oktober 2014
Kelompok
: 16
Rombongan
: A
Nama (NIM) 1 : Khairunnisa (13212028)
Nama (NIM) 2 : Kevin Situmorang (13212029)
Nama File
: reverseArray.h
Deskripsi
: File header

#ifndef START_VAL
#define START_VAL 0
void reverseArray (char originalstring[], char reversedstring[]);
#endif
File reverseArray.h
//
//
//
//
//
//
//
//
//
//

Praktikum EL3111 Arsitektur Sistem Komputer


Modul
: 2
Percobaan
: 9
Tanggal
: 20 Oktober 2014
Kelompok
: 16
Rombongan
: A
Nama (NIM) 1 : Khairunnisa (13212028)
Nama (NIM) 2 : Kevin Situmorang (13212029)
Nama File
: reverseArray.c
Deskripsi
: fungsi untuk membalikkan array.

#include <stdio.h>
#include <string.h>
void reverseArray (char originalstring[], char reversedstring[])
{
int i = 0, j;
int length;
length = strlen(originalstring);
for (j = length - 1; j >= 0; j--)
{
reversedstring[i] = originalstring[j];
i += 1;
}
reversedstring[i] = '\0';
for (j = 0; j < length; j++)
{
printf ("%c", reversedstring[j]);
}
}
File reverseArray.c

//
//
//
//
//
//
//
//
//
//

Praktikum EL3111 Arsitektur Sistem Komputer


Modul
: 2
Percobaan
: 9
Tanggal
: 20 Oktober 2014
Kelompok
: 16
Rombongan
: A
Nama (NIM) 1 : Khairunnisa (13212028)
Nama (NIM) 2 : Kevin Situmorang (13212029)
Nama File
: main.c
Deskripsi
: Program utama

#include <stdio.h>
#include <string.h>
#define MAX 100
int main ()
{
char originalstring[MAX];
char reversedstring[MAX];
puts ("Masukkan kata :");
fgets (originalstring, sizeof(originalstring), stdin);
originalstring[strlen(originalstring) - 1] = '\0';
while (originalstring[0] == '\0')
{
puts ("Masukkan kata :");
fgets (originalstring, sizeof(originalstring), stdin);
originalstring[strlen(originalstring) - 1] = '\0';
}
reverseArray (originalstring, reversedstring);
return 0;
}
File main.c
10. Source code untuk tugas X :
//
//
//
//
//
//
//
//
//
//

Praktikum EL3111 Arsitektur Sistem Komputer


Modul
: 2
Percobaan
: 10
Tanggal
: 20 Oktober 2014
Kelompok
: 16
Rombongan
: A
Nama (NIM) 1 : Khairunnisa (13212028)
Nama (NIM) 2 : Kevin Situmorang (13212029)
Nama File
: matriksNama.h
Deskripsi
: File header

#ifndef START_VAL
#define START_VAL 0
void matriksNama (char data[100][100], int jumlah_data);
#endif
File matriksNama.h

//
//
//
//
//
//
//
//
//
//

Praktikum EL3111 Arsitektur Sistem Komputer


Modul
: 2
Percobaan
: 10
Tanggal
: 20 Oktober 2014
Kelompok
: 16
Rombongan
: A
Nama (NIM) 1 : Khairunnisa (13212028)
Nama (NIM) 2 : Kevin Situmorang (13212029)
Nama File
: matriksNama.c
Deskripsi
: Fungsi input matriks nama sekaligus menampilkan isi data

#include <stdio.h>
void matriksNama (char data[100][100], int jumlah_data)
{
int panjang_data[100];
int i, j;
char temp;
for (j=0;j<jumlah_data;j++)
{
printf("Masukkan panjang character= ");
scanf ("%d", &panjang_data[j]);
for (i=0;i<panjang_data[j];i++)
{
printf("Masukkan character ke %d : ", i+1);
scanf ("%c", &temp);
scanf ("%c", &data[j][i]);
}
}
for (j=0;j<jumlah_data;j++)
{
printf ("Data ke %d : ", j+1);
for (i=0; i<panjang_data[j]; i++)
{
printf ("%c", data[j][i]);
}
printf ("\n");
}
}
File matriksNama.c

//
//
//
//
//
//
//
//
//
//

Praktikum EL3111 Arsitektur Sistem Komputer


Modul
: 2
Percobaan
: 10
Tanggal
: 20 Oktober 2014
Kelompok
: 16
Rombongan
: A
Nama (NIM) 1 : Khairunnisa (13212028)
Nama (NIM) 2 : Kevin Situmorang (13212029)
Nama File
: main.c
Deskripsi
: Program utama

#include <stdio.h>
#include "matriksNama.h"
int main ()
{
char nama[100][100];
int banyak_data;
printf("Jumlah data= ");
scanf ("%d", &banyak_data);
matriksNama(nama, banyak_data);
return 0;
}
File main.c
11. Source code untuk tugas XI hampir sama dengan tugas X, perbedaan terdapat pada struktur data char data [100][100] menjadi
char **data[100].
12. Source code untuk tugas XII :

//
//
//
//
//
//
//
//
//
//

Praktikum EL3111 Arsitektur Sistem Komputer


Modul
: 2
Percobaan
: 12
Tanggal
: 20 Oktober 2014
Kelompok
: 16
Rombongan
: A
Nama (NIM) 1 : Khairunnisa (13212028)
Nama (NIM) 2 : Kevin Situmorang (13212029)
Nama File
: main.c
Deskripsi
: Program utama

#include <stdio.h>
struct Matriks
{
int jumlahBaris;
int jumlahKolom;
int** nilai;
};
struct Matriks mulMatriks(struct Matriks A, struct Matriks B)
{
int i,j,k,r,sum;
struct Matriks C;
C.jumlahBaris=A.jumlahBaris;
C.jumlahKolom=B.jumlahKolom;
C.nilai=(int**) malloc(C.jumlahBaris*sizeof(int*));
for(i=0;i<C.jumlahBaris;i++)
C.nilai[i]=(int*)malloc(C.jumlahKolom*sizeof(int));
for (i=0;i<C.jumlahBaris;i++)
{
for (j=0;j<C.jumlahKolom;j++)
{
C.nilai[i][j]=0;
}
}
for (i=0;i<C.jumlahBaris;i++)
{
for (k=0;k<A.jumlahKolom;k++)
{
r=A.nilai[i][k];
for (j=0;j<C.jumlahKolom;j++)
{
C.nilai[i][j]+= r * B.nilai[k][j];
}
}
}
return(C);
}

int main(void)
{
int i,j;
struct Matriks A,B,C;
do{
printf("Baris matriks A : ");scanf("%i",&A.jumlahBaris);
printf("Kolom matriks A : ");scanf("%i",&A.jumlahKolom);
printf("Baris matriks B : ");scanf("%i",&B.jumlahBaris);
printf("Kolom matriks B : ");scanf("%i",&B.jumlahKolom);
}while(A.jumlahKolom!=B.jumlahBaris);
//alokasi memori untuk matriks A
A.nilai=(int**) malloc(A.jumlahBaris*A.jumlahKolom*sizeof(int*));
for(i=0;i<A.jumlahBaris;i++)
A.nilai[i]=(int*)malloc(A.jumlahKolom*sizeof(int));
//alokuasi memori untuk matriks B
B.nilai=(int**) malloc(B.jumlahBaris*sizeof(int*));
for(i=0;i<B.jumlahBaris;i++)
B.nilai[i]=(int*)malloc(B.jumlahKolom*sizeof(int));
printf("\nMatriks A :\n");
for (i=0;i<A.jumlahBaris;i++)
{
for (j=0;j<A.jumlahKolom;j++)
{
A.nilai[i][j]= 1;
printf("%d ",A.nilai[i][j]);
}
printf("\n");
}
printf("\nMatriks B :\n");
for (i=0;i<B.jumlahBaris;i++)
{
for (j=0;j<B.jumlahKolom;j++)
{
B.nilai[i][j]= 1;
printf("%d ",B.nilai[i][j]);
}
printf("\n");
}
C=mulMatriks(A,B);
printf("\nMatriks C :\n");
for (i=0;i<C.jumlahBaris;i++)
{
for (j=0;j<C.jumlahKolom;j++)
{
printf("%d ",C.nilai[i][j]);
}
printf("\n");
}
}

File main.c
13. Source code untuk tugas XIII :

//
//
//
//
//
//
//
//
//
//

Praktikum EL3111 Arsitektur Sistem Komputer


Modul
: 2
Percobaan
: 13
Tanggal
: 20 Oktober 2014
Kelompok
: 16
Rombongan
: A
Nama (NIM) 1 : Khairunnisa (13212028)
Nama (NIM) 2 : Kevin Situmorang (13212029)
Nama File
: sumofbiner.h
Deskripsi
: File header

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

//
//
//
//
//
//
//
//
//
//

Praktikum EL3111 Arsitektur Sistem Komputer


Modul
: 2
Percobaan
: 13
Tanggal
: 20 Oktober 2014
Kelompok
: 16
Rombongan
: A
Nama (NIM) 1 : Khairunnisa (13212028)
Nama (NIM) 2 : Kevin Situmorang (13212029)
Nama File
: sumofbiner.c
Deskripsi
: Fungsi menjumlahkan dua bilangan twos complement

#include <stdio.h>
#include "sumofbiner.h"
void sumofbiner (int bil1, int bil2)
{
int a[8],b[8],hasil[8],sum=0,min=0;
int i, carry = 0;
for(i=0;i<7;i++)
{
a[i]=(bil1>>i)&1;
b[i]=(bil2>>i)&1;
hasil[i]=(carry+a[i]+b[i])&1;
carry=((carry+a[i]+b[i])>>1)&1;
sum|=(hasil[i]<<i);
}
a[7]=(bil1>>31)&1;
b[7]=(bil2>>31)&1;
hasil[7]=(carry+a[7]+b[7])&1;
sum|=(hasil[7]<<7);
if(hasil[7]==1)
{
sum|=0xFFFFFF00;
}
carry=0;
for(i=0;i<8;i++)
{
hasil[i]=(a[i]-carry-b[i])&1;
carry=((a[i]-b[i]-carry)>>1)&1;
min|=(hasil[i]<<i);
}
if(hasil[7]==1)
{
min|=0xFFFFFF00;
}
printf("Jumlah dua bilangan desimal di atas : %d\n",sum);
}
File sumofbiner.c

//
//
//
//
//
//
//
//
//
//

Praktikum EL3111 Arsitektur Sistem Komputer


Modul
: 2
Percobaan
: 13
Tanggal
: 20 Oktober 2014
Kelompok
: 16
Rombongan
: A
Nama (NIM) 1 : Khairunnisa (13212028)
Nama (NIM) 2 : Kevin Situmorang (13212029)
Nama File
: main.c
Deskripsi
: 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;
}
File main.c

Anda mungkin juga menyukai