Operasi: (A + (B – C) × D) / (E + F)
Buatlah program instruksi 0 alamat (0-address instructions) untuk operasi aritmetika tersebut.
Jawaban dan Penjelasan:
Untuk mempermudah perancangan program intruksi 0 alamat dari operasi aritmetika tersebut, kita dapat mengubahnya ke bentuk postfix terlebih dahulu, karena instruksi 0 alamat menggunakan pengalamatan “implisit“ yang mengandalkan stack.
Ekspresi (Infix): X = A+(B-C)*D/(E+F)
Konversi ke Postfix
(E: Ekspresi yang dibaca, S: Stack = [top...bottom], P: Postfix)
- E = (
S = [ ( ]
P = "" - E = A
S = [ ( ]
P = "A" - E = +
S = [ + ( ]
P = "A" - E = (
S = [ ( + ( ]
P = "A" - E = B
S = [ ( + ( ]
P = "AB" - E = -
S = [ - ( + ( ]
P = "AB" - E = C
S = [ - ( + ( ]
P = "ABC" - E = )
S = [ + ( ]
P = "ABC-" - E = *
S = [ * + ( ]
P = "ABC-" - E = D
S = [ * + ( ]
P = "ABC-D" - E = )
S = [ ]
P = "ABC-D*+" - E = /
S = [ / ]
P = "ABC-D*+" - E = (
S = [ ( / ]
P = "ABC-D*+" - E = E
S = [ ( / ]
P = "ABC-D*+E" - E = +
S = [ + ( / ]
P = "ABC-D*+E" - E = F
S = [ + ( / ]
P = "ABC-D*+EF" - E = )
S = [ / ]
P = "ABC-D*+EF+" - E = stop
S = [ ]
P = "ABC-D*+EF+/"
Notasi postfix: ABC-D*+EF+/
Program Instruksi 0-alamat
[tex]\begin{array}{lll}\sf\underline{Instruksi}&\sf\underline{Ket.}&\sf\underline{Stack}\\\tt PUSH&\tt A&\tt top=A\\\tt PUSH&\tt B&\tt top=B\\\tt PUSH&\tt C&\tt top=C\\\tt SUB&&\tt top=B-C\\\tt PUSH&\tt D&\tt top=D\\\tt MUL&&\tt top=(B-C)*D\\\tt ADD&&\tt top=A+(B-C)*D\\\tt PUSH&\tt E&\tt top=E\\\tt PUSH&\tt F&\tt top=F\\\tt ADD&&\tt top=E+F\\\tt DIV&&\tt top=(A+(B-C)*D)/(E+F)\\\tt POP&\tt X&\end{array}[/tex]
[answer.2.content]