Forum: PC-Programmierung C-Code in Assembler darstellen Part2


von Freddi (Gast)


Lesenswert?

Hallo,
ich bin neu hier und versuche mich grad ein wenig in Assembler zu 
programmieren.   Hier der Part2 der vorhins nur als Bild ging:)

ich danke euch



1. folgende Aufgabe den C-Code in Assembler zu schreiben.
int a=1024;
int b=0;
for(b=1; a>1,b++)
(a=a/2,
)

in Assembler:

-- int a=1024, b=0 --
mov dword ptr[a], 1024 // das ptr hatten wir in der schule so
mov dword ptr(b), 0

-- for(b=1; a>1,b++)--
mov dwort ptr(b),1
jmp
mov eax, dword ptr[a]
add eax, 1
mov dword ptr

--a=a/2--
mow eax, dword ptr[a]
div eax/2

-- Ergebnis a ---
mov dword, ptr[a], eax

ende: nop nop

von Karl H. (kbuchegg)


Lesenswert?

Freddi schrieb:

> -- for(b=1; a>1,b++)--
> mov dwort ptr(b),1
> jmp


wo ist die Abfrage, ob a noch größer als 0 ist?

> mov eax, dword ptr[a]
> add eax, 1
> mov dword ptr

im C code steht aber, dass b inkrementiert werden soll.

>
> --a=a/2--
> mow eax, dword ptr[a]
> div eax/2
> -- Ergebnis a ---
> mov dword, ptr[a], eax
>
> ende: nop nop


und wo formst du da jetzt die Schleife?

von Karl H. (kbuchegg)


Lesenswert?

Tipp:

Wenn du so etwas umzusetzen hast, dann lös erst mal die C Anweisungen in 
einem Ablaufdiagramm auf

aus
int a=1024;
int b=0;
for(b=1; a>1,b++)
(a=a/2,
)

wird


      a = 1024
      b = 0

      b = 1
                 Nein
 +-> a > 1 ?   --------------->  Ende
 |     | Ja
 |     v
 |    a = a / 2
 |     |
 |    b++
 |     |
 +-----+

Dann hast du schon einen viel besseren Plan, was du eigentlich in 
Assembler realisiern sollst.

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.