Anda di halaman 1dari 5

Proyek akhir Pemrograman Assembly

Menghitung volume object 3D

Penggunaan instruksi untuk menghitung suatu nilai yaitu instruksi add, sub, mul, dan div.
Instruksi tersebut bisa diartikan add untuk penjumlahaan, sub untuk pengurangan, mul untuk
perkalian dan div untuk pembagian.

Berikut adalah beberapa kerangka potongan kode assembly (pseudo-assembly) untuk menghitung
volume bangun ruang atau object 3D.

1. Kubus
v=s×s×s

Contoh menghitung volume kubus :

mov ax,sisi ; simpan nilai sisi di register ax

mul ax  
mul ax
mul ax ; sisi * sisi * sisi

Contoh diatas menghitung volume kubus, untuk melakukan implementasi rumus tersebut bisa
dengan menggunakan instruksi mul.

2. Balok

v= p×l×t

Contoh menghitung volume balok :

mov   ax,panjang ; simpan nilai panjang di register ax


mov bx,lebar ; simpan nilai lebar di register bx
mov cx,tinggi ; simpan nilai tinggi di register cx

mul bx ; panjang * lebar
mul cx ; lebar * tinggi

Contoh diatas menghitung volume balok, untuk melakukan implementasi rumus tersebut bisa
dengan menggunakan instruksi mul.

Untuk menghitung volume seperti tabung, kerucut, bola, dsb, angka yang bisa digunakan adalah
tipe float dan double artinya bilangan yang ber-koma, maka dari itu dibutuhkan register FPU
(Floating Point) yang mungkin belum familiar, mungkin disini saya akan memberikan sedikit
gambaran dan contoh penggunaan register FPU ini.
X86 Assembly/Floating Point1

FPU Register Stack

FPU memiliki 8 register, dari st0 ke st7  dibentuk menjadi stack/tumpukan. Angka di- push ke
tumpukan dari memori, dan di- pop kembali dari tumpukan ke memori. Instruksi FPU umumnya
kan mengeluarkan dua item pertama dari tumpukan, menindaklanjutinya, dan mendorong
jawabannya kembali ke atas tumpukan.

Angka dengan tipe float umumnya bisa panjang 32-bit (tipe C “float”), atau panjang 64-bit (tipe
C “double”). Namun, untuk mengurangi kesahalan pembulatan, register stack FPU memiliki
lebar 80 bit.

Kebanyakan konvensi pemanggilan atau yang biasa disebut calling convention mengembalikan
nilai floating point dalam register st0.

3. Tabung
v=π×r×r×T

Contoh menghitung volume tabung :

fldpi ; st0 = 3.14

fld qword [ruas] ; st0 = 5 , st1 = 3.14


fmul st0,st0 ; st0 * st0 = 25
fmul st1,st0 ; st0 = 25 , st1 = 3.14
; st1 * st0 = 78
fld st1 ; st1 = 25 , st0 = 78
fld qword [tinggi] ; st0 = 4 , st1 = 78
fmul st1,st0 ; st1 * st0 = 314 
                 ; st1 = 314

Contoh diatas menghitung volume tabung, untuk melakukan implementasi rumus tersebut bisa
dengan menggunakan instruksi fmul dan fld. 

1 X86 Assembly Floating Point https://en.wikibooks.org/wiki/X86_Assembly/Floating_Point


4. Limas Persegi
1
v= ×s×s×t
3

Contoh menghitung volume limas persegi :

fld qword [tiga] ; st0 = 0.33333


fst  st1 ; st0 = 0.33333 , st1 = 0.33333

fld  qword [sisi] ; st0 = 14 , st1 = 0.33333


fmul  st0,st0 ; st0 * st0 = 196
; st0 = 196 , st1 = 0.33333
fmul  st0,st1 ; st0 * st1 = 588
; st0 = 588
fst  st1 ; st0 = 588 , st1 = 588
fld  qword [tinggi] ; st0 = 2 , st1 = 588
fmul  st1,st0 ; st1 * st0 = 1176
; st1 = 1176

Contoh diatas menghitung volume limas persegi, untuk melakukan implementasi rumus tersebut
bisa dengan menggunakan instruksi fmul, fstp, fst dan fld.

5. Limas Segitiga

1 1
v= ×( ×a×b×t )
3 2

v=(a×t /2)/3×T

Contoh menghitung volume limas segitiga :

fld qword [alas]         ; st0 = 14


fst st0                  ; st0 = 14 , st1 = 14
fld qword [tinggi]       ; st0 = 5 , st1 = 14
fmul st1,st0              ; st1 * st0 = 70
   ; st1 = 70
fstp st0                  ; pop nilai st1 , st0 = 70

fld qword [dua]          ; st0 = 2 , st1 = 70


fdiv st1,st0               ; st1 / st0 = 35
                           ; st1 = 35
fstp st0                   ; pop nilai st1 , st0 = 35

fld qword [tiga]         ; st0 = 3 , st1 = 35


fdiv st1,st0              ; st1 / st0 = 11
                           ; st1 = 11
fstp st0                   ; pop nilai st1, st0 = 11

fld qword [Tinggi]        ; st0 = 2 , st1 = 11


fmul st1,st0               ; st1 * st0 = 22
                           ; st1 = 22
Contoh diatas menghitung volume limas segitiga, untuk melakukan implementasi rumus tersebut
bisa dengan menggunakan instruksi fmul, fstp, fst, fdiv dan fld.

6. Prisma Segitiga

1
v= ×a×b×t
2

Contoh menghitung volume prisma segitiga :

fld qword [setengah] ; st0 = 0.5


fst st0               ; st0 = 0.5 , st1 = 0.5
fld qword [a]        ; st0 = 5 , st1 = 0.5
fmul st1,st0           ; st1 * st0 = 2.5
                        ; st1 = 2.5
fstp st0               ; pop nilai st1 , st0 = 2.5
fld qword [b]         ; st0 = 5.0 , st1 = 2.5
fmul st1,st0           ; st1 * st0 = 12.5
                       ; st1 = 12.5
fstp st0        ; pop nilai st1, st0 = 12.5 , st1 = 0
fld qword [t]    ; st0 = 10 , st1 = 12.5
fmul st1,st0         ; st1 * st0 = 125
                       ; st1 = 125

Contoh diatas menghitung volume prisma segitiga, untuk melakukan implementasi rumus tersebut
bisa dengan menggunakan instruksi fmul, fstp, fst dan fld.

7. Kerucut

1
v= ×r×r×t
3

Contoh menghitung volume kerucut :

fld qword [tiga]   ; st0 = 0.33333


fst st0               ; st0 = 0 , st1 = 0.33333
fld qword [ruas]     ; st0 = 5 , st1 = 0.33333
fmul st0, st0         ; st0 * st0 = 25
fmul st1, st0       ; st0 = 25 , st1 = 0.33333
                         ; st1 * st0 = 8.33325
fld st1              ; st0 = 25 , st1 = 8.33325
fld qword [tinggi]   ; st0 = 4 , st1 = 8.33325
fmul st1, st0          ; st1 * st0 = 33.333
                        ; st1 = 33.333

Contoh diatas menghitung volume kerucut, untuk melakukan implementasi rumus tersebut bisa
dengan menggunakan instruksi fmul dan fld.
8. Bola
4
v= ×π×r×r×r
3
Contoh menghitung volume bola :

fld qword [tiga] ; st0 = 1.33333


fst st0        ; st0 = 1.33333 , st1 = 0
fldpi              ; st0 = 3.14 , st1 = 1.33333
fmul  st1,st0            ; st1 * st0 = 4.1887
                    ; st1 = 4.1887
fstp st0                ; pop nilai st1, st0 = 4.1887 , st1 = 0
fld qword [jari]    ; st0 = 4 , st1 = 4.1887
fmul st1,st0            ; st1 * st0 = 16.755
                      ; st1 = 16.755
fstp st0                ; pop nilai st1, st0 = 16.755 , st1 = 0
fld qword [jari]     ; st0 = 4 , st1 = 16.755
fmul st1,st0            ; st1 * st0 = 67.020
                      ; st1 = 67.020
fstp st0                ; pop nilai st1, st0 = 67.020 , st1 = 0
fld qword [jari]  ; st0 = 4 , st1 = 67.020
fmul st1,st0            ; st1 * st0 = 268.081
                      ; st1 = 268.081

Contoh diatas menghitung volume bola, untuk melakukan implementasi rumus tersebut bisa
dengan menggunakan instruksi fmul, fstp, fst dan fld

2019 – Febriyanto Nugroho

Anda mungkin juga menyukai