MOVSB was soll das ??????

Hier könnt ihr sowohl zur x86 Architektur als auch zu Win32ASM Fragen stellen.

Moderatoren: crack, Krüsty, Marwin

MOVSB was soll das ??????

Beitragvon pp » Mittwoch 30. August 2006, 22:57

Hi Leute

Also ich habs immer so gemacht:
mov esi,offset STRING1
mov edi,offset STRING2
@@: mov al,[esi]
mov [edi],al
inc edi
inc esi
cmp al,0
jnz @B

Dann hab ich in diesen sauteueren dummen Buch aus dem FRANZIS' Verlag (liegt bei mir auf dem Klo, weiß auch warum) gelesen, und den Befehl movs, movsb .... entdeckt.
Ohhh .... hab ich mir gedacht,
dann geht es ja so:
mov edi,offset STRING1
xor ecx,ecx
@@: mov al,[esi]
inc esi
inc ecx
cmp al,0
jnz @B
mov esi,offset STRING1
mov edi,offset STRING2
sdf ; soll heißen Set Direction Flag , weiß nicht ob richtig
rep movsb

So und wenn man jetzt mal guckt was movsb macht, dann stellt man
fest, daß das Beispiel mit movsb ja viel mehr Zeit braucht, weil man vorher die Länge des Strings ermitteln muß, weil movsb ja keine Flags setzt. Warum auch, die meisten Strings enden ja mit null.

Keine Ahnung was RISK Architektur oder CISK Architektur wirklich ist, aber:
Waren die Prozessoren in den Apple-Rechnern wirklich soviel besser ?
Warum gibs die dann nicht mehr, oder andersrum: Warum lassen wir
immer die Dummheit nach oben ?
pp
Newbie
 
Beiträge: 8
Registriert: Montag 29. August 2005, 22:35

Beitragvon Krüsty » Dienstag 5. September 2006, 00:25

Zum Thema RISC und CISC kann ich kurz eine Erläuterung geben, das andere müssen andere machen:
Erstmal kurze Vorstellung (was ich grad mal so noch im Kopf zusammen bekomme):
CISC: Complex Instuction Set Computer
unterstützt sehr viele
-Adressierungsarten
-verschiedene Befehlsformate

RISC: Reduced Instruction Set Computer
-nur die wichtigsten Befehle und Adressierungsarten sind implementiert, dafür aber schnell.
Nur Operationen auf Register und Konstanten, wenige Befehlsformate und alle Befehle gleich lang. -> Kein Nachladen von Ergänzungsworten (schnelleres Pipelining)

Problem des CISC: Die sogenannte 90/10 Relation (90% der geschriebenen Programmcodes basieren auf 10% der Befehle)
Ergo sind CISC-Rechner viel teuerer(=ineffektiv?) (denn viele Befehle heißt größerer Prozessor->höhere Produktionskosten).
Daher hat man die Befehlsanzahl, die der Rechner unterstützt, stark reduziert und dafür gesorgt, dass man aber alle Behfehle der CISC trotzdem ausführen kann, nur dann halt nicht mit 1 Arbeitsschritt sondern eben auch mal mit 3 oder 4. Dabei rausgekommen ist dann der RISC. Nach dem Prinzip:Einfach, schnell, billig.

CISC und RISC haben beide ihre Vor- und Nachteile. Im Allgemeinen sind RISC die bessere Wahl, weil sie bei nur geringem Geschwindigkeits unterschied(kaum messbar, außer bei speziellen Anwendungen) wesendlich billiger sind.

Ich hoffe ich hab nix wichtiges vergessen...

Krüsty
a member of CodingCrew.de
Air conditioned computer. Please keep WINDOWS closed.
Bild
Benutzeravatar
Krüsty
Administrator
 
Beiträge: 96
Registriert: Donnerstag 8. Mai 2003, 21:25
Wohnort: Dresden, Deutschland

Beitragvon crack » Dienstag 5. September 2006, 02:37

Hallo Krüsti, Hallo pp,

Ja, stimmt alles 100%, das Fazit ist, das man um die Programme in Hinsich auf Geschwindigkeit oder Speicherplatzverbrauuch optimieren sollte. Und hier wird es dann oft zur Abwäägungssache welche Methode am sinnvollsten ist. ein trivialles Beispiel wäre auch 'Speichervariable' vs. Stapeloperation, oder auch 'LOOP Label' vs. 'DEC cx ... JNZ Label'. Pauschalisierungen sind hier oft schwierig. Um das Beispiel von oben noch einmal aufzugreifen: MOVSB ist sicherlich nicht primär geeignet um einen Nullterminierten String zu verschieben, ist jedoch die Länge des Strings vorher bekannt, dann hätte ich mit REP MOVSB doch vermutlich die schnellere Option ... aber wie gesagt: alles Abwäägungssache, und wenn man tatsächlich auf µsec oder gar nsec bedacht ist, kommt man um einige Versuche was die schnellste Methode ist leider nicht drumherum...
mit freundlichen grüssen,
with best regards,

crack
Benutzeravatar
crack
Administrator
 
Beiträge: 280
Registriert: Dienstag 21. Dezember 2004, 15:02
Wohnort: 53783 Eitorf


Zurück zu Assembler

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder

cron