Meddelande
På gamla.pluggakuten.se kan du fortfarande läsa frågorna och svaren som ställts, men du kan inte skapa ett nytt konto eller nya trådar. Nya frågor och nytt konto skapar du på det nya forumet, välkommen dit!
Assembler (CLRA)
- TB16
- Medlem
Offline
- Registrerad: 2014-11-05
- Inlägg: 1078
Assembler (CLRA)
Jag har en liten fundering kring denna maskininstruktion. Varför måste jag flytta konstanten 0 till R innan jag laddar register A med innehållet i R? Varför kan jag inte skicka konstanten 0 till A direkt?
- SeriousSquid
- Medlem
Offline
- Registrerad: 2010-05-17
- Inlägg: 3643
Re: Assembler (CLRA)
EDIT.
Verkar finnas olika lösningar så vet inte vilken som är definitivt utan att kunna läsa den där ->CC-raden betyder så visade sig att mitt inlägg mest är vild spekulation : \
Kaninte skälet bara vara rent fysiskt att minnesenheterna i de flesta arkitekturer endast är tillgängliga via en eller ett fåtal centrala register "R"? Konceptuellt något i stil med:
och att de enda kommandona som faktiskt finns involverandes registrerna i säg RAM är get- och set-kommandon gentemot centrala register R: och
Låt säga att 0:an fanns lagrad i B så finns ingen direkt fysisk koppling mellan A och B utan man måste göra förflyttningen via R,
Jag har dock ingen direkt kunskap om Assembly så det här kanske är helt fel utan baserar gissningen på logikdiagramsmodeller av miniräknare som jag lekt en del med men där jag antar att principerna bör vara desamma.
Edit 2: Kan även vara eftersom om man gör det på det här sättet så behöver man inte uppfinna en aritmetiskt funktion utan kan bygga den via fundamentala logiska operationer som alla processorenheter måste ha inbyddga tillexempel xor som har egenskapen att den producerar 0 i när du har två lika argument
Så det du vill göra är något i stil med
men för det måste du först hämta A (duplicera A) för att kunna mata de båda in i XOR-enheten samtidigt.
Dett var i alla fall implementationen i assembly för de här företagets microcontrollers: http://www.atmel.com/webdoc/avrassemble … b_CLR.html
Senast redigerat av SeriousSquid (2016-11-18 04:00)
"...a result is trivial if: (a) it follows from the underlying definitions without any trickery or ingenuity and (b) a written specification of how it follows runs the danger of suggesting that it is nontrivial."
- TB16
- Medlem
Offline
- Registrerad: 2014-11-05
- Inlägg: 1078
Re: Assembler (CLRA)
Inte lätt att veta när du inte har en bild på dataväg, styrenhet och minne. Det verkar som man måste utföra en operation via ALU:n för att få innehållet i R till 0. Trodde man kunde hämta värdet 0 från minnet och ladda i A direkt. Men register A (Ackumulator) är ett generellt register för aritmetik-/logik-operationer där resultatet (register R) alltid placeras i registret ("ackumuleras")
bild av dataväg, styrenhet och minne:
SeriousSquid skrev:
EDIT.
Verkar finnas olika lösningar så vet inte vilken som är definitivt utan att kunna läsa den där ->CC-raden betyder så visade sig att mitt inlägg mest är vild spekulation : \
Kaninte skälet bara vara rent fysiskt att minnesenheterna i de flesta arkitekturer endast är tillgängliga via en eller ett fåtal centrala register "R"? Konceptuellt något i stil med:
http://i.imgur.com/b06pcvz.png
och att de enda kommandona som faktiskt finns involverandes registrerna i säg RAM är get- och set-kommandon gentemot centrala register R:och
Låt säga att 0:an fanns lagrad i B så finns ingen direkt fysisk koppling mellan A och B utan man måste göra förflyttningen via R,
Jag har dock ingen direkt kunskap om Assembly så det här kanske är helt fel utan baserar gissningen på logikdiagramsmodeller av miniräknare som jag lekt en del med men där jag antar att principerna bör vara desamma.
Edit 2: Kan även vara eftersom om man gör det på det här sättet så behöver man inte uppfinna en aritmetiskt funktion utan kan bygga den via fundamentala logiska operationer som alla processorenheter måste ha inbyddga tillexempel xor som har egenskapen att den producerar 0 i när du har två lika argument
Så det du vill göra är något i stil med
men för det måste du först hämta A (duplicera A) för att kunna mata de båda in i XOR-enheten samtidigt.
Dett var i alla fall implementationen i assembly för de här företagets microcontrollers: http://www.atmel.com/webdoc/avrassemble … b_CLR.html