#The C++ Program # #/*----------------------------------------------------------------------- # # Assignment #1 # # Program to convert numbers from one radix to another # # # Ashish Gupta # 98131 # CS212 # Group 3 #-------------------------------------------------------------------------*/ # # ##include ##include ##include # #void Print_Error(); # #void main() #{ # #int r1,r2; #char n1[34],n2[34]; #long middleman=0; # #//______________Get user input___________________ #cout << endl << endl <<"Please enter r1 :"; #cin >> r1; #if(r1<2 || r1>36) Print_Error(); #cout << endl << "Plese enter r2 :"; #cin >> r2; #if(r2<2 || r2>36) Print_Error(); # #cout << endl << "Please enter the number : "; #gets(n1); #cout << endl; # #//____________Converts number from r1 to binary ( middleman )_____ #int i=0,j; #while(n1[i]) #{ # j=-1; # if(n1[i]>=48 && n1[i]<=57) j=n1[i]-48; # else if(n1[i]>=65 && n1[i]<=90) j=n1[i]-65+10; # else if(j<0 || j>=r1) # { # cout << endl << "Error "; # exit(0); # } # middleman*=r1; # middleman+=j; # i++; #} # #//__________Convert middleman to base r2_______________ #i=33; #n2[i]=0; #i--; #do #{ # j=middleman % r2; # # if(j<10) n2[i]=j+48; # else n2[i]=j-10+65; # i--; #} while(middleman/=r2); #n2[i]=0; # #//___________________Print the result__________________ #cout << "Answer is : " << &n2[i+1]; # #} # #void Print_Error() #{ # cout << endl << "Error "; # exit(0); #} # #______________END OF C++ PROGRAM____________ #______________START OF ASSEMBLY PROGRAM_____ .data n1: .ascii "this is a buffer " n2: .ascii "this is a buffer " blank: .byte 10,0 m1: .asciiz "Please Enter the Radix 1: " m2: .asciiz "Please Enter the Radix 2: " m3: .asciiz "Please Enter the number in Radix 1: " m4: .asciiz "The answer is : " m5: .asciiz "Want to convert another number (y/n) ?" m6: .asciiz "Thank you for using this program :-)" error_message: .asciiz "Error in Input !!" w1: .asciiz "Welcome to the Radix Converter Program" w2: .asciiz "**************************************" #_________________START OF CODE______________ .text main: #___________Load addresses____________ addi $s5,$zero,0; la $s2,n1; la $s3,n2; #_____________Print Welcome Message______________ jal print_blank jal print_blank la $a0,w2 jal print_string jal print_blank la $a0,w1 jal print_string jal print_blank la $a0,w2 jal print_string jal print_blank jal print_blank #____________Start taking Input_____________ # _______________read r1 la $a0,m1 jal print_string li $v0,5 syscall move $s0,$v0 move $a0,$s0 jal check_for_radix # _______________read r2 la $a0,m2 jal print_string li $v0,5 syscall move $s1,$v0 move $a0,$s1 jal check_for_radix # _______________read n1 la $a0,m3 jal print_string li $v0,8 move $a0,$s2 li $a1,32 syscall # _________call rtob______ move $a0,$s0 move $a1,$s2 jal rtob move $s5,$v0 jal print_blank # _________call btor______ move $a0,$s5 move $a1,$s3 move $a2,$s1 jal btor #___________Print the answer___________ jal print_blank la $a0,m4 jal print_string #_______print the string move $a0,$v0 li $v0,4 syscall LOOP_AGAIN: #________________Loop Again________________ #______Print Message______ jal print_blank jal print_blank la $a0,m5 jal print_string # _______________read n1 li $v0,8 move $a0,$s2 li $a1,2 syscall #__________Check for y/Y__________ lb $t6,0($s2) addi $t7,$zero,89 beq $t6,$t7, START addi $t7,$zero,121 beq $t6,$t7, START la $a0,m1 li $v0,5 syscall j EXIT START: la $a0,m1 li $v0,5 syscall j main EXIT: #____________Exit________________ #______Print Goodbye Message______ jal print_blank jal print_blank la $a0,w2 jal print_string jal print_blank la $a0,m6 jal print_string jal print_blank la $a0,w2 jal print_string li $v0,10 #______Sycall for exit syscall #___________________________________________________________ #____________Start of rtob_________________________________ rtob: move $t2,$zero #______i=0___ addi $t3,$zero,10 #_______t3=10____ move $v0,$zero #_________middleman=0 L1: lb $t2,0($a1) #_______t2=int(each character) beq $t2,$t3,L5 #____if(n1[i]==10) end proc beqz $t2,L5 addi $t1,$zero,-1 #______j=-1 #_________if(n1[i]>=48 && n1[i]<=57) j=n1[i]-48; addi $t7,$zero,48 blt $t2,$t7,L2 addi $t7,$zero,57 bgt $t2,$t7,L2 addi $t1,$t2,-48; j L3 L2: #_________if(n1[i]>=65 && n1[i]<=90) j=n1[i]-55; addi $t7,$zero,65 blt $t2,$t7,L2_1 addi $t7,$zero,90 bgt $t2,$t7,L2_1 addi $t1,$t2,-55; j L3 L2_1: #_________if(n1[i]>=97 && n1[i]<=122) j=n1[i]-87; addi $t7,$zero,97 blt $t2,$t7,L3 addi $t7,$zero,122 bgt $t2,$t7,L3 addi $t1,$t2,-87; j L3 L3: #________if(j<0 || j>=r1) bltz $t1, T1 bge $t1,$a0,T1 j L4 T1: #___________Error handler for invalid input_________ #____________Print Error Message_______ jal print_blank la $a0,w2 jal print_string jal print_blank la $a0,error_message jal print_string jal print_blank la $a0,w2 jal print_string j LOOP_AGAIN L4: mul $v0,$v0,$a0 #______middleman*=r1; add $v0,$v0,$t1 #______middleman+=j; addi $a1,$a1,1 #____ i++; j L1 #________go back to while loop L5: jr $ra #___________________________________________________________ #____________Start of btor_________________________________ btor: addi $a1,$a1,32 #___________i=i+20 move $t7,$zero sb $t7,0($a1) #________________n2[i]=0 addi $a1,$a1,-1; #___________i--___________ L6: rem $t1,$a0,$a2 #________ j=middleman % r2; #___________if(j<10) n2[i]=j+48;_______ addi $t7,$zero,10 bge $t1,$t7,L7 addi $t7,$t1,48 sb $t7,0($a1) j L8 #__________else n2[i]=j-10+65; L7: addi $t7,$t1,55 sb $t7,0($a1) L8: addi $a1,$a1,-1 #____________i--; div $a0,$a0,$a2 bnez $a0,L6 #_________ while(middleman/=r2); #____________return addi $a1,$a1,1 move $v0,$a1 jr $ra print_blank: #______________Moves to the next line___________ move $t0,$a0 move $t1,$v0 la $a0,blank li $v0,4 syscall move $a0,$t0 move $v0,$t1 jr $ra #___________Prints a string_______________ #___________address in $a0_____________ print_string: addi $sp,$sp,-4 sw $v0,0($sp) li $v0,4 syscall lw $v0,0($sp) addi $sp,$sp,4 jr $ra #______________Check for validity of Radix values ( 1 < r < 37 ) check_for_radix: addi $t7,$zero,2 blt $a0,$t7,T1 addi $t7,$zero,36 bgt $a0,$t7,T1 jr $ra #____________________FINISHED__________________