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!
Stavo cercando in tutta la rete per una risposta ... ovunque ma l'ovvio. Grazie! – dankilman
Allora perché usano la terminologia "firmata e non firmata" invece di qualcosa come "spuntata e deselezionata"? – dan04
È un termine improprio. Leggi la prima citazione. –