home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turbo Toolbox
/
Turbo_Toolbox.iso
/
1990
/
05
/
einsteig
/
listing1.asm
< prev
next >
Wrap
Assembly Source File
|
1990-01-30
|
2KB
|
76 lines
TITLE Listing1.asm
;* Programm beschreibt die Abfrage des Gerätetyps und zeigt
;* die Arbeitsweise des OUTS-Befehls. Im Beispiel wird ein
;* Byte direkt an den Tastaturprozessor (8042) geschickt.
;* Dabei löst 0FEh -> 254 dezimal einen RESET aus.
Ausgabe MACRO Text
mov ax, CS
mov DS, ax
mov ah, 09
mov dx, offset CS:Text
int 21h
ENDM
;----------------------------------------------------------
.model small
.stack
.code
ID_Byte DB '?'
XT_Text DB 'Programm läuft nur mit 80286/386/486 Rechnern'
DB ' im erweiterten Real Mode!', 13, 10, '$'
Daten DB 254
;------------------ Unterprogramme -------------------------
who_am_i proc
push ax
push bx
mov ax,0F000h ;Offset ID-Byte
mov ES,ax
mov bl, ES:0FFFEh
mov CS:ID_Byte,bl
pop bx
pop ax
ret
who_am_i endp
;------------------ Hauptprogramm --------------------------
.8086 ;Real-Mode
Start:
call who_am_i
mov al, CS:ID_Byte
cmp al, 0FFh ;PC 8086 ?
je kein_AT
cmp al, 0FEh ;PC/XT ?
je kein_AT
cmp al, 0FBh ;256/640 KB System ?
je kein_AT
jmp Real_Mode
kein_AT:
Ausgabe XT_Text
jmp Ende
;--- ab hier kann im erweiterten Real Mode gearbeitet werden
Real_Mode:
.286
cld ;clear Direction Flag
mov ax,SEG Daten ;Segmentadresse Daten
mov ds,ax
mov si,OFFSET Daten ;Offsetadresse Daten
mov dx,64h ;Portadresse (Tastatur)
mov cx,1 ;Zählervar, 1 Byte übertragen
REP outsb ;cx mal jeweils ein Byte
;an die Portadresse, wenn
;Wortgröße dann outsw
;si wird autom. erhöht
hlt ;hier ist Schluß,erwarte RESET
Ende:
mov ah,4Ch ;zurück zu DOS
int 21h
end Start