verschachtelte Warteschleifen in C und Assembler

#1795354
Lesenswert?

Hallo zusammen,

ich bereite mich gerade auf eine Klausur vor. Eine Vorbereitungsaufgabe 
lautet:

Entwerfen Sie in C und Assembler eine 3-fach verschachtelte 
Warteschleife.

Mein Ansatz sieht so aus:

C:

int zaehl1 = 0;
int zaehl2 = 0;
int zaehl3 = 0;

while (zaehl1 = 0; zaehl1 < 1000; zaehl1++)
{
   while (zaehl2 = 0; zaehl2 < 1000; zaehl2++)
   {
      while (zaehl3 = 0; zaehl3 < 1000; zaehl3++)
   }
}

Assembler:

push cx
mov cx, 0FFFh

waitloop1:

loop waitloop1
mov cx, 0FFFh

waitloop2:

loop waitloop2
mov cx, 0FFFh

waitloop3:
loop waitloop3
pop cx


Funktioniert das so?
Ich bin noch relativ neu in der Programmierung und hoffe, dass ich nicht 
allzu großen Mist zusammengeschrieben hab. Vielen Dank schonmal im 
Voraus.
#1795442
Lesenswert?

Stefan F. schrieb:
> Ich dachte mir, dass das durch das Sichern und wieder Laden vom Stack so
> funktionieren könnte.

Wenn in deiner Klausur viel Wert auf Assembler gelegt wird, dann 
solltest du in die Basiskonzepte noch mehr Zeit zur Vorbereitung legen.

Wenn Assembler erwartungsgemäß in deiner Klausur nur das Sahnehäubchen 
für die volle Punktzahl ist, dann lass es links liegen.

Mit so einer Aussage bei dieser Aufgabenstellung disqualifizierst du 
dich selber.
#1795452
Lesenswert?

Deine C Lösung sieht ja grundsätzlich nicht schlecht aus.

Du kannst mehr oder weniger auch in Assembler dasselbe machen:

  es ist auch in Assembler erst mal nicht verboten, die
  Schleifenstruktur (Anfang, Körper, Ende) durch Einrückungen
  sichtbar zu machen

  du kannst auch in Assembler mehrere Register benutzen. Dann brauchst
  du innerhalb der Schleifen gar nicht pushen/poppen

  Das pushen/poppen ist ja nur deswegen notwendig, weil in allen
  Schleifen immer das cx Register benutzt wird, und es daher in
  einer inneren Schleife gesichert werden muss, damit der aktuelle
  Zählwert der jeweils äusseren Schleife nicht verloren geht.
Gast #1797098
Lesenswert?

Stand vor dem gleichen "Problem". Habs damit gelöst:


push cx

mov cx,1000
schleife0:
  push cx
  mov cx,1000

    schleife1:
      push cx
      mov cx,1000

        schleife2:
        loop schleife2

      pop cx
    loop schleife1
  pop cx
loop schleife0
pop cx


Also prinzipiell das Gleiche wie bei dir, hat auch funktioniert... Viel 
Erfolg morgen beim BGS. :-)

Johannes
Gast #1797529
Lesenswert?

>Hier werden sich jetzt alle fragen, warum man beim Bundesgrenzschutz
>Assembler lernt :P

Dann kann man einen Grenzverletzer mit der mit jmp über den Zaun 
gekommen
ist, mit move wieder zurück schicken.

;-)
Push Paul

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren