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..


Anmelden zum Antworten