Forum: Mikrocontroller und Digitale Elektronik ASM verstehen lernen.


von Rene K. (draconix)


Lesenswert?

Soo, ich habe mich nun nach zwei Jahren in C mal dazu durchgeschlagen 
ASM zu probieren.

Mitunter komme ich auch teilweise ganz gut zurecht in den ersten 
Schritten, jedoch tun sich, selbstverständlich einige Fragen auf über 
welche ich mir in C noch nie gedanken machen musste z.b.:

> Zu beachten ist außerdem, dass die ersten 16 Register (r0-r15)
> nicht von jedem Assemblerbefehl genutzt werden können.

Für was sind die ersten 16 Register gut?

Ich hoffe diesen Thread auch weiterhin mit meinen "doofen" ASM Fragen 
missbrauchen zu dürfen :D

Liebe Grüße.

von Rau (Gast)


Lesenswert?

Man kann nicht doof fragen nur dumm antworten
grüße.

von Peter (Gast)


Lesenswert?

Rene K. schrieb:
> Für was sind die ersten 16 Register gut?

zum speichern von Daten, wie auch die anderen 16.

z.b. eine Direktes laden einer Konstante geht nur in die Register 16-32. 
(ldi). Das Rechnen mit add geht allen von 1-32

von Vuvuzelatus (Gast)


Lesenswert?

>Für was sind die ersten 16 Register gut?

Für fast alles. Du kannst nur einige Instruktionen nicht damit benutzen, 
und zwar

ldi, sbr, cbr, ser, subi, sbci, cpi, andi, ori

von spess53 (Gast)


Lesenswert?

Hi

>Für was sind die ersten 16 Register gut?

Da steht, das nicht jeder Assemblerbefehl anwendbar ist. Und nicht 
kein Assemblerbefehl. Auch sind nicht alle Assemblerbefehle auf alle 
'oberen' Register anwendbar.
Befehle werden bei AVRs in einem 16-Bit Befehlswort codiert. Darin sind 
auch die 'Nummern' der Register enthalten. 32 Register->5 Bit, 16 
Register->4 Bit. Durch die Reduzierung der Register bleiben mehr Bit für 
die Befehlscodierung übrig.

MfG Spess

von Peter R. (pnu)


Lesenswert?

>zu was sind die Register 0..15 gut

Zunächst zu allem, zu dem auch die Register 16..31 gut sind, ausgenommen 
die immediate-Befehle LDI,CPI...

Zm Anderen habe die Register r0 und r1 eine Sonderfunktion beim 
MUL-Befehl und r0 noch eine beim LPM-Befehl.

von Rene K. (draconix)


Lesenswert?

Vielen Dank für die hinreichten Infos zu diesen Registern, auch Spess 
vielen Dank für die Erläuterung des Grundes! ;)

von Ben _. (burning_silicon)


Lesenswert?

man merkt, daß du nie am PC in assembler programmiert hast. die früheren 
x86 prozessoren hatten deutlich weniger register (AX, BX, CX, DX, SI, 
DI, BP, IP, SP und segmentregister DS, ES, FS, GS, CS, SS) als z.b. ein 
AVR, und zwei davon waren auch nicht so einfach nutzbar weil sie code 
und stack adressierten (CS:IP, SS:SP).

der hauptvorteil auf damaligen system war, daß man den recht langsamen 
speicherzugriff vermeiden konnte wenn man ausschließlich mit registern 
arbeitete. was schon im prozessor ist muß nicht erst aus dem speicher 
geholt werden. also hat man probiert so viele daten wie möglich in den 
registern zu halten. für zwischenergebnisse braucht man dann auch keinen 
platz im speicher zu belegen.

von spess53 (Gast)


Lesenswert?

Hi

>man merkt, daß du nie am PC in assembler programmiert hast.

Oder Z80. Da fühlt man sich, zumindest was die Register angeht, wie im 
Schlaraffenland.

MfG Spess

von bitte löschen (Gast)


Lesenswert?

Beim X86 konnte man direkt mit dem Speicher rechnen, z.B.
 add ax,word ptr es:[bx+6]
(Addiert zum AX-Register den Inhalt der Speicherstelle im Extra-Segment, 
mit dem Offset, der sich aus dem Inhalt des BX-Registers plus der 
Konstanten 6 ergibt.)
Solche Möglichkeiten gab (gibt) es viele, aber alle waren nur mit 
bestimmten Registern möglich. So hat jedes Register einen Namen, der 
seine Aufgabe bezeichnet, z.B. AX für Akkumulator, BX für 
Basis-Register, CX für Counter-Register, SI für Source-Index, DI für 
Destination Index, BP für Base-Pointer, SP für Stack-Pointer, usw.. Die 
Segmentregister haben auch alle eigene Aufgaben, wie Code-Segment, 
Datensegent, Stack-Segment, Extra-Segent.
Da ist der AVR viel unkomplizierter. Natürlich versucht man auch (oder 
gerade) beim AVR, möglichst viel mit Registern zu machen und 
überflüssige Speicherzugriffe zu vermeiden.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.