7 svar
101 visningar
mekatronik 618
Postad: 23 dec 2021 09:34

RTN Operationer, logiskt högerskifte

Hej, jag sitter med en uppgift där jag skall fylla i en RTN tabell (denna då som egentligen är tom). Försöker tyda vad det är som vänder vid varje klockpuls och allt är väldigt tydligt för mig tills jag kommer till puls 5, vid det logiska högerskiftet. 

Resultatet av det skiftet blir 8616men jag får det till 4316,

är inte helt säker på varför det blir 86, min spontana tanke är att det har något att göra med C flaggan som läggs in. Skulle jag dock göra det får jag detta i R : 8316vilket fortfarande är fel.

Hur kommer det sig att R laddas med 86 i puls 5?

Ture 9874 – Livehjälpare
Postad: 23 dec 2021 11:27 Redigerad: 23 dec 2021 11:28

Du skiftar åt höger du har före skiftet

A4 vilket binärt är 1001 0100

när du flyttar varje bit ett snäpp åt höger matas en nolla in från vänster och biten längst till höger försvinner. Återstår alltså

0100 1010 vilket i hex blir 86

(det finns troligen också en instruktion som roterar, dvs tar minst signifikanta biten och stoppar in längst till vänster i samband med skiftet)

Var det det du frågade efter eller ngt annat?


Tillägg: 23 dec 2021 14:05

Jag kontrollerade inte det jag skrev, A = 1010, (inte 1001 som är 9dec)

Ursäkta röran som jag orsakade, Bubo verkar vara på rätt spår i inlägg #6

mekatronik 618
Postad: 23 dec 2021 11:34
Ture skrev:

Du skiftar åt höger du har före skiftet

A4 vilket binärt är 1001 0100

när du flyttar varje bit ett snäpp åt höger matas en nolla in från vänster och biten längst till höger försvinner. Återstår alltså

0100 1010 vilket i hex blir 86

(det finns troligen också en instruktion som roterar, dvs tar minst signifikanta biten och stoppar in längst till vänster i samband med skiftet)

Var det det du frågade efter eller ngt annat?

A4 hexadecimalt blir 1010 0100 binärt, 86 hexadecimalt blir 1000 0110

När jag gör skiftet flyttas bitarna in, skiftar man A4 får man då 0101 0010 vilket blir 52 hexadecimalt, svaret skall dock bli 86 hexadecimalt (du ser i tabellen) förstår inte riktigt hur de kommer fram till det.

C flaggan finns också med i puls 5, så jag antog att man förde in den då samtidigt till MSB biten. Men då blir resultatet 83 hexadecimalt vilket fortfarande är fel.

Bubo 6998
Postad: 23 dec 2021 12:53

Kan det vara så att du tänker fel på ett steg? Är det inte så att det som står i registren på rad CP 5 är resultatet av RTN-operationen på den rad som är betecknad CP 4?

R -> A betyder ju "ladda in i A det som råkar finnas i R", dvs skriv 86 i register A.

Det är för övrigt exakt samma operation vi ser på rad 7, med resultatet på rad 8.

 

Även rad 6-7 tyder på det: C3 minus 1F blir ju A4. (Tror jag. Lite ovan vid hexadecimalt...)

mekatronik 618
Postad: 23 dec 2021 13:06
Bubo skrev:

Kan det vara så att du tänker fel på ett steg? Är det inte så att det som står i registren på rad CP 5 är resultatet av RTN-operationen på den rad som är betecknad CP 4?

R -> A betyder ju "ladda in i A det som råkar finnas i R", dvs skriv 86 i register A.

Det är för övrigt exakt samma operation vi ser på rad 7, med resultatet på rad 8.

 

Även rad 6-7 tyder på det: C3 minus 1F blir ju A4. (Tror jag. Lite ovan vid hexadecimalt...)

Jag har testat att göra högerskiftet med båda A4 och 86, får dock fel på båda gångerna. Det blir dock rätt ifall jag för in C flaggan i bitmönstret, om jag gör höger skifte på 86 får jag följande:

1000 0110 >> 0100 0011

Med A4:

1010 0100 >> 0101 0010

Men om jag för in C biten i MSB (vilket jag inte vet ifall man skall göra eller inte) då får jag:

1000 0110 >> 1100 0011 (detta motsvarar C3).

Det kan vara så att jag läst raderna fel, men förstår fortfarande inte hur man får fram C3 efter höger skiftet. Ifall det är så att man tar in C flaggan och sätter MSB = 1 då hade det varit logiskt.

Bubo 6998
Postad: 23 dec 2021 13:30

86:  1000 0110

Skifta höger: x100 0011 (0bort åt höger)

Om du fyller på med en nolla: 0100 0011. Detta är även Tures kommentar om att rotera. Den skulle jag ha trott på.

Om du fyller på med en etta: 1100 0011 = C3

 

Att rotera känns rimligast, men att fylla på med en etta verkar ge det svar vi var ute efter.

Programmeraren 3387
Postad: 23 dec 2021 14:44 Redigerad: 23 dec 2021 14:44

Raderna i tabellen är som Bubo skriver, operationen på rad n opererar på värdena i rad n och svaret hamnar i rad n+1.

RTN är uttolkningen av styrsignalerna till ALU:n:
http://www.cse.chalmers.se/edu/year/2014/course/EDA216/FlisProcessorHandbok-A4.pdf

(C) A >> 1 -> R betyder "biten från C och de 8 bitarna från A skiftade 1 steg åt höger, lagra i R"
C=1, A=hex 86:
1 10000110 >> 1 = 11000011 = hex C3

mekatronik 618
Postad: 23 dec 2021 17:07
Programmeraren skrev:

Raderna i tabellen är som Bubo skriver, operationen på rad n opererar på värdena i rad n och svaret hamnar i rad n+1.

RTN är uttolkningen av styrsignalerna till ALU:n:
http://www.cse.chalmers.se/edu/year/2014/course/EDA216/FlisProcessorHandbok-A4.pdf

(C) A >> 1 -> R betyder "biten från C och de 8 bitarna från A skiftade 1 steg åt höger, lagra i R"
C=1, A=hex 86:
1 10000110 >> 1 = 11000011 = hex C3

Nu blev det logiskt, tack för förklaringen!

Svara Avbryt
Close