;********************************************************************** ; ; Filename: ChangeString.ASM ; ; Zweck: MASM-Programm, liest Konsolen-Eingabe und wandelt ; Gross-/Kleinschreibung um ; Autor: Gerry Brönnimann ; Datum: 24.06.2003 ; ; ; Assemblieren: ml -c ; -coff ; -Zi ; for debugging ; -Cp ; Hello32.asm ; ; oder mit Commandfile: ; ml @commandfile.txt ; ; ; Linken: link -verbose ; -subsystem:console ; Console-Applikation ; -out: hello32.exe ; Name des .Exe ; -entry:main ; Hauptprogramm ; -debug:full ; for debugging ; -debugtype:cv ; for debugging ; -LIBPATH:D:\masm32\lib ; Pfad zu masm32\lib ; ChangeString.obj kernel32.lib ; ; oder mit Commandfile: ; link @commandfile.txt ; ;********************************************************************** NAME ChangeString ; Prozessor .386 ; Speichermodell: .MODEL flat, Stdcall ; Import-Statements -> hier deklariert gibt Link error ; Export-Statements PUBLIC main ;mit coff-Option: nur main ; Konstantensegment .CONST include include include include includelib includelib includelib ; Konstanten LF EQU 10 ; Line-Feed CR EQU 13 ; Carriage Return titel DB CR, LF, 'ChangeString', CR, LF, '-------------', CR, LF, CR, LF, 'String eingeben:', CR, LF, CR, LF color DB 176 ; ASCII-Code blank DB 219 ; ASCII-Code newline DB CR, LF MAXCOL DB 8 ; Stacksegment .STACK 4096 ; Datensegment .DATA hStdIn DD 0 ; Standard-Input-Handle hStdOut DD 0 ; Standard-Output-Handle written DD 0 bytesRead DD 0 readBuffer DB MAXCOL DUP(0) ; Codesegment .CODE main PROC NEAR ; Ausgabe auf Bildschirm INVOKE GetStdHandle, STD_OUTPUT_HANDLE MOV hStdOut, EAX ; Titel-Ausgabe INVOKE WriteFile, hStdOut, ADDR titel, LENGTHOF titel, ADDR written, 0 INVOKE SetConsoleMode, hStdIn, ENABLE_LINE_INPUT INVOKE ReadFile, hStdIn, ADDR readBuffer, MAXCOL, ADDR bytesRead,0 INVOKE WriteFile, hStdOut, ADDR readBuffer, LENGTHOF readBuffer, ADDR written, 0 MOV ESI, 1 ; ESI: Counter äussere for-Schleife .WHILE ESI < 23 ; while (y < 23) MOV EDI, 1 ; EDI: Counter innere for-Schleife MOV EBX, 22 ; EBX: "Anti-Counter" innere for-Schleife .WHILE EDI < 23 ; while (x < 23) .IF (ESI == EDI || ESI == EBX) ; print color-Zeichen INVOKE WriteFile, hStdOut, ADDR color, LENGTHOF color, ADDR written, 0 .ELSE ; print blank-Zeichen INVOKE WriteFile, hStdOut, ADDR blank, LENGTHOF blank, ADDR written, 0 .ENDIF INC EDI DEC EBX .ENDW ; print newline-Zeichen INVOKE WriteFile, hStdOut, ADDR newline, LENGTHOF newline, ADDR written, 0 INC ESI .ENDW ; Exit INVOKE ExitProcess, 0 main ENDP END