MASM32-SDK (Windows Konsolapplikationen):
Erste Bekanntschaft mit dem MASM32-SDK

Diese und die nächste Webseite demonstrieren die Leistungsfähigkeit des MASM32-SDKs. Zusätzlich führt sie in die Benutzung des MASM32-SDKs ein.

Die Bedieneroberfläche des MASM32-SDKs wird durch Aufruf des Programms qeditor.exe gestartet. Dies Programm ist ein Bestandteil des installierten Softwarepakets.

Das gesamte Softwarepaket besteht aus rund 2500 Dateien und ist netto etwa 80 MB groß.

Der MASM32-SDK lässt sich anpassen. Hinweise dazu liefert die Datei intro.txt im Grundverzeichnis des installierten Pakets.

Die im Softwarepaket mitgelieferten Dokumentationen und Anleitungen verwenden die englische Sprache.


MASM32-SDK, Hauptfenster

Auffallend häufig beginnen Programmierlehrgänge mit einem Progrämmchen, das den Text „Hello World” auf dem Bildschirm anzeigt.

Die Bedieneroberfläche des MASM32-SDKs bietet hierzu eine nette Überraschung. Die im oberen Bild gezeigte Auswahl unter dem Reiter „Code” produziert genau ein solches Progrämmchen als Konsolapplikation.

Im Laufe der folgenden Bedienungsschritte wird man aufgefordert, den erzeugten Quellprogrammtext in einem wählbaren Unterverzeichnis unter einem wählbaren Dateinamen zu speichern. Der solcherart erzeugte Quellprogrammtext steht weiter unten auf dieser Webseite.

Wenn man anschließend den im Quellprogrammtext enthaltenen Hinweis „Build this console app with "MAKEIT.BAT" on the PROJECT menu” befolgt – gemeint ist der Reiter „Project” – sollte so etwas in einem zusätzlich Konsolfenster erscheinen:

Microsoft (R) Macro Assembler Version 6.14.8444
Copyright (C) Microsoft Corp 1981-1997.  All rights reserved.
Assembling: Versuch.asm

***********
ASCII build
***********

 Datenträger in Laufwerk F: ist UL1
 Volumeseriennummer: 27C1-16BD

 Verzeichnis von F:\masm32\Uebung

06.12.2013  10:27               886 Versuch.asm
06.12.2013  10:34             1.214 Versuch.obj
06.12.2013  10:34             1.536 Versuch.exe
               3 Datei(en),          3.636 Bytes
               0 Verzeichnis(se),    376.619.008 Bytes frei
Drücken Sie eine beliebige Taste . . .
MASM32-SDK, Konsolfenster „Hello World” Anschließen kann man – ebenfalls unter „Project” – die unterste Anwahl „Run Program” auswählen. Die Belohnung ist links zu sehen.

Der Textteil „Hello World” mit anschließendem Zeilenvorschub wurde durch den entsprechenden Befehl print "Hello World",13,10" erzeugt. Für „Press any key to continue ..._” ist der Befehl inkey zuständig.


Das erzeugte Quellprogramm ist ein Vorlagengerüst („Template”) für Konsolapplikationen unter Windows. Die beiden mit .data und .data? markierten Bereiche enthalten noch keine Datendefinitionen. Der Prozedurteil ruft mit call main das eigentliche Programm auf. Abschließend fordert das Macro inkey zum Betätigen einer Taste auf. Dadurch wird erreicht, dass die weiter programmierte Textanzeige betrachtet werden kann. Ohne diese Aufforderung wäre das Fenster mit der Textanzeige blitzartig verschwunden – es sei denn, man hätte man das erzeugte .EXE-Programm in einem separaten Konsolfenster laufen gelassen.

Der Prozedurteil enthält die Befehle call, inkey, exit, cls, print und ret. Nur call und ret sind reine Assemblerbefehle. Bei inkey, exit, cls, print und exit werden gleichnamige Makros aufgerufen. Wo die Makros zu finden sind, enträtselt sich bei Untersuchung der mittels include eingebundenen Datei \masm32\include\masm32rt.inc.

; -----------------------------------------------------
    include \masm32\include\masm32rt.inc
; -----------------------------------------------------
comment * -----------------------------------------------------
                     Build this console app with
                  "MAKEIT.BAT" on the PROJECT menu.
        ----------------------------------------------------- *
    .data?
      value dd ?

    .data
      item dd 0

    .code

start:
; -----------------------------------------------------
    call main
    inkey
    exit
; -----------------------------------------------------

main proc
    cls
    print "Hello World",13,10
    ret
main endp

; -----------------------------------------------------
end start


Die Include-Datei \masm32\include\masm32rt.inc
Am Anfang des Assemblerprogramms wird mit include \masm32\include\masm32rt.inc die Datei masm32rt.inc aus dem Verzeichnis \masm32\include eingefügt. Ihr – teilweise vom amerikanischen Englisch ins Deutsche übersetzter – Inhalt ist:
comment #
Die Include-Datei für die  MASM32 Laufzeitbibliothek

Diese Datei vereinfacht den Einstieg in die Assembler-Programmierung, indem
sie den gesamten Leistungsumfang der MASM32-Bibliothek, des Makrosystems und
der Include-Dateien für Programmiervorhaben zur Verfügung stellt.

Sie spezifiziert die Normalbedingungen für die Erstellung eines
32-Bit-Windows-Programms mit dem minimal erforderlichen Prozessor-Typ,
dem Speichermodell und der erforderlichen Unterscheidung zwischen
Groß- und Kleinschreibung.

Die Include-Dateien sind in der korrekten Abfolge deklariert: Die Datei
windows.inc Datei steht an erster Stelle. Es folgen statische Bibliotheken
und Importbibliotheken für Windows API-Funktionen.

Soweit es entsprechende Link-Bibliotheken für statische oder importiere
Bibliotheken gibt, sind sie nach den Include-Dateien aufgeführt.

Anmerkung: Es ist für Programmierer vorteilhaft, dass sie nach Erlangen
eines entsprechenden Verständnisses an dieser Stelle ihren eigenen und
somit besser angepassten Entwurf verwenden.
#

  .486        		    ; create 32 bit code
  .model flat, stdcall      ; 32 bit memory model
  option casemap :none      ; case sensitive

; include files
; -------------
  include \masm32\include\windows.inc	; main windows include file
  include \masm32\include\masm32.inc    ; masm32 library include

; Windows API include files
; -------------------------
 include \masm32\include\gdi32.inc
 include \masm32\include\user32.inc
 include \masm32\include\kernel32.inc
 include \masm32\include\Comctl32.inc
 include \masm32\include\comdlg32.inc
 include \masm32\include\shell32.inc
 include \masm32\include\oleaut32.inc
 include \masm32\include\ole32.inc
 include \masm32\include\msvcrt.inc

 include \masm32\include\dialogs.inc	; macro file for dialogs
 include \masm32\macros\macros.asm      ; masm32 macro file

; libraries
; ---------
 includelib \masm32\lib\masm32.lib      ; masm32 static library

; import libraries for Windows API functions
; ------------------------------------------
 includelib \masm32\lib\gdi32.lib
 includelib \masm32\lib\user32.lib
 includelib \masm32\lib\kernel32.lib
 includelib \masm32\lib\Comctl32.lib
 includelib \masm32\lib\comdlg32.lib
 includelib \masm32\lib\shell32.lib
 includelib \masm32\lib\oleaut32.lib
 includelib \masm32\lib\ole32.lib
 includelib \masm32\lib\msvcrt.lib

; ------------------------------------------

Meine Include-Datei \masm32\include\mymasm32rt.inc
Ich verwende die nachfolgend gezeigte Include-Datei für den Programmanfang. Sie enthält einige Definitionen (die Zeilen mit equ) und erleichtert das Einbinden des Debuggingtools.
    .586                                    ; create 32 bit code
    .model flat, stdcall                    ; 32 bit memory model
    option casemap :none                    ; case sensitive

.XLIST
    include \masm32\include\windows.inc     ; always first
    include \masm32\macros\macros.asm       ; MASM support macros

; include files that have MASM format prototypes for function calls
; -----------------------------------------------------------------
    include c:\masm32\include\masm32.inc
    include c:\masm32\include\gdi32.inc
    include c:\masm32\include\user32.inc
    include c:\masm32\include\kernel32.inc
    include c:\masm32\include\shell32.inc
    include c:\masm32\include\msvcrt.inc
    include c:\masm32\include\debug.inc           ;fuer debug

; Library files that have definitions for function
; exports and tested reliable prebuilt code.
; ------------------------------------------------
    includelib c:\masm32\lib\masm32.lib
    includelib c:\masm32\lib\gdi32.lib
    includelib c:\masm32\lib\user32.lib
    includelib c:\masm32\lib\kernel32.lib
    includelib c:\masm32\lib\shell32.lib
    includelib c:\masm32\lib\msvcrt.lib
    includelib c:\masm32\lib\debug.lib            ;fuer debug

.LIST
DBGWIN_DEBUG_ON = debugFT       ;0 oder 1. 1 mit debug
DBGWIN_EXT_INFO = debugFT       ;0 oder 1. 0 0 ohne debug
; Konstanten
; ------------------------------------------------
bel     equ     7       ;Klingel
bs      equ     8       ;Backspace
ht      equ     9       ;Horizontaler Tabulator
lf      equ     0ah     ;Linefeed
vt      equ     0bh     ;Vertikaler Tabulator
ff      equ     0ch     ;Formfeed
cr      equ     0dh     ;Carriage Return
ctrlZ   equ     1ah     ;CTRL Z
pipe    equ     "|"
spc     equ     " "
Ae      equ     8eh     ;Ä DOS-ASCII-codiert
Oe      equ     99h     ;Ö
Ue      equ     9ah     ;Ü
ae      equ     84h     ;ä
oe      equ     94h     ;ö
ue      equ     81h     ;ü
sz      equ     0e1h    ;ß
.XLIST
Letztes Upload: 24.03.2023 um 11:35:12 • Impressum und Datenschutzerklärung