Yes. The other conversion instruction (cvt.w.s
) would be needed.
## caffeine.asm ## ## Input the weight of an individual in pounds. ## Output the number of cans of Energy Drink that ## would kill them 50% of the time. .text .globl main main: li $v0,4 # prompt for individual's la $a0,prompt # weight syscall li $v0,6 # read weight (in lbs) syscall # $f0 = weight (float) # convert weight to kg l.s $f2,kgperlb # kg per lb mul.s $f4,$f2,$f0 # $f4 == kg # calc LD50 for this weight l.s $f2,ld50 # LD50 per kg mul.s $f6,$f4,$f2 # $f6 = LD50 in mg for this weight # calc LD50 in cans l.s $f8,mgCan # get mg per can div.s $f6,$f6,$f8 # $f6 = (LD50 for this weight)/(mg per can) la $a0,cans # print output title li $v0,4 syscall cvt.w.s $f8,$f6 # convert cans to integer (truncate result) mfc1 $a0,$f8 # move integer into $a0 li $v0,1 # print integer syscall la $a0,newln # end the line li $v0,4 syscall li $v0,10 # halt syscall .data kgperlb: .float 0.453592 # kg per lb ld50: .float 200.0 # ld50 in mg per kg of human mgCan: .float 160.0 # mg caffeine per can prompt: .asciiz "Your weight in pounds: " cans: .asciiz "LD50 Cans: " newln: .asciiz "\n"
This program inputs the weight of an individual in pounds and outputs the number of cans of Energy Drink that would kill them 50% of the time.
The LD50 is the amount of a substance that will kill an individual 50% of the time. The LD50 of caffeine is 200 mg (200 milligrams) per kilogram of weight. A can of Energy Drink has 160 mg of caffeine per can.
The cvt.w.s
instruction truncates the floating point number of cans to an integer.
This makes the output nicer. Except for that, the entire program could have been written with floating point.
It could also have been written entirely with integers by using a scale factor.
What is your LD50 for assembly language?