Binär multiplikation?

Elektronikrelaterade (på komponentnivå) frågor och funderingar.
victor_passe
Inlägg: 2436
Blev medlem: 28 januari 2007, 18:45:40
Ort: Kungsbacka

Binär multiplikation?

Inlägg av victor_passe »

Hej, jag håller på att design en semi automatisk dator (ALU + instruktion av-kodare + Minne)
Och självklart skriver jag en kompilator.
De funktioner jag har inbyggda i ALU:n är:

nop
exit
and
or
xor
not
add
inc
slc (Shift Left)
src (Shift Right)
sln (Shift Left discard)
srn (Shift Right discard)

Med discard medar jag att:

SRN 0111 = 0011
Men:
SRC 0111 = 1011

Ioch med att den nu styrs manuellt kan jag inte göra programhopp (if-satser)

Så till problemet, hur gör jag för att räkna ut tex 3*4?

Jag har googlat lite och hittade detta:
http://en.wikipedia.org/wiki/Binary_num ... iplication
Men det bygger på att jag måste kolla om en position i A=0 eller 1 vilket jag inte kan

Men jag har sett något krångligt schema med massa AND och ADD kretsar, de borde ju gå att simulera.
"datorn" har en 4-bitars data-buss om det hjälper något.

Tack på förhand //Victor

Föresten, coolt att man kan se temperaturerna i och utanför mitt rum på bilden va?
lundeholm
Inlägg: 33
Blev medlem: 1 april 2008, 20:27:32
Ort: Umeå

Inlägg av lundeholm »

Varför kan du inte använda AND för att kolla en viss bit i A då?

edit: läste på wikipedia och det verkar ju rätt simpelt att utföra multiplikation ändå. Med massor av AND och ADD kan man ju som sagt få till det utan loopar
victor_passe
Inlägg: 2436
Blev medlem: 28 januari 2007, 18:45:40
Ort: Kungsbacka

Inlägg av victor_passe »

Men om jag tar tex 3*4:
0011
0100

Och AND:ar dem får jag:
0000
Och 0!=12

Edit:
Har du länken till det schemat?
jag har sett det men kan inte hitta det nu.
lundeholm
Inlägg: 33
Blev medlem: 1 april 2008, 20:27:32
Ort: Umeå

Inlägg av lundeholm »

Alltså du får kolla bit för bit i så fall.

Ta första biten i B och ANDa samtliga bitar i A med den, spara resultatet i C.
Ta andra biten i B och ANDa samtliga bitar i A med den, shifta left 1, addera resultatet till C
Ta tredje biten i B och ANDa samtliga bitar i A med den, shifta left 2, addera resultatet till C
Ta fjärde biten i B och ANDa samtliga bitar i A med den, shifta left 3, addera resultatet till C

Typ nått sånt
victor_passe
Inlägg: 2436
Blev medlem: 28 januari 2007, 18:45:40
Ort: Kungsbacka

Inlägg av victor_passe »

Okej..
Det blir mycket shiftande fram och tillbaka.
Jag får väll sitta och koda ett tag.
Men tack!

Edit:
Det blev redan för mycket kod och efter som jag har enorma 4 Byte minne så blir det svårt att lagra annat är temporär data.
Jag får bygga den hårdvaru mässigt och skippa Exit instruktionen.

Så har du länken till schemat?
lundeholm
Inlägg: 33
Blev medlem: 1 april 2008, 20:27:32
Ort: Umeå

Inlägg av lundeholm »

4 byte är inte mycket, förstår att det blir tajt. Jag har tyvärr inget sånt schema, kan ingen elektronik, bara programmering :)
victor_passe
Inlägg: 2436
Blev medlem: 28 januari 2007, 18:45:40
Ort: Kungsbacka

Inlägg av victor_passe »

Okej. jag trode att du hade kollat på schemat som finns någonstans på wikipedia.
Aja, får väll leta då.
Tack i alla fall!
Användarvisningsbild
Icecap
Inlägg: 26763
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Jag "lekte" med detta i sin tid, fast då på Z80.

Du kan ju tydligen göra vissa funktioner men att inte ha en conditional (if) med gör att din maskin bara är en state-mashine, det som utmärker en processor är just att den kan välja väg beroende på en status (på något vis).

Och med 4 registerplatser blir det besvärligt, som jag ser det behöver du rent omedelbart minst 5 st.
victor_passe
Inlägg: 2436
Blev medlem: 28 januari 2007, 18:45:40
Ort: Kungsbacka

Inlägg av victor_passe »

Jag har 4 byte minne. och 4-bitars dator. så 8 register platser.
ALU:n använder A,B
Sedan finns c-code på den. men ännu bara i lysdiod form.

När jag hittar ett lämpligt minne (8-bitar data och 8-bitar address som inte kostar 100.000:-)
Så ska jag bygga så man kan programera den och jag har reserverat plats för 4 typer av programhopp som det är nu:
Om A=B hoppa 1-16 rader fram
Om A>B hoppa 1-16 rader fram
Om A=B hoppa 1-16 rader bak
Om A>B hoppa 1-16 rader bak
GalFisk
Inlägg: 323
Blev medlem: 11 mars 2006, 23:53:11
Ort: Horndal

Inlägg av GalFisk »

"Shift utan discard" som du har brukar annars kallas "rotate". (ROR/ROL)
Denna kretsen multiplicerar två fyra bitars tal, och ger ett resultat i åtta bitar. Det här sätter jag ihop själv i huvet just nu, så jag tar förbehållande för evt fel:

Bit 0 av A går in på fyra AND-grindar. Den andra ingången på grindarna går till bitarna 0-3 på B. Det samma görs med bit 1-3 på A.
Nu har vi fyra grupper av AND-kretsar, låt oss kalla dom grupp 0-3, som ger ut varsitt 4-bitars tal. Tal 0 och 1 skickar vi in på en 4 bitars adderare således:
bit 0 på tal 0 går till carry in på adderaren, bitarna 1-3 går in på ingångarna A0-A2
bit 0-3 på tal 2 går in på ingångarna B0-B3.
Det samma gör vi med tal 2 och 3 på en annan 4 bits adderare.
Resultatet från dessa två adderare matas in i en 7 bits adderare, resultatet från tal 2 och 3 matas in förskjutet två platser åt vänster.
Resultatet kommer ut som ett åtta bitars tal (carry out på adderaren blir den åttonde biten).
Bygger du adderarna av separata grindar kan du spara lite eftersom inte alla ingångar används.

Har inte gjort sånt här på en stund, bra om nån kollar om det är rätt. Behövs det kan jag rita ett blockdiagram.
Användarvisningsbild
Raketost
Inlägg: 125
Blev medlem: 6 mars 2008, 19:55:13
Ort: Mölndal

Inlägg av Raketost »

Angående binär aritmetik, kolla här hur man kan göra utan CPUer eller elektricitet.....

http://www.youtube.com/watch?v=GcDshWmhF4A
http://www.youtube.com/watch?v=md0TlSjIags
Skriv svar