Forum: PC-Programmierung Assemblerproblem


von Auli (Gast)


Angehängte Dateien:

Lesenswert?

Hi,

hab mal eine kleine Aufgabe angehängt, hier ist mein Lösungsansatz.

mov AX,BX
CMP [BX],1000H
Schleife:
JNAE Ende
CMP [BX], 5000H
JNAE Kleiner
SUB [BX], 02A5H
JMP Ende
Kleiner:
ADD [BX], 0CB3H
Ende:
MOV BX, BX+2
mov BX, AX
loop Schleife
RET

Passt das soweit?
Danke schonmal für eure Antworten =)

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Du vergleichst nur den ersten Wert mit 0x1000, alle nachfolgenden aber 
nicht.

Das Label Schleife sollte daher besser in eine andere Zeile.

Desweiteren erkenne ich nicht, daß du (dezimal) 1000 Messwerte in einer 
Schleife bearbeitest, da ist zwar sowas wie eine Schleife, aber wo ist 
das Abbruchkriterium?

von G. O. (aminox86)


Lesenswert?

x86-Assembler, wo wird so´was denn noch verlangt? Welcher 
Assembler(Compiler) ist es denn?
Also gut, zum Programmfragment.
Neben den etwas gewagten Vergleichkonstrukten sind zwei Punkte nicht in 
Ordnung.

1) Das Schleifenabbruchkriterium fehlt (wurde schon erwähnt)
2) Die Indizierung der Tabelle funktioniert so wie dargestellt nicht.

Zu 1)Die Schleife ist mit dem loop-Befehl, der cx auf NULL prüft, 
abgeschlossen. Im vorliegenden Beispiel ist cx nicht initialisiert, die 
Anzahl der Schleifendurchläufe ist zufällig.
Zu 2)Gemäss Aufgabenstellung adressiert bx die Tabelle bzw zeigt bei 
Programmstart auf den Tabellenanfang. Die durch bx indizierten 
Tabelleneinträge sollen als Worte bearbeitet, ggf modifiziert und dann 
zurückgeschrieben werden. bx wird auf den nächsten Tabelleneintrag 
weitergeschaltet, dieser bearbeitet usw :
   .
   mov ax, word ptr[bx]        ;tabelleneintrag holen, typisiert
   .
   .                           ;weitere befehle
   mov word ptr[bx], ax        ;ax in tabelle zurückschreiben, typisiert
   inc bx                      ;bx+=2 wg.wortbreite
   inc bx                      ;
   .                           ;usw.
Diese Art der Tabellenbearbeitung setzt vorraus, dass bx nicht 
überlaufen kann, dh. die Tabelle muß sich am Beginn des Datensegments 
befinden.
mfg

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.