matina85 Δημοσ. 11 Νοεμβρίου 2005 Δημοσ. 11 Νοεμβρίου 2005 .data .globl askint .globl repint .globl mystring_1 .globl mystring_2 .globl mystring_3 .globl final_string askint: .asciiz "Please enter an expression :" string_1: .asciiz "ERROR!TRY AGAIN!" string_2: .asciiz "OVERFLOW" newline : .asciiz "\n" EXP_BUF: .space 128 mystring_2: .space 128 mystring_3: .space 128 final_string: .asciiz "The answer is :" .text main: li $s1,0 la $a0,EXP_BUF la $a1,mystring_2 la $a2,mystring_3 li $s6, 10 # Print the prompt li $v0, 4 # 4 is the code print string la $a0, askint # a0 is the string to be printed and gets the syscall # value from "variable" askint # Read in the string li $v0, 8 la $a0, EXP_BUF la $a1,128 syscall arithmos_1: jal arithmos arithmos_2: move $t8, $t0 move $t3, $s4 addi $a0, $a0, 1 jal arithmos arithmos: li $t0,1 #8etoume to flag=1 gia possitive toy 1ou ari8mou lb $t1,($a0) jal psifio la $a0, EXP_BUF lb $t1,($a0) #la $a0,EXP_BUF jal prosimo blt $t1,48,error #elegxos an ta stoixeia tou string einai '0' - '9' bgt $t1,57,error jal metatroph_A_to_B jal psifio lb $t1, ($a0) beq $t1, 43, telestis # + beq $t1, 45, telestis # - beq $t1, 42, telestis # * beq $t1, 47, telestis # / beq $t1, 10, calculate # \n j error psifio: lb $t1,($a0) beq $t1,43,end_psifio beq $t1,45,end_psifio beq $t1,42,end_psifio beq $t1,47,end_psifio beq $t1,10,end_psifio addi $a0,$a0,1 j psifio end_psifio: jr $ra prosimo: lb $t1, ($a0) bne $t1, 45, end_prosimo li $t1, -1 #t0=flag for negative addi $a0, $a0, 1 j prosimo end_prosimo: jr $ra telestis: lb $t6, ($a0) j arithmos_2 calculate: move $t3, $t0 move $t5, $s4 beq $t6, 43, addition # + beq $t6, 45, subtraction # - beq $t6, 42, multiply # * beq $t6, 47, division # / j error ############################################################# metatroph_A_to_B: li $s6, 10 li $s4,0 find_length: li $t2,0 # Sto $t2 apo8hkeuetai to length kai arxika to mhdenizoume la $a0,EXP_BUF lb $t3,($a0) # to $t3 exei to periexomeno tou prwtou stoixeiou tou mystring_1 length_counter: blt $t3,48,check_length #elegxos an ta stoixeia tou string einai '0' - '9' bgt $t3,57,check_length addi $a0,$a0,1 #kanoume pointer=pointer+1 addi $t2,$t2,1 #lenght=lenght+1 lb $t3,($a0) j length_counter check_length: la $a0,EXP_BUF bleu $t2,5,loop_metatrophs_A_to_B j overflow #Loop to Read the string in binary loop_metatrophs_A_to_B: beq $t2,0,go_psifio lb $t3,($a0) blt $t3,48,error #elegxos an ta 5 stoixeia tou string einai '0' - '9' bgt $t3,57,error addi $t3,$t3,-48 # (*s-'0') add $s4,$s4,$t3 # d=(d+(*s-'0')) #lb $t3,($a0) # $t3 einai o deikths s(*s) addi $a0,$a0,1 # s=(s+1) mulo $s4,$s4,$s6 # d=(d*10) addi $t2,$t2,-1 j loop_metatrophs_A_to_B go_psifio: jr $ra ######################################################################### addition: beq $t1,1,step_11 #$t1 flag gia prwto aritho li $s1,-1 mul $t2,$t2,$s1 #$t2 o prwtos arithos step_11: beq $t3,1,step_12 #$t3 flag gia deutero aritho li $s1,-1 mul $t4,$t4,$s1 #$t4 o deuteros arithos step_12: add $s4,$t4,$t2 j exit subtraction: beq $t1,1,step_21 #$t1 flag gia prwto aritho li $s1,-1 mul $t2,$t2,$s1 #$t2 afairetaios step_21: beq $t3,1,step_22 #$t3 flag gia deutero aritho li $s1,-1 mul $t4,$t4,$s1 #$t4 afaireths step_22: sub $s4,$t2,$t4 j exit #multiply: #division: ############################################# error: li $v0, 4 la $a0, string_1 #ektypwsh mhnumatos lathous syscall j exit2 overflow: li $v0,4 la $a0,string_2 syscall j exit2 exit: #Exit # Print the prompt li $v0, 4 # 4 is the code print string la $a0 ,final_string syscall li $v0, 1 # 1 is the code for print integer move $a0, $s4 # a0 receives integer to be printed syscall #typose nea grammi li $v0 , 4 la $a0 ,newline syscall exit2: li $v0, 10 syscall ################################# παραθετω ολο τον κωδικα σε περιπτωση που χρειαστει.το προγραμμα πρεπει να εκτελει προσθεση η αφαιρεση μεταξυ 2 πενταψηφιων το πολυ αριθμων απο ASCII σε binary καθως ο χρηστης του εισαγει string π.χ.5+8.Εχει προβλημα στο να διαβασει τον δευτερο αριθμο μετα τον τελεστη απο τη μνημη γιατι στο loop που τον διαβαζει(απ'οπου διαβαζει και τον πρωτο αριθμο) γινεται αρχικοποιηση του δεικτη να δειχνει στην αρχη του string γιατι αν δεν γινει δεν διαβαζει τον πρωτο. μπορει καποιος να με βοηθησει γιατι παιδευομαι μερες τωρα?Thanks
GCMH Δημοσ. 12 Νοεμβρίου 2005 Δημοσ. 12 Νοεμβρίου 2005 Επειδή ψάρωσαααα αρκετά...Τί είναι αυτό ;; ΜΗΠωΣ MIPS??????
GrMikeD Δημοσ. 12 Νοεμβρίου 2005 Δημοσ. 12 Νοεμβρίου 2005 Επειδή ψάρωσαααα αρκετά...Τί είναι αυτό ;; ΜΗΠωΣ MIPS?????? oxi, einai MOPS
GCMH Δημοσ. 12 Νοεμβρίου 2005 Δημοσ. 12 Νοεμβρίου 2005 Το είδα λίγο καλύτερα το θέμα και έχω μια πρόταση να κάνω.... Αφού λες οτι έχει πρόβλημα στο Loop που διαβάζει τον πρώτο αριθμό και πως κάνει αρχικοποίηση στην αρχή του string.... ΓΙΑΤΙ να μην αποθηκεύεις ας πούμε στον $a3 (που δεν χρησιμοποιείται πουθενά στο πρόγραμμα) τον Pointer όταν τελειώσει την ανάγνωση του πρώτου αριθμού και μετά να αρχικοποιείς απο αυτόν (τον $a3), όπου χρειάζεται. Για να μπορέσει να διαβάσει και τον πρώτο αριθμό θα πρέπει στην αρχή LI $a3,EXP_BUF , έτσι δεν είναι;;;!!
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.