Programmverkürzung durch Macros -> Falsche Ausgabe

07/06/2009 - 23:04 von Jens Kallup | Report spam
So Ihr da,

jetzt habe ich mal begonnen, übersichtlerinen Code
zu schreiben - mittels Macros.
Das Programm beendet sich ordnungsgemàß.
Es gibt jedoch keine sinnvollen Sachen aus -
jedenfalls die wrapper Funktion.

Wenn ihr mal sehen wollt, was für Hausaufgaben
bereits gemacht habe, könnt ihr hier:
http://rapidshare.de/files/47454192/pk.zip.html
laden.

Feedback wie immer erwünscht.
MfG
Jens

BITS 32
cpu 486

%include "macros.mac"
%include "symbols.sym"

enter_proc init_variabseln
leave_proc

enter_proc start_main
call_proc init_variabseln
call_f2_proc 21, 3

push dword [ebx + 0]
push dword [ebx + 4]
call _set_Ergebnis_Wert
add esp, 8

exit_proc
leave_proc


segment .data
Ergebnis: dd 0.0
zehn: dd 10
 

Lesen sie die antworten

#1 Markus Wichmann
10/06/2009 - 21:52 | Warnen spam
Jens Kallup wrote:
So Ihr da,

jetzt habe ich mal begonnen, übersichtlerinen Code
zu schreiben - mittels Macros.
Das Programm beendet sich ordnungsgemàß.
Es gibt jedoch keine sinnvollen Sachen aus -
jedenfalls die wrapper Funktion.




Welche Ausgabe suchst du? Die Konsole sollte leer bleiben, denn es gibt
keine Funktionsaufrufe in die Richtung.

Wenn ihr mal sehen wollt, was für Hausaufgaben
bereits gemacht habe, könnt ihr hier:
http://rapidshare.de/files/47454192/pk.zip.html
laden.

Feedback wie immer erwünscht.
MfG
Jens

BITS 32
cpu 486



AFAIK eine überflüssige Anweisung.


%include "macros.mac"
%include "symbols.sym"

enter_proc init_variabseln
leave_proc




*hüstel* Ähm... es gibt schon die Opcodes enter und leave, die diese
Sache schon ziemlich ordentlich machen.

Zudem ist fraglich, wieso du in enter_proc immer erstmal pauschal 32
Bytes reservierst. Nicht so viel, wie du brauchst. (D.h. ersteinmal
zu berechnen, wie viel Platz gebraucht wird.)

Übrigens expandieren die beiden letzten zitierten Zeilen zu:

segment .text
global _init_variabseln
_init_variabseln:
push ebp
mov ebp, esp
sub esp, 32
leave
ret

Das macht irgendwie ziemlich wenig...

enter_proc start_main
call_proc init_variabseln
call_f2_proc 21, 3

push dword [ebx + 0]
push dword [ebx + 4]
call _set_Ergebnis_Wert
add esp, 8

exit_proc
leave_proc




Expandiert:

segment .text
global _start_main
_start_main:
call _init_variabseln
mov eax, 21
mov edx, 3
mov ebx, Ergebnis
call _Fix2Gleit

push dword [ebx + 0]
push dword [ebx + 4]
call _set_Ergebnis_Wert
add esp, 8

push dword 0
call _exit
leave
ret

Wenn dein exit das ist, was ich vermute, ist hier der Epilog
überflüssig. Andererseits wird er dann wohl kaum Schaden anrichten.


segment .data
Ergebnis: dd 0.0
zehn: dd 10



Das Label zehn wurde nie benutzt...

HTH,
Markus
GUI - ein Hintergrundbild und zwölf XTerms

vim -c "exec \"norm iwHFG#NABGURE#IVZ#UNPXRE\"|%s/#/ /g|norm g??g~~"

Ähnliche fragen