2009-12-29 10 views
10

Quando provo a lavorare su interi senza segno in MIPS, il risultato di ogni operazione che faccio rimane firmato (cioè, gli interi sono tutti in complemento a 2), anche se ogni operazione che eseguo è senza firma: addu, multu e così via quarto ...Perché le operazioni MIPS su numeri senza segno danno risultati firmati?

Quando si stampano numeri nell'intervallo [2^31, 2^32 - 1] ottengo il loro valore negativo "overflow" come se fossero stati firmati (suppongo che lo siano).

Anche se, quando provo qualcosa di simile:

li $v0, 1 
li $a0, 2147483648    # or any bigger number 
syscall 

il numero stampato è sempre 2147483647 (2^31 - 1)

Sono confuso ... Cosa mi manca?

PS: Non ho incluso il mio codice in quanto non è molto leggibile (tale è il codice assembly) e mettendo da parte questo problema, sembra funzionare bene. Se qualcuno sente che è necessario, lo includerò subito!

risposta

14

Da Wikipedia:

Il MIPS32 Set di Istruzioni afferma che la parola senza segno come parte di aggiungere e sottrarre le istruzioni, è un termine improprio. La differenza tra le versioni dei comandi firmate e non firmate non è un'estensione di segno (o mancanza di esse) degli operandi, ma controlla se una trappola viene eseguita in overflow (ad esempio Aggiungi) o un overflow viene ignorato (Aggiungi senza segno). Un operando immediato CONST a queste istruzioni è sempre esteso al segno.

Dalle MIPS Instruction Reference:

valori immediati tutta l'aritmetica sono segno-esteso [...] L'unica differenza tra le istruzioni con e senza segno è che le istruzioni firmati possono generare un'eccezione di overflow e le istruzioni non firmati può non.

+0

Stavo cercando in tutta la rete per una risposta ... ovunque ma l'ovvio. Grazie! – dankilman

+0

Allora perché usano la terminologia "firmata e non firmata" invece di qualcosa come "spuntata e deselezionata"? – dan04

+0

È un termine improprio. Leggi la prima citazione. –

1

Mi sembra che il vero problema sia il syscall che si sta utilizzando per stampare numeri. Appare e interpretare sempre ciò che si passa come firmato e possibilmente anche legato.

Problemi correlati