by legacy » 08 Jan 2013, 15:23
non ci siamo capiti
una ALU ha operandi dello stesso numero di bit del risultato, quindi se parti da 4 bit ed ottieni in uscita 8 bit non va bene
nel caso abbiamo detto bx1111 x bx1111 = bx11100001, due sorgenti operandi a 4 bit ed un risultato ad 8 bit
come propaghi quegli 8 bit nella CPU che e' a 4 bit ? a rigore non puoi, puoi soltanto propagare 4 bit, perche' tutta la CPU e' a 4bit
e nel caso di prima con soli 4 bit in uscita avresti bx0001 non e' corretto come risultato matematico perche' ti perderesti i primi bx1110
per il motivo che il risultato non ti ci sta in 4 bit: quando succede devi segnalarlo !
che soluzione proponi ? usare registro di appoggio ? con comparatore ?
esemplificando:
hai ALU a 4 bit: source1, source2, target1, appoggio, tutti e 4 registri a 4bit
{target1,appoggio}=source1 x source2
if appoggio notEq to bx0000 -> cpu.alu.flag.overflow=bx1
source1=bx1111
source2=bx1111
target1=bx0001
appoggio=bx1110
cpu.alu.flag.overflow=bx1
una roba cosi' ? dove la CPU sa che la MUL e' in overflow (cpu.alu.flag.overflow=bx1)
e leggendo il registro appoggio si recupera anche di quanto ?
Last edited by
legacy on 21 Jan 2013, 11:59, edited 3 times in total.