Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 20
  1. #1
    Utente di HTML.it L'avatar di Fabiuz
    Registrato dal
    Nov 2004
    Messaggi
    892

    [assembly MIPS] Aprire thread !

    Salve a tutti !

    Posso aprire un thread riguardante questo argomento o non č possibile?

    Grazie in anticipo per la risposta!
    Debian Sarge 3.01a
    Slackware 10.2

  2. #2
    Utente di HTML.it L'avatar di Fabiuz
    Registrato dal
    Nov 2004
    Messaggi
    892
    in particolare sarebbe assembly MIPS !!!
    bhe intanto spiego cosa devo fare, casomai qualcuno mi risponda...........

    devo fare una procedura che trova i num dispari in un vettore (io l'ho pensata cosi ma non funge):

    dispari:
    addi $t0,$t0,2
    div $s0,$t0
    mfhi $t1
    bne $t1, $zero,diversi
    jr $ra

    diversi:
    addi $s1,$s1,1
    jr $ra

    dove sbaglio?
    Debian Sarge 3.01a
    Slackware 10.2

  3. #3
    Il MIPS non lo conosco, ma avendo studiato almeno quattro assembly diversi, forse riesco a capirci qualcosa...
    Commento il codice, tu dimmi se ho capito giusto.

    codice:
    dispari:
    addi $t0,$t0,2    #aggiungi 2 al registro to
    div $s0,$t0       #dividi s0 per t0
    mfhi $t1          #sposta il resto nel registro t1
    bne $t1, $zero,diversi    #cosa e' $zero?
    jr $ra            #sicuro che cosi' non esca dalla procedura? (RA= Return Address?)
    
    diversi:
    addi $s1,$s1,1
    jr $ra
    Cmq e' crudele obbligare una persona a usare un assembly RISC... ^__^
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  4. #4
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    ma in %t0 potrebbe esserci un numero
    prova addi $t0, $zero, 2

  5. #5
    Utente di HTML.it L'avatar di Fabiuz
    Registrato dal
    Nov 2004
    Messaggi
    892
    Posto il programma intero!
    #Dato 1 array calcola quanti sono gli elementi dispari

    .data
    array: .word 3,7,2,4,8
    annuncio: .asciiz "Il risultato e' "

    .text
    main:
    addi $sp,$sp,-4 # PUSH(ra)
    sw $ra,0($sp) #
    add $s0,$zero,$zero #pone s0=0
    add $s2,$zero,$zero #pone s2=0
    addi $v0,$zero,1 #pone v0=1
    la $a0,array #a0 e' l'inizio dell'array

    ciclo:
    lw $s0,0($a0)
    jal pariodispari
    add $s2,$s2,$s1 #somma s1 a s2 $v1,$v0,5 #v0 e' minore di 5?
    beq $v1,$zero,esci
    addi $v0,$v0,1
    addi $a0,$a0,4
    j ciclo # continua il ciclo

    esci:
    addi $v0,$zero,4 #codice stampa stringa
    la $a0,annuncio #stringa
    syscall #stampa
    addi $v0,$zero,1 #codice stampa intero
    add $a0,$zero,$s2 #metti s2 in a0
    syscall #stampa
    lw $ra,0($sp) #POP (in ra)
    addi $sp,$sp,4 #
    jr $ra #fine


    pariodispari:
    addi $3,$3,2
    div $s0,$s3
    mfhi $s4
    bne $s4,$zero,diversi
    jr $ra #fine procedura

    diversi:
    addi $s1,$zero,1
    jr $ra #fine procedura
    Debian Sarge 3.01a
    Slackware 10.2

  6. #6
    Ah, ecco, non era un ciclo... ^__^
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  7. #7
    Utente di HTML.it L'avatar di Fabiuz
    Registrato dal
    Nov 2004
    Messaggi
    892
    sai dirmi dove sbaglio?
    Debian Sarge 3.01a
    Slackware 10.2

  8. #8
    Che risultato ti restituisce, sempre che restituisca qualcosa?
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  9. #9
    Utente di HTML.it L'avatar di Fabiuz
    Registrato dal
    Nov 2004
    Messaggi
    892
    praticamente adesso ho messo a posto tranne che fa la cosa contraria: mi restituisce il numero dei pari invece che dei dispari! Buuuahhahah!
    Debian Sarge 3.01a
    Slackware 10.2

  10. #10
    Utente di HTML.it L'avatar di Fabiuz
    Registrato dal
    Nov 2004
    Messaggi
    892
    posto il codice (in cui ho cambiato l'array e ho messo un solo num dispari):

    # Programma che dato un array
    # calcola quanti sono gli elementi dispari

    .data

    array: .word 1,24,32,2,4
    annuncio: .asciiz "Il risultato e' "

    .text
    main:
    addi $sp,$sp,-4 # PUSH(ra)
    sw $ra,0($sp) #
    add $s0,$zero,$zero #pone s0=0
    add $s2,$zero,$zero #pone s2=0
    addi $v0,$zero,1 #pone v0=1
    la $a0,array #a0 e' l'inizio dell'array

    ciclo:
    lw $s0,0($a0) #s0= un elemento dell'array
    jal pariodispari #chiama la procedura pariodispari
    add $s2,$s2,$s1 #somma s1 a s2
    slti $v1,$v0,5 #v0 e' minore di 5?
    beq $v1,$zero,esci #se cosi' non e', esci
    addi $v0,$v0,1
    addi $a0,$a0,4
    j ciclo

    esci:
    addi $v0,$zero,4
    la $a0,annuncio #stringa
    syscall #stampa
    addi $v0,$zero,1 #codice stampa intero
    add $a0,$zero,$s2 #metti s2 in a0
    syscall #stampa
    lw $ra,0($sp) #POP (in ra)
    addi $sp,$sp,4 #
    jr $ra #fine

    pariodispari:
    addi $t0,$zero,2
    div $s0,$t0
    mfhi $t1
    beq $t1,$zero,diversi
    jr $ra #fine della procedura

    diversi:
    addi $s1,$zero,1
    jr $ra #fine della procedura
    Debian Sarge 3.01a
    Slackware 10.2

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.