005
17.04.2006, 12:04 Uhr
fisch1983
|
.MODEL SMALL, C ;Speichermodell für 16bit Programme .386P
;.386P ;Speichermodell für 32bit Programme ;.MODEL FLAT, STDCALL ;Kommentarzeichen ';' entfernen und ;Speichermodell 16bit auskommentieren
INCLUDE asmLib.inc ;Bibliothek mit Ein-/Ausgabe-Funktionen
;Symbolische Bezeichner ;<symbol.Name> EQU <wert> ;...
;Makrofunktion (falls erforderlich) ;...
.DATA ;----- Datensegment --------------------------------------------------- ;<variablenname> DB <wert> ;Byte-Variablen oder Textstrings String DB 4 dup ('0') Val DW 0 Anf DB LF,CR,"Programm zur Messung der Reaktionszeit.",LF,CR,"Druecken sie die Leertaste um die Messung zu starten:",LF,CR,0 Now DB " NOW ",0 RZeit DB LF,CR,"Ihre Reaktionszeit betrug: ",0 hex DB " hex = ",0 Weiter DB LF,CR,"weitere Messung durchfuehren? (j/n) ",0 ms DB ' ms ', 0 DEZ2ASC DB '0123456789' temp DB 5 DUP (' ')
;<variablenname> DW <wert> ;Word-Variable
;<variablenname> DD <wert> ;Dword-Variable
.CODE ;----- Codesegment ---------------------------------------------------- STARTUP ;Programmbeginn ein: INVOKE Xputs, OFFSET Anf INVOKE Xgetche ;auf Eingabe warten CMP AL, 020H ;auf ' ' prüfen JNE ein INVOKE Xwait, 5545 INVOKE Xputs, OFFSET Now INVOKE Xgettimer MOV EBX, EAX INVOKE Xkbclr ;Tastaturspeicher leeren warten: INVOKE Xgetche ;auf Eingabe warten CMP AL, 020H ;auf ' ' prüfen JNE warten INVOKE Xgettimer SUB EAX, EBX MOV CX, AX INVOKE Xputs, OFFSET Rzeit CALL AusDEZ INVOKE Xputs, OFFSET ms INVOKE Xputs, OFFSET weiter ;weitere Rechnung durchführen? INVOKE Xgetche ;auf Eingabe warten CMP AL, 06AH ;auf 'j' prüfen JE ein EXIT ;Programmende
;############################################################################# ;Unterprogramm AusDez ;Funktion: Ziffernweise Umwandlung einer 4stelligen Hexadezimalzahl in Dezimal ; Zeichen und Ausgabe als ASCII-Zeichens ;Eingaenge: 4stellige Hexadezimalzahl in CX ;Ausgaenge: keine (Bildschirmausgabe) ;############################################################################# AusDEZ: PUSHAD MOV AX, CX MOV DX, 0 MOV CX, 10000 DIV CX ADD AX, 30H ;1.Ziffer in ASCII umwandeln MOV temp[0], AL
MOV AX, DX MOV DX, 0 MOV CX, 1000 DIV CX ADD AX, 30H ;2.Ziffer in ASCII umwandeln MOV temp[1], AL
MOV AX, DX MOV DX, 0 MOV CX, 100 DIV CX ADD AX, 30H ;3.Ziffer in ASCII umwandeln MOV temp[2], AL
MOV AX, DX MOV DX, 0 MOV CX, 10 DIV CX ADD AX, 30H ;4.Ziffer in ASCII umwandeln MOV temp[3], AL
ADD DX, 30H ;5.Ziffer in ASCII umwandeln MOV temp[4], DL
MOV temp[5], 0 ;Stringende kennzeichnen
INVOKE Xputs, OFFSET temp ;5 ASCII-Zeichen ausgeben POPAD RET ;#############################################################################
.STACK ;----- Stacksegment ---------------------------------------------------
END _main ;Dateiende |