Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   ASM (https://www.delphipraxis.net/308-asm.html)

Daniel B 1. Jul 2002 15:57


ASM
 
Hi,

könnte mir bitte jemand ein paar Assembler Zeilen schreiben, die evtl. auch sinn ergeben sollten. Mehr als 10 werden wohl nicht nötig sein. Ein kenner sollte aber was damit anfangen können. Also einfach nur irgendwelche Befehle schreiben muss nicht wirklich sein. Was die Zeilen machen ist mir egal. Meintwegen "Hallo World!" ausgeben, oder irgendsowas einfaches.

Hintergrund, ich möchte auf meiner Seite ein bisschen über Delphi erzählen und möchte dabei auch ein paar Beipiele zeigen, Delphi, Asm, Maschinensprache usw.
ich kenn mich mit ASM überhaupt nicht aus, und hoffe das ihr mir jetzt keinen schmarrn schreibt.
Vielen Dank.

jbg 1. Jul 2002 16:14

Die folgende Prozedur vertaucht die Werte von a und b.
Code:
procedure SwapInt(var a, b: Integer); assembler;
asm
 // in: eax <-> @a
 // in: edx <-> @b
  push ebx
  mov ebx, [eax]
  mov ecx, [edx]
  mov [eax], ecx
  mov [edx], ebx
  pop ebx
end;

Daniel B 1. Jul 2002 16:29

Hi,

danke, aber ich möchte "reinen" Assembler-Code. nicht wie man ihn in Delphi umsetzt. So als würde man in einer ASM-Entwicklungsumgebung arbeiten. Für PIC's oder sowas.
Brauche ich da nur den ASM teil, wie werden dann die variablen deklariert?

sakura 1. Jul 2002 17:04

Das kann ich jetzt leider nicht testen - sollte aber unter Turbo Assembler funktionieren (für MS DOSe)
Code:
                .MODEL SMALL
                .STACK 100h
                .DATA
Greeting       DB   'Hello World',13,10,'$'
                .CODE
                ;DS auf das Datensegment zeigen lassen
                mov  AX, @Data
                mov  DS, AX
                ;DOS Interrupt 0x21/Funktion 0x9 (Text darstellen)
                mov  AH, 9
                ;Pointer zur Meldung
                mov  DX, OFFSET Greeting
                ;DOS Interrupt 0x21 ausführen
                int  21h
                ;DOS Interrupt 0x21/Funktion 0x4C (Programm beenden)
                mov  ah, 4Ch
                ;DOS Interrupt 0x21 ausführen
                int  21h
                END
Zitat:

Zitat von DOS Bildschirm
C>hwelt.exe
Hallo Welt
C>_

:cat:

Daniel B 1. Jul 2002 17:13

Zitat:

Zitat von sakura
Code:
DB   'Hello World',13,10,'$'
Zitat:

Zitat von DOS Bildschirm
Hallo Welt


Hä :?: Wenn asm doch nur sooo klug wäre. :mrgreen:

Danke Dir. :cat:

sakura 1. Jul 2002 17:16

Na ja, so ist das halt mit denen, welche sich nicht zwischen deutsch und englisch entscheiden können/wollen.

sakura 1. Jul 2002 17:26

Und weils so schön war, noch eine Prozedur, welche erst zurückkehrt, wenn der Kathodenstrahl des Monitors von der unteren, rechten Ecke zur oberen, linken Ecke wandert. (DOS Animationen haben dadurch flickerfreies Darstellungen ermöglicht).

Code:
WaitRetrace proc pascal far
    ;Status Register für den Test vorbereiten
    mov DX, 3DAh
    ;Label (für Jumps)
  @w1:
    ;Bit 3 in AL ist 0, wenn der Bildschirm aufgebaut wird
    in  AL, DX
    test AL, 8h
    ;warten, wenn das Bit 3 nicht 0, also 1, ist
    jnz @w1
    ;Label (für Jumps)
  @w2:
    ;Bit 3 in AL ist 1, wenn der Strahl zurück geht
    in  AL, DX
    test AL, $8
    ;warten, wenn das Bit 3 auf 0 gesetzt ist
    jz @w2
  ENDP


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:35 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz