Anda di halaman 1dari 17

LAPORAN PRAKTIKUM

BAHASA ASSEMBLY

POINTER
Oleh :

Nama : Isnani
Nim : 1957301025
Kelas : TI 1C
Dosen Pembimbing : Azhar, S.T,.M.T.

PROGRAM STUDI TEKNIK INFORMATIKA JURUSAN


TEKNOLOGI INFORMASI DAN KOMPUTER TAHUN
2020
LEMBAR PENGESAHAN

No. Praktikum : 05/TI/PBA/TI1C/2020

Judul : Pointer

Nama : Isnani

NIM : 1957301025

Kelas : TI 1C

Jurusan : Teknologi Informasi Dan Komputer

Prodi : Teknik Informatika

Tanggal praktikum :

Tanggal penyerahan :

Nilai :

Buketrata, 08 April 2020


Dosen Pembimbing,

Azhar, S.T,.M.T.

i
PRAKTIKUM 3
POINTER

PROSEDUR PERCOBAAN
A. Tipe Data
1. Tuliskan program assembly berikut menggunakan TASM , lalu lingking
menjadi COM :
.Model Small
.Code
ORG 100h
TData :
JMP Proses
A db 4 ; 1 byte, nilai awal='4'
B db 4,4,4,2,? ; 1*5 byte, nilai
awal=4,4,4,2,?
C db 4 DUP(5) ; 1*4 byte, nilai awal='5'
D db 'HAI !!' ; 6 byte berisi 6 karakter
E dw ? ; 1 word tidak diketahui
isinya
F dw ?,?,? ; 3 word tidak diketahui
isinya
G dw 10 DUP(?) ;10 word tidak diketahui
isinya
H dd ? ; 1 DoubleWord tanpa nilai
awal
I DF ?,? ; 2 FarWord tanpa nilai awal

3
J DQ 0A12h ; 1 QuadWord, nilai
awal='0A12'
K DT 25*80 ; 1 TenBytes, nilai
awal='2000'
L Equ 666 ; Konstanta, L=666
M db '123' ; String '123'
N db '1','2','3' ; String '123'
O db 49,50,51 ; String '123'
Proses :
;
;
;
End Tdata
2. Debug hasil lingking menggunakan DEBUG dengan mengetikkan perintah
berikut pada Command Prompt DOS :
DEBUG [nama file com]
3. Lihat isi memori menggunakan perintah d. Simpan hasil screenshot-nya
sebagai dokumentasi Anda masing – masing.
Isi Memory :

Isi Register :

4
B. Data sebagai program
1. Tuliskan program assembly berikut menggunakan TASM , lalu lingking
menjadi COM :
;=====================================;
; PROGRAM : data1.ASM ;
; FUNGSI : MEMBUNYIKAN SPEAKER ;
;======================================
.Model Small
.Code
ORG 100h
Tdata:
db 0E4h,61h,24h,0FEh,0E6h,61h,0B9h,0D0h,7h,0BBh,9AH
db 2h,8BH,0D1h,51h,34h,2h,0E6h,61h,0D1h,0C3h,73h,6h
db 83h,0C1h,0h,0EBh,0BH,90h,52h,2BH,0D1h,87h,0D1h,5AH

5
db 81h,0C1h,34h,8h,0E2h,0FEh,59h,0E2h,0E2h,0CDh,20h
End Tdata
2. Jalankan file hasil lingking dan amati yang terjadi.
Hasil :
Pada saat kita jalankan programnya, muncul suara “tsett” Kemudian mati. Suara
nya hanya muncul sekejap.

Isi Memory :

Isi Register :

6
6
7
C. Mengakses data berbeda tipe menggunakan pointer
1. Tuliskan program assembly berikut menggunakan TASM , lalu lingking
menjadi COM dan eksekusi programnya. Amati apa yang terjadi di layar.
;=================================;
; PROGRAM : data2.ASM ;
; FUNGSI : MEMINDAHKAN DATA ;
;=================================;
.Model Small
.Code
ORG 100h
TData :
JMP Proses ; Lompat ke Proses
A dw 01EFh ; 2 Byte
B dw 02FEh ; 2 Byte
D dd ? ; 4 Byte
Proses:
MOV AL,BYTE PTR A ; AL=EF, AX=?EF
MOV AH,BYTE PTR A+1 ; AH=01, AX=01EF
MOV BX,B ; BX=02FE
MOV WORD PTR D,AX ; D=??01EF
MOV WORD PTR D+2,BX ; D=02FE01EF
INT 20h ; Kembali ke DOS
End TData

Hasil :

2. Debug hasil lingking menggunakan DEBUG dengan mengetikkan perintah


berikut pada Command Prompt DOS :
DEBUG [nama file com]
3. Trace tiap baris programnya dan amati perubahan pada register – registernya
serta memori. Simpan hasil screenshot tracing program sebagai dokumentasi
Anda masing – masing.

8
Isi Register :

Isi Memory :

D. Perkalian 2 bilangan 16bit


1. Tuliskan program assembly berikut menggunakan TASM , lalu lingking
menjadi COM.
;================================;
; PROGRAM : ptr4.ASM ;
; FUNGSI : MENGALIKAN BILANGAN;
;================================;
.Model Small
.Code
ORG 100h
TData :
JMP Proses ; Lompat ke Proses
A dw 01EFh ; 2 Byte
B dw 02FEh ; 2 Byte

9
Hsl dd ? ; 4 Byte
Proses:
MOV AX,A ; AX=1EF
MUL B ; Kalikan 1FH*2FE
MOV WORD PTR Hsl,AX ; AX bernilai C922, Hsl=??C922
MOV WORD PTR Hsl+2,DX ; DX bernilai 0005,
Hsl=0005C922
INT 20h ; Kembali ke DOS
End TData

2. Debug hasil lingking menggunakan DEBUG dengan mengetikkan perintah


berikut pada Command Prompt DOS :
DEBUG [nama file com]
3. Trace tiap baris programnya dan amati perubahan pada register – registernya.
Simpan hasil screenshot tracing program sebagai dokumentasi Anda masing –
masing.

Isi Register :

Isi Memory :

10
ANALISIS
1. Tipe Data
.Model Small
.Code
ORG 100h
TData :
JMP Proses ; lompat ke bagian proses
A db 4 ; 1 byte, nilai awal='4'
B db 4,4,4,2,? ; 1*5 byte, nilai awal=4,4,4,2,?
C db 4 DUP(5) ; 1*4 byte, nilai awal='5'
D db 'HAI !!' ; 6 byte berisi 6 karakter
E dw ? ; 1 word tidak diketahui isinya
F dw ?,?,? ; 3 word tidak diketahui isinya
G dw 10 DUP(?) ;10 word tidak diketahui isinya
H dd ? ; 1 DoubleWord tanpa nilai awal
I DF ?,? ; 2 FarWord tanpa nilai awal
J DQ 0A12h ; 1 QuadWord, nilai awal='0A12'
K DT 25*80 ; 1 TenBytes, nilai awal='2000'
L Equ 666 ; Konstanta, L=666
M db '123' ; String '123'
N db '1','2','3' ; String '123'
O db 49,50,51 ; String '123'
Proses :
; proses tidak diisi apa-apa
;
;
End Tdata

Analisis :
Pada baris pertama("A DB 4") kita mendefinisikan sebanyak satu byte untuk
variabel dengan nama "A", variabel ini diberi nilai "4".
Pada baris kedua("B DB 4,4,4,2,?") kita mendefinisikan sebanyak 5 byte yang
berpasangan untuk variabel dengan nama "B". Tiga byte pertama pada variabel "B"
tersebut semuanya diberi nilai awal "4", byte ke empat diberi nilai awal 2 sedangkan
byte ke lima tidak diberi nilai awal.
Pada baris ketiga("C DB 4 DUP(5)") kita mendefinisikan sebanyak 4 byte data
yang diberi nilai awal "5" semuanya (DUP=Duplikasi). Jadi dengan perintah DUP kita
dapat mendefinisikan suatu Array.
Pada baris keempat("D DB 'HAI !! '") kita mendefinisikan suatu string 41
dengan DB. Untuk mendefinisikan string selanjutnya akan selalu kita pakai tipe data
DB. Bila kita mendefinisikan string dengan DW maka hanya 2 karakter yang dapat
dimasukkan, format penempatan dalam memorypun nantinya akan membalikkan angka
tersebut

11
Pada baris kelima("E DW ?") kita mendefinisikan suatu tipe data Word yang
tidak diberi nilai awal. Nilai yang terdapat pada variabel "E" ini bisa berupa apa saja,
kita tidak perduli.
Pada baris keduabelas("L EQU 666") kita mendefinisikan suatu konstanta
untuk variabel "L", jadi nilai pada "L" ini tidak dapat dirubah isinya.
Pada variabel M, N, O kita mendefinisikan suatu string "123" dalam
bentuk yang berbeda. Ketiganya akan disimpan oleh assembler dalam bentuk yang
sama, berupa angka 49, 50 dan 51.

2. Data Sebagai Program


;=====================================;
; PROGRAM : data1.ASM ;
; FUNGSI : MEMBUNYIKAN SPEAKER ;
;======================================
.Model Small
.Code
ORG 100h
Tdata:
db 0E4h,61h,24h,0FEh,0E6h,61h,0B9h,0D0h,7h,0BBh,9AH
db 2h,8BH,0D1h,51h,34h,2h,0E6h,61h,0D1h,0C3h,73h,6h
db 83h,0C1h,0h,0EBh,0BH,90h,52h,2BH,0D1h,87h,0D1h,5AH
db 81h,0C1h,34h,8h,0E2h,0FEh,59h,0E2h,0E2h,0CDh,20h

End Tdata
Analisis :
Tiap-tiap DB(Define Byte) diisi dengan bilangan-bilangan hexa, yaitu tiap-tiap bilangan
tersebut mewakili setiap suara yang ada. Dan setiap satu DB tersebut adalah program
yang tidak melompati daerah data, sehingga data akan dieksekusi sebagai intruksi.
Program ini telah diatur sedemikian rupa untuk membunyikan speaker, pada akhir data
diberi nilai CD20 yang merupakan bahasa mesin dari intruksi INT 20h.

12
3. Mengakses data berbeda tipe menggunakan Pointer
;=================================;
; PROGRAM : data2.ASM ;
; FUNGSI : MEMINDAHKAN DATA ;
;=================================;
.Model Small
.Code
ORG 100h
TData :
JMP Proses ; Lompat ke Proses
A dw 01EFh ; 2 Byte
B dw 02FEh ; 2 Byte
D dd ? ; 4 Byte
Proses:
MOV AL,BYTE PTR A ; AL=EF, AX=?EF
MOV AH,BYTE PTR A+1 ; AH=01, AX=01EF
MOV BX,B ; BX=02FE
MOV WORD PTR D,AX ; D=??01EF
MOV WORD PTR D+2,BX ; D=02FE01EF
INT 20h ; Kembali ke DOS
End TData
Analisis :
Pada awalnya kita mendefinisikan variabel "A" dan "B" dengan tipe data
word(16 bit) yang mempunyai nilai awal 01EF dan 02FE, serta variabel "C" dengan tipe
data DoubleWord(32 bit) yang tidak diinialisasi. MOV AL,BYTE PTR A MOV
AH,BYTE PTR A+1
Pada kedua perintah tersebut, kita memindahkan data dari variabel "A" ke register
AX dengan byte per byte. Perhatikanlah bahwa kita harus menyesuaikan pemindahan
data yang dilakukan dengan kemampuan daya tampungnya. Oleh sebab itu digunakan
"BYTE" PTR untuk memindahkan data 1 byte menuju register 8 bit, dengan demikian
untuk memindahkan data 16 bit harus digunakan "WORD" PTR.

Pada baris pertama kita memindahkan byte rendah dari variabel "A" (EF) menuju
register AL, kemudian pada baris kedua kita memindahkan byte tingginya(01) menuju
register AH. Lihatlah kita menggunakan "BYTE PTR A" untuk nilai byte rendah dan
"BYTE PTR+1" untuk byte tinggi dari variabel "A" dikarenakan penyimpanan data
dalam memory komputer yang menyimpan byte tinggi terlebih dahulu.
MOV BX,B

13
MOV WORD PTR D,AX MOV
WORD PTR D+2,BX
Pada bagian ini akan kita coba untuk memindahkan data dari 2 register 16 bit
menuju 1 variabel 32 bit. Pada baris pertama "MOV BX,B" tentunya tidak ada masalah
karena kedua operand mempunyai daya tampung yang sama. Pada baris kedua "MOV
WORD PTR D,AX" kita memindahkan nilai pada register AX untuk disimpan pada
variabel "D" sebagai word rendahnya.
Pada baris ketiga "MOV WORD PTR D+2,BX" kita masukkan nilai dari
register BX pada variabel "D" untuk word tingginya sehingga nilainya sekarang adalah
BX:AX=02FE01EF. Perhatikanlah pada baris ketiga kita melompati 2 byte(WORD
PTR+2) dari variabel "D" untuk menyimpan word tingginya.

4. Perkalian 2 bilangan 16bit


;================================;
; PROGRAM : ptr4.ASM ;
; FUNGSI : MENGALIKAN BILANGAN;
;================================;
.Model Small
.Code
ORG 100h
TData :
JMP Proses ; Lompat ke Proses
A dw 01EFh ; 2 Byte
B dw 02FEh ; 2 Byte
Hsl dd ? ; 4 Byte
Proses:
MOV AX,A ; AX=1EF
MUL B ; Kalikan 1FH*2FE
MOV WORD PTR Hsl,AX ; AX bernilai C922, Hsl=??C922
MOV WORD PTR Hsl+2,DX ; DX bernilai 0005, Hsl=0005C922
INT 20h ; Kembali ke DOS
End TData

Analisis :
Pada awalnya kita mendefinisikan variabel "A" dan "B" dengan tipe data word(16
bit) yang mempunyai nilai awal 01EF dan 02FE, serta variabel "Hsl" dengan tipe data
DoubleWord(32 bit) yang tidak diinialisasi.
MOV AX,A AX=1EF
Pada kedua perintah tersebut, kita memindahkan data dari variabel "A" ke register AX
secara sekalian.

14
MUL B
MOV WORD PTR Hsl,AX MOV
WORD PTR Hsl+2,DX

Pada bagian ini akan kita coba untuk memindahkan data dari 2 register 16 bit
menuju 1 variabel 32 bit. Pada baris pertama "MUL B" yaitu untuk mengalikan nilai
1FH+2FE. Pada baris kedua "MOV WORD PTR Hsl,AX" kita memindahkan nilai pada
register AX untuk disimpan pada variabel "Hsl" sebagai word rendahnya. Dan menjadi
Hsl=C922. Kemudian pada baris ketiga "MOV WORD PTR Hsl+2,BX" kita masukkan
nilai dari register DX pada variabel "Hsl" untuk word tingginya sehingga nilainya
sekarang adalah DX:AX=0005C922. Perhatikanlah pada baris ketiga kita melompati 2
byte(WORD PTR+2) dari variabel "Hsl" untuk menyimpan word tingginya.

Apakah gunanya pointer pada pemrograman bahasa mesin?


1. Untuk mengakses penyimpanan nilai pada satu variabel.
2. Untuk menyimpan hasil perkalian 16 bit didalam 1 variabel 32 bit.
3. Mengatur file yang besar dengan proses looping secara otomatis.
4. Menunjukkan suatu lokasi tertentu pada file.
5. Untuk menyimpan DW dari memori.

Mengapa DB dapat diakses sebagai program bukan sebagai data? Pada


kondisi apa hal ini dapat terjadi?
karena DB (Define Byte) adalah variabel 8 bit yg di gunakan untuk program. Pada
kondisi, bila kita tidak melompati daerah data ini maka proses akan melalui daerah data
ini. Data-data program akan dianggap oleh komputer sebagai suatu intruksi yang akan
dijalankan sehingga apapun mungkin bisa terjadi disana. Sebagai contohnya akan kita
buat sebuah program yang tidak melompati daerah data, sehingga data akan dieksekusi
sebagai intruksi.

15
KESIMPULAN

Pointer adalah sebuah variabel yang berisi alamat lain. Suatu pointer
dimaksudkan untuk menunjukan ke suatu alamat memori sehingga alamat dari suatu
variabel dapat diketahui dengan mudah. Operasi aritmatika pada Assembler merupakan
fungsi yang jelas dari implementasi operasi logik yang digunakan sehari-hari seperti
operasi penambahan yang diimplementasikan dengan :
DB dapat diakses sebagai program bukan sebagai data dan Pada kondisi apa hal ini
dapat terjadi Karena DB (Define Byte) adalah variabel 8 bit yg di gunakan untuk
program. Pada kondisi, bila kita tidak melompati daerah data ini maka proses akan
melalui daerah data ini. Data-data program akan dianggap oleh komputer sebagai suatu
intruksi yang akan dijalankan sehingga apapun mungkin bisa terjadi disana.

ADD, ADC, INC operasi pengurangan yang diimplementasi melalui perintah SUB,
SBB, DEC operasi perkalian yang diimpelentasikan dengan perintah MUL operasi
pembagian yang implementasinya adalah perintah DIV. Perintah dari operasi pointer ini
adalah TipeData PTR Operand.

Kegunaan pointer pada pemrograman bahasa mesin yaitu :


1. Untuk mengakses penyimpanan nilai pada satu variabel.
2. Untuk menyimpan hasil perkalian 16 bit didalam 1 variabel 32 bit.
3. Mengatur file yang besar dengan proses looping secara otomatis.

16

Anda mungkin juga menyukai