Falsche Parameterübergabe?
-
Hallo!
also scheinbar bin ich bei intel doch schon wieder etwas raus mitm Assembler..
das ganze hier soll nix weiter tun als den Buchstaben B (hex 42) farbig in der Mitte der 5. Zeile (hex 5 und hex 28) auf meiner Konsole auszugeben.
Irgendwie ist es aber genau das, was es nicht tut..-a 0100 15B7:0100 mov ax,4142 15B7:0103 push ax 15B7:0104 mov ax,05 15B7:0107 push ax 15B7:0108 mov ax,28 15B7:010B push ax 15B7:010C call 0200 15B7:010F pop ax 15B7:0110 pop ax 15B7:0111 pop ax 15B7:0112 pop ax 15B7:0113 jmp 05f9 15B7:0116 nop 15B7:0117 -a 05f9 15B7:05F9 mov ax, 4c00 15B7:05FC int21 15B7:05FE nop 15B7:05FF -a 0200
Der Teil war mehr oder weniger Informativ.
Das eigentliche Problem liegt wahrscheinlich hier :15B7:0200 push bp 15B7:0201 mov bp, sp 15B7:0203 mov ax, b800 15B7:0206 mov es, ax 15B7:0208 mov ax, [bp+4] 15B7:020B mov bx, 90 15B7:020E mul bx 15B7:0210 mov bx, ax 15B7:0212 mov ax, [bp+6] 15B7:0215 shl ax, 1 15B7:0217 add ax, bx 15B7:0219 mov di, ax 15B7:021B mov ax, [bp+8] 15B7:021E stosw 15B7:021F pop bp 15B7:0220 ret
Axo. Der Code sieht nicht nur so aus, wie frish ausm DOS- Debugger, er stammt von dort...
cYa
DjR
-
Hi!
Ich nehme mal an, du bist im normalen 80x25x16 Textmodus (VGA-Modus 3)...
Dann erstmal des hier:
15B7:0208 mov ax, [bp+4] 15B7:020B mov bx, 90 15B7:020E mul bx
Da nimmst du die X-Koordinate und multiplizierst mit 144d... Wozu das?
Vor allem: Wie kommst du auf 144d?15B7:0212 mov ax, [bp+6] 15B7:0215 shl ax, 1 15B7:0217 add ax, bx
Wenn man sich das anschaut, scheinst du die Position der x- und y-Koordinate auf dem Stack verwechselt zu haben, denn hier multiplizierst du die y-Koordinate mit 2 und addierst das auf den Rest auf.
Zum Schluss holst du mit pop 4xAX vom Stack runter, obwohl du in diesem geposteten Stueck Code nur 3 Words raufgepackt hast...
BTW: Den Stack haettest du leichter auch mit einem "ret 06h" am Ende vom Code bei 0200 oder einem "add sp, 0006h" wieder freimachen koennen.So, IMHO war's das schon.
-
hmm..
also deine Annahme ist korrekt
Ich hab scheinbar ausversehen die Parameter vertauscht...
Als nächstes muss die 90 eigentlich a0 heißen (ich nehm doch lieber wieder nen Taschenrechner dazu..
Das mit dem 4. Pop liegt daran,dass ich zuerst die Parameter Character und Farbwert einzeln übergeben hab, was aber blödsinn ist...das mit dem ret war mir neu. ich werds mal ausprobieren..
suubaa.. wahrscheinlich sollte ich dann doch mal wieder etwas besser dokumentieren was ich mache..