Dengan menggunakan instruksi geser kiri, bit yang ada di paling kiri akan jatuh dan mengisi bit yang paling kanan dengan zero.
Dengan menggunakan intruksi rotate kiri, maka bit yang paling kiri akan mengisi ke bit paling kanan.
Pada gambar bisa diilustrasikan dari bit yang bernilai 10100111 kemudian dirotasi 1 langkah sehingga menjadi 01001111. Jika dirotasi sekali lagi maka nilainya akan menjadi 10011110. Tentu saja bit tadi hanyalah contoh jika digunakan pada register tentunya jumlah bitnya ada 32.
Begitu juga dengan rotasi kanan, cara yang sama juga berlaku.
Quest 14: Rotasikan pola bit berikut ini dua langkah ke kanan 10001100
Jawab: 00100011
Senin, 08 April 2013
Program Komplit
Program sudah selesai dan boleh kamu copy untuk dijalankan di komputermu. Ingat bahwa program ini membutuhkan pseudo instruksi dan load trap handler file.
Quest 13:
apa yang terjadi dengan $t1 jika instruksinya seperti ini
## rest.asm
##
## Total
restaurant bill calculator
##
## Register
Use:
##
## $s0 meal cost
## $s1 tip rate
## $s2 tax rate
## $s3 total rate
## $s4 tax+tip dollars
## $s5 total bill
.globl
main
# Get meal cost
main: li
$v0,4 # print prompt
la
$a0,prompt
syscall
li
$v0,5 # input meal cost
syscall
move
$s0,$v0 # save it in $s0
# Calculations
lw
$s1,tip # get tip rate
lw
$s2,tax # get tax rate
addu
$s3,$s1,$s2 # (tax + tip) in
percent
mul
$s4,$s0,$s3 # mealcost*(total
rate)
div
$s4,$s4,100 # mealcost*(total
rate)/100
addu
$s5,$s0,$s4 # total bill
# Output
li
$v0,4 # print string
la
$a0,head1 # "tax plus
tip"
syscall
move
$a0,$s4 # get tax+tip
li
$v0,1 # print integer
syscall #
li
$v0,4 # print string
la
$a0,head2 # "total
cost"
syscall
move
$a0,$s5 # get total
li
$v0,1 # print integer
syscall #
li
$v0,10 # exit
syscall
.data
tip: .word
15 # tip rate in percent
tax: .word
8 # tax rate in
percent
prompt:
.asciiz "Enter food cost: "
head1 :
.asciiz " Tax plus tip: "
head2 :
.asciiz "\n Total cost: "
Quest 13:
apa yang terjadi dengan $t1 jika instruksinya seperti ini
li $t0,0x12345678 sll $t1,$t0,8Jawab: 0x34567800
Mencetak Hasilnya
Bagian terakhir dari program adalah mencetak hasilnya ke layar monitor
Quest 12: fill in the blank
## Register Use:
##
## $s0 meal cost
## $s1 tip rate
## $s2 tax rate
## $s3 total rate
## $s4 tax+tip dollars
## $s5 total bill
# Output
$v0,4 # print string
$a0,head1 # "tax plus tip"
syscall
$a0,$s4 # get tax+tip
li $v0,1 # print integer
syscall #
$v0,4 # print string
$a0,head2 # "total cost"
syscall
$a0,$s5 # get total
$v0,1 # print integer
syscall #
li $v0,10 # exit
syscall
.data
tip: .word 15 # tip rate in percent
tax: .word 8 # tax rate in percent
prompt: .asciiz "Enter food cost: "
head1 : .asciiz " Tax plus tip: "
head2 : .asciiz "\n Total cost: "
Quest 12: fill in the blank
Bagian Penghitungan
Setelah membaca harga makanan, maka program selanjutnya bisa langsung melakukan perhitungan. Ini seperti melakukan semuanya langsung dalam sekali dan kemudian mencetak hasilnya
Quset 11: fill in the blank untuk menyempurnakan program
jawaban:
## rest.asm
##
## Total restaurant bill calculator
##
## Register Use:
##
## $s0 meal cost
## $s1 tip rate
## $s2 tax rate
## $s3 total rate
## $s4 tax+tip dollars
## $s5 total bill
.globl main
# Get meal cost
main:
$v0,4 # print a prompt (code 4 put in $v0)
$a0,prompt # address of prompt put in $a0
syscall
$v0,5 # input an integer (code 5 put in $v0)
syscall # 32-bit result returned in $v0
$s3,$v0 # save it in $s3
# Calculations
lw $s1, # get tip rate
lw $s2, # get tax rate
addu $s3,$s1,$s2 # total rate in percent
$s4,$s0,$s3 # mealcost*(total rate)
$s4,$s4,100 # mealcost*(total rate)/100
$s5,$s0,$s4 # total bill
. . . . .
.data
tip: .word 15 # tip rate in percent
tax: .word 8 # tax rate in percent
prompt: .asciiz "Enter food cost: "
head1 : .asciiz " Tax plus tip: "
head2 : .asciiz " Total cost: "
Quset 11: fill in the blank untuk menyempurnakan program
jawaban:
# Calculations
lw $s1,tip # get tip rate
lw $s2,tax # get tax rate
addu $s3,$s1,$s2 # total rate
mul $s4,$s0,$s3 # mealcost*(total rate)
div $s4,$s4,100 # mealcost*(total rate)/100
addu $s5,$s0,$s4 # total bill
Contoh Program
Tulislah sebuah program yang menghitung biaya total dengan parameter biaya + 8% pajak + 15%tips. Biaya awal adalah nilai yang diinputkan oleh user. Rate pajak dan tips harus tetap Berikut adalah contoh hasil outputnya:
Dan berikut adalah programnya:
Informasi yang hanya perlu diketahui oleh pelayan adalah biaya makanannya. Nilai ini akan diinputkan melalui keyboard dan dikonversi oleh exeption handler menjadi integer two complement. SPIM exeption handler menganggap bahwa service code ada di register $v0. Argumen dilewatkan maupun dikembalikan dari service menggunakan variase register, lihat appendix G.
Quest 10: dengan menggunakan stabilo, coba kamu tandai yang mana pseudo instruksi dari program di atas
Enter food cost: 25
Tax plus tip: 5
Total cost: 30
Dan berikut adalah programnya:
## rest.asm
##
## Total restaurant bill calculator
##
## Register Use:
##
## $s0 tip+tax
## $s1 tip rate
## $s2 tax rate
## $s3 meal cost
## $a0 tax+tip dollars
.globl main
# Get meal cost
main: li $v0,4 # print a prompt (code 4 put in $v0)
la $a0,prompt # address of prompt put in $a0
syscall
li $v0,5 # input an integer (code 5 put in $v0)
syscall # 32-bit result returned in $v0
move $s3,$v0 # save it in $s3
. . . . .
.data
tip: .word 15 # tip rate in percent
tax: .word 8 # tax rate in percent
prompt: .asciiz "Enter food cost: "
head1 : .asciiz " Tax plus tip: "
head2 : .asciiz " Total cost: "
Informasi yang hanya perlu diketahui oleh pelayan adalah biaya makanannya. Nilai ini akan diinputkan melalui keyboard dan dikonversi oleh exeption handler menjadi integer two complement. SPIM exeption handler menganggap bahwa service code ada di register $v0. Argumen dilewatkan maupun dikembalikan dari service menggunakan variase register, lihat appendix G.
Quest 10: dengan menggunakan stabilo, coba kamu tandai yang mana pseudo instruksi dari program di atas
remu (Pseudo instruksi)
Setelah devide integer 32bit, hasil baginya berada di lo dan sisa baginya berada di hi. Pseudo instruksi di bawah ini menggunakan beberapa basic instruksi untuk mengkomputasi bit sisa bagi.
Berikut adalah pseudo instruks yang menghitung nilai absolut sebuah integer.
Quest 9:
Berapa total yang harus diberikan oleh pelayan, jika tagihan adalah $25 pajaknya 8% dan tips 15%?
jawaban yang benar: total = 25 + (25*(8+15))/100 = 25 + (25*23)/100 = 25 + 575/100 = 30
remu d,s,t # divide $s by $t. Put the
# remainder in $d. Operands are
# unsigned.
# (pseudoinstruction)
Berikut adalah pseudo instruks yang menghitung nilai absolut sebuah integer.
Quest 9:
Berapa total yang harus diberikan oleh pelayan, jika tagihan adalah $25 pajaknya 8% dan tips 15%?
jawaban yang benar: total = 25 + (25*(8+15))/100 = 25 + (25*23)/100 = 25 + 575/100 = 30
Pseudo instruksi div dan divu
Extended assemble SPIM mempunyai intruksi
dan
div d,s,t # divide $s by $t. Put the
# quotient in $d. Operands are
# two's complement.
# (pseudoinstruction)
dan
divu d,s,t # divide $s by $t. Put the
# quotient in $d. Operands are
# unsigned.
# (pseudoinstruction)
Quest 8:
Apakah sisa bagi dari integer berguna?
jawab: yes
jawaban yang benar: tentu
Pseudo instruksi mul
Pseudo instruksi mul, membuat seakan-akan bahwa hasil dari perkalian adalah 32bit panjang.
Di sini dia tidak melakukan pengecekan overflow. Bit-bit hi tidak diperiksa maupun disimpan. Ada pseudo instruksi lain yang mengerjakan pengecekan hi maupun melakukan overflow, tapi kita tidak menggunakannya dulu untuk saat ini.
Begitu juga untuk instruksi pembagian. Instruksi basic div s,t dan divu s,t meletakkan hasil mereka ke dalam register hi dan lo. Hasil bagi diletakkan ke register lo, dan sisa bagi diletakkan ke register hi. Untuk mengeluarkan hasilnya ini menggunakan mflo dan mfhi.
mul d,s,t # multiply $s by $t. put the
# result in $d
# (pseudoinstruction)
Di sini dia tidak melakukan pengecekan overflow. Bit-bit hi tidak diperiksa maupun disimpan. Ada pseudo instruksi lain yang mengerjakan pengecekan hi maupun melakukan overflow, tapi kita tidak menggunakannya dulu untuk saat ini.
Begitu juga untuk instruksi pembagian. Instruksi basic div s,t dan divu s,t meletakkan hasil mereka ke dalam register hi dan lo. Hasil bagi diletakkan ke register lo, dan sisa bagi diletakkan ke register hi. Untuk mengeluarkan hasilnya ini menggunakan mflo dan mfhi.
QUESTION 7:
Perkalian
Instruksi mult dan multu seperti yang telah kamu ketahui, meletakkan hasil perkaliannya ke dalam register hi dan lo, hasilnya baru bisa dikeluarkan menggunakan instruksi mfhi dan mflo.
Ketiga operand yang ada di pseudo instruksi mul d,s,t menggunakan instruksi basic mflo jika hasil dari perkalian adalah sesuai 32bit panjang.
Quest 6:
Selesaikan terjemahan
(gunakan nama menemonik)
Ketiga operand yang ada di pseudo instruksi mul d,s,t menggunakan instruksi basic mflo jika hasil dari perkalian adalah sesuai 32bit panjang.
Quest 6:
Selesaikan terjemahan
(gunakan nama menemonik)
Subtraksi (pengurangan)
Instruksi li adalah pseudo instruksi. Assembler extended akan menerjemahkannya mennjadi basic instruksi.
Ada juga di assembler extended intruksi pengurangan, subu d,s,x yang mana operandnya bisa berupa register, 16bit atau 32bit. instruksi akan subu d,s,x diterjemahkan menjadi pseudo instruksi addu d,s,-x (yang kemudian baru diterjemahkan menjadi basic instruksi)
Instruksi negu d,s berfungsi untuk menegatifkan nilai yang ada di register s kemudian menyimpannya menuju register d
Quest 5:
Ada juga di assembler extended intruksi pengurangan, subu d,s,x yang mana operandnya bisa berupa register, 16bit atau 32bit. instruksi akan subu d,s,x diterjemahkan menjadi pseudo instruksi addu d,s,-x (yang kemudian baru diterjemahkan menjadi basic instruksi)
Instruksi negu d,s berfungsi untuk menegatifkan nilai yang ada di register s kemudian menyimpannya menuju register d
negu d,s # d = -s
# (pseudoinstruction)
Quest 5:
Terjemahkan instruksi ini
negu $v2,$s3
menjadi basic instruksi
sub ,$0,
Pseudo Instruksi Aritmetik
Jika tidak menggunakan assembler extended, ada dua buah instruksi addu d,s,t yang mana d, s, dan t adalah register. Kemudian ada juga addiu d,s,imm yang mana imm adalah immediate operand.
Jika menggunakan assembler extended maka instruksi addu d,s,x akan diterjemahkan menjadi basic instruksi yang berbeda bergantung dari x yang dimaksud. x bisa saja sebuah register, immediate 16bit atau immediate 32bit.
Cermati contoh berikut ini (untuk assembler extended):
Quest 4: terjemahkan berikut ini
Jika menggunakan assembler extended maka instruksi addu d,s,x akan diterjemahkan menjadi basic instruksi yang berbeda bergantung dari x yang dimaksud. x bisa saja sebuah register, immediate 16bit atau immediate 32bit.
Cermati contoh berikut ini (untuk assembler extended):
addu $t0,$s0,40000Nilai desimal 40000 tidak muat jika direpresentasikan sebagai 16bit (secara jangkauan integer 16bit adalah -32768 sampai +32767). Jadi instruksi di atas tidak bisa memakai terjemahan addiu instruksi basic. dua instruksi musti digunakan yaitu sebagai meload integer ke register temporer dan kemudian menjumlahkannya sebagai operand register.
Quest 4: terjemahkan berikut ini
Immediate Operand Implicit
Beberapa pseudo instruksi diterjemahkan menjadi berbeda bergantung dengan jenis operandnya. Pseudo instruksi yang menggunakan operand immediate akan diterjemahkan secara berbeda dengan pseudo instruksi yang menggunakan operand register.
Kadang kala mnemonik yang sama digunakan baik sebagai pseudo instruksi atau basic instruksi. sebagai contoh, kamu bisa menggunakan instruksi or untuk digunakan sebagai or dengan immediate operand atau or dengan operand register.
or $s0,$s1,0x00ff translates into: ori $s0,$s1,0x00ff
Di sini, extended assembler akan memperhatikan bahwa operand yang dipakai adalah operand immediate, maka dia menerjemahkannya ke dalam instruksi ori basic. Hasil dari terjemahannya adalah 32 bit instruksi ori. Bagaimanapun di bawah ini adalah basic instruksi:
Instruksi basic di atas tidaklah berubah, karena dia merupakan instruksi basic asli.
Mnemonik and juga sama, dia bisa disebut sebagai and biasa atau andi atau basic instruksi yang lain benrgantung dengan operandnya.
Quest 3: Apakah ada dua instuksi basic baik add atau addi?
jawab: ya
jawaban yang benar: yes
Kadang kala mnemonik yang sama digunakan baik sebagai pseudo instruksi atau basic instruksi. sebagai contoh, kamu bisa menggunakan instruksi or untuk digunakan sebagai or dengan immediate operand atau or dengan operand register.
or $s0,$s1,0x00ff translates into: ori $s0,$s1,0x00ff
Di sini, extended assembler akan memperhatikan bahwa operand yang dipakai adalah operand immediate, maka dia menerjemahkannya ke dalam instruksi ori basic. Hasil dari terjemahannya adalah 32 bit instruksi ori. Bagaimanapun di bawah ini adalah basic instruksi:
or $s0,$s1,$t1
Instruksi basic di atas tidaklah berubah, karena dia merupakan instruksi basic asli.
Mnemonik and juga sama, dia bisa disebut sebagai and biasa atau andi atau basic instruksi yang lain benrgantung dengan operandnya.
Quest 3: Apakah ada dua instuksi basic baik add atau addi?
jawab: ya
jawaban yang benar: yes
Langganan:
Komentar (Atom)
