ASM verstehen lernen.

OP #2073954
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.
Gast #2073984
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
#2074134
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.
Gast #2074251
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.