تنفيذ عدد صحيح لإضافة النقطة العائمة في MIPS [مغلق]

StackOverflow https://stackoverflow.com//questions/23031018

  •  21-12-2019
  •  | 
  •  

سؤال

الخلاصة هدفك لهذا المشروع هو تنفيذ محاكاة البرمجيات لإضافة النقطة العائمة لأرقام النقاط العائمة 32 بت (الدقة الفردية) في MIPs.

الإدخال/الإخراج سوف يطالب البرنامج المستخدم برقمين نقطتين عائم.بعد ذلك سيحسب ويعرض المبلغ.فيما يلي مثال I/O من أربعة أشواط (تحتاج فقط إلى المطالبة مرة واحدة لكل عملية تنفيذ):

أدخل قيمة الفاصلة العائمة:1 أدخل قيمة نقطة عائمة:1 2.0000000000000000

أدخل قيمة الفاصلة العائمة:2.2 أدخل قيمة الفاصلة العائمة:1.4 3.599999904632568400

قضايا حل هنا بعض القضايا: كيف ستتعامل مع القيم السلبية؟ كيف ستعمل خوارزمية التطبيع الخاصة بك؟ ما هي أسهل طريقة للوصول إلى حقول البت داخل الكلمة؟

*لا يجوز لك استخدام أي تعليمات الفاصلة العائمة لهذا المشروع !!*

لقد فعلت الشيء نفسه في الأعداد الصحيحة ولكني بحاجة إلى بعض المساعدة في النقطة العائمة دون استخدامها!.Data ST1:.asciiz " nin binary: n" st2:.asciiz " nenter 1st integer:" ST3:.asciiz " nenter 2nd integer:" ST4:.asciiz " إجابتك هي:"ST5:.asciiz " n ---------------------------------- n" st6:.اسكيز " "

.text

main: 

مطالبة المستخدم بإدخال العدد الصحيح الأول

la $a0,st2 # Put the address of the string in $a0   
li $v0, 4
syscall
li $v0, 5  # Code for input integer
syscall
move $s1, $v0 #storing first integer in s1

مطالبة المستخدم بإدخال العدد الصحيح الأول

la $a0,st3 # Put the address of the string in $a0
 li $v0, 4
syscall
li $v0, 5  # Code for input integer
syscall
move $s2, $v0 #storing second integer in s2

إضافة الأعداد الصحيحة

add $s0,$s2,$s1 #add and store in t3

عرض النتيجة

la $a0,st4 #text to display 
li $v0,4
syscall  
li $v0,1     #for printing int
 move $a0,$s0 # move s0 to a0 to print s0
syscall
la $a0,st1
li $v0,4
syscall

التحرك في السجلات المؤقتة

move $t3,$s0   
move $t2,$s2
move $t1,$s1

عداد للرقم الأول المراد طباعته بالنظام الثنائي

li $s5,32       # set up counter
loop1: 
    rol  $t1,$t1,1   #roll the bit left by on bit high to low
    and  $t0,$t1,1   #mask off low bit
    add  $t0,$t0,48  #combine t0 with 48 to form 1 or 0
    move $a0,$t0     #output ascii character
    li   $v0,11
    syscall
    li $t5,1
    sub $s5,$s5,$t5  #decrement counter
    bne $s5,$zero,loop1 #keep loop if not zero

طباعة خط

la $a0,st6  
li $v0,4
syscall  

عداد للرقم الثاني في ثنائي

li $s5,32     
loop2: 
    rol  $t2,$t2,1   #roll the bit left by on bit high to low
    and  $t0,$t2,1   #mask off low bit
    add  $t0,$t0,48  #combine t0 with 48 to form 1 or 0
    move $a0,$t0     #output ascii character
    li   $v0,11
    syscall
    li $t5,1
    sub $s5,$s5,$t5  #decrement counter
    bne $s5,$zero,loop2 #keep loop if not zero

طباعة خط منقط

la $a0,st5 #line 
li $v0,4
syscall  

عداد للنتيجة في ثنائي

li $s5,32       
loop: 
    rol  $t3,$t3,1   #roll the bit left by on bit high to low
    and  $t0,$t3,1   #mask off low bit
    add  $t0,$t0,48  #combine t0 with 48 to form 1 or 0
    move $a0,$t0     #output ascii character
    li   $v0,11
    syscall
    li $t5,1
    sub $s5,$s5,$t5  #decrement counter
    bne $s5,$zero,loop #keep loop if not zero

أغلق البرنامج

li $v0,10 #close the program
syscall

.النهاية الرئيسية

هل كانت مفيدة؟

المحلول

1- استخدم IEEE 754 لتمثيل أرقام نقاط العائمة 2- إضافة ما يصل إلى الأسس ، ثم أضف ما يصل إلى الأهمية ، تحقق مما إذا كنت بحاجة إلى زيادة الأسس 3- التعامل مع العلامات السلبية (مكملة 2 ، بت واحد واحد يمثل علامة الأولى)

هذه مشكلة سهلة للغاية وأنا أتفق مع التعليقات المذكورة أعلاه ، لقد اعتقدت فقط أنه يمكنك استخدام بعض التلميحات الجيدة حظًا سعيدًا!

نصائح أخرى

.data
st1: .asciiz "\nIn binary:\n"
st2: .asciiz "\nEnter 1st Integer:"
st3: .asciiz "\nEnter 2nd Integer:"
st4: .asciiz "\nYour answer is: "
st5: .asciiz "\n--------------------------------\n"
st6: .asciiz "\n"

.text

main: 

مطالبة المستخدم بإدخال العدد الصحيح الأول

la $a0,st2 # Put the address of the string in $a0   
li $v0, 4
syscall
li $v0, 5  # Code for input integer
syscall
move $s1, $v0 #storing first integer in s1

مطالبة المستخدم بإدخال العدد الصحيح الأول

la $a0,st3 # Put the address of the string in $a0
 li $v0, 4
syscall
li $v0, 5  # Code for input integer
syscall
move $s2, $v0 #storing second integer in s2

إضافة الأعداد الصحيحة

add $s0,$s2,$s1 #add and store in t3

عرض النتيجة

la $a0,st4 #text to display 
li $v0,4
syscall  
li $v0,1     #for printing int
 move $a0,$s0 # move s0 to a0 to print s0
syscall
la $a0,st1
li $v0,4
syscall

التحرك في السجلات المؤقتة

move $t3,$s0   
move $t2,$s2
move $t1,$s1

عداد للرقم الأول المراد طباعته بالنظام الثنائي

li $s5,32       # set up counter
loop1: 
    rol  $t1,$t1,1   #roll the bit left by on bit high to low
    and  $t0,$t1,1   #mask off low bit
    add  $t0,$t0,48  #combine t0 with 48 to form 1 or 0
    move $a0,$t0     #output ascii character
    li   $v0,11
    syscall
    li $t5,1
    sub $s5,$s5,$t5  #decrement counter
    bne $s5,$zero,loop1 #keep loop if not zero

طباعة خط

la $a0,st6  
li $v0,4
syscall  

عداد للرقم الثاني في ثنائي

li $s5,32     
loop2: 
    rol  $t2,$t2,1   #roll the bit left by on bit high to low
    and  $t0,$t2,1   #mask off low bit
    add  $t0,$t0,48  #combine t0 with 48 to form 1 or 0
    move $a0,$t0     #output ascii character
    li   $v0,11
    syscall
    li $t5,1
    sub $s5,$s5,$t5  #decrement counter
    bne $s5,$zero,loop2 #keep loop if not zero

طباعة خط منقط

la $a0,st5 #line 
li $v0,4
syscall  

عداد للنتيجة في ثنائي

li $s5,32       
loop: 
    rol  $t3,$t3,1   #roll the bit left by on bit high to low
    and  $t0,$t3,1   #mask off low bit
    add  $t0,$t0,48  #combine t0 with 48 to form 1 or 0
    move $a0,$t0     #output ascii character
    li   $v0,11
    syscall
    li $t5,1
    sub $s5,$s5,$t5  #decrement counter
    bne $s5,$zero,loop #keep loop if not zero

أغلق البرنامج

li $v0,10 #close the program
syscall

.النهاية الرئيسية

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top