Isnani (Pointer)
Isnani (Pointer)
BAHASA ASSEMBLY
POINTER
Oleh :
Nama : Isnani
Nim : 1957301025
Kelas : TI 1C
Dosen Pembimbing : Azhar, S.T,.M.T.
Judul : Pointer
Nama : Isnani
NIM : 1957301025
Kelas : TI 1C
Tanggal praktikum :
Tanggal penyerahan :
Nilai :
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 :
8
Isi Register :
Isi Memory :
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
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.
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.
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.
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.
16