34
I-- 3 Programmierkurs mit Turbo Assembler 3.1 Elemen tare Assemblerprogramme -- 3.2 DOS-Funktionen Ober INT 21h aufrufen 3.3 Adressierung 3.4 Wiederholungsslruktur und Auswahlstruktur 3.5 Unterprogramme 3.6 Eingabe von Slrings 3.7 Stringbefehle 3.8 Programme mit mehreren Modulen 3.9 Stru kturt ypcn 3.10 Segmentanweisungen 3.11 Schnittstelle zu Turbo PascaJ 3.12 Dateizugriff Ober den Handle uogen zu den Aufgaben 157 171 181 201 205 213 219 227 235 239 249 273 287

3 Programmierkurs - Springer978-3-663-12410-8/1.pdf · .MODEl SMAll . CODE iZeichen in BX eingeben und an AscAus übergeben Aus: call Eingabe cmp bh,O jne Aus mov dl,'!' mov ah,2

  • Upload
    ngodang

  • View
    217

  • Download
    0

Embed Size (px)

Citation preview

I--

3 Programmierkurs mit Turbo Assembler

3.1 Elemen tare Assemblerprogramme --

3.2 DOS-Funktionen Ober INT 21h aufrufen

3.3 Adressierung

3.4 Wiederholungsslruktur und Auswahlstruktur

3.5 Unterprogramme

3.6 Eingabe von Slrings

3.7 Stringbefehle

3.8 Programme mit mehreren Modulen

3.9 Stru kturt ypcn

3.10 Segmentanweisungen

3.11 Schnittstelle zu Turbo PascaJ

3.12 Dateizugriff Ober den Handle

Lö uogen zu den Aufgaben

157

171

181

201

205

213

219

227

235

239

249

273

287

288 Lösungen zu den Aufgaben

Schreibweise am Beispiel von Aufgabe 3.2.2/1: 1-' --tl--- Abschnitt 3.2.2 ~-- 1. Aufgabe

Lösung 3.2.2/1: MOV DX,Text hätte den Inhalt der Speicherstelle Text und nicht deren Adresse übertragen.

Lösung 3.2.2/2:

iProgramm StrAus2.ASM iAusgabe zweier Strings im Codesegment

Stringl String2

.MOOEL SMALL

.STACK 100h

.OATA

.COOE mov aX,@Code mov ds,ax mov dx,OFFSET Stringl mov ah,9 int 21h mov dx,OFFSET String2 mov ah,9 int 21h mov ah,4Ch int 21h

iSegmentadresse nach OS

i Off set nach OX iStringausgabe

iOffset von String2 nach. OX iStringausgabe

iProgrammende

OB 'Erster String',13,10,'$' OB 'Zweiter String', 13, 10,'$' ENO

Lösung 3.2.2/3: Der Stringinhalt wird nicht angezeigt, da das Programm StrAus2.ASM vorher beendet wird.

Lösung 3.2.6/1: Programm TestXX.ASM. a) Es wird zweimal die Funktion 8 zur Tastatureingabe ohne Echo

aufgerufen und anschließend das Programm mit der Funktion 4Ch beendet. Mit dem Programm können Sie testen, ob eine Taste den erweiterten Tastaturcode liefert oder nicht.

b) Ein Tippen der Taste FI beendet das Programm sofort, während Sie zweimal die Esc-Taste zum Beenden drücken müssen.

c) FI gehört zum erweiterten Tastaturcode und liefert beim ersten Eingabeaufruf in AL den Wert 0 und beim zweiten Aufruf den

Lösungen zu den Aufgaben 289

erweiterten Code. Das Tippen der Esc-Taste liefert das normale Zeichen I Bh.

Lösung 3.3.2/1: Bildschirmausgabe bei Ausführung von Programm Adrl­.EXE:

Lösung 3.3.4/1: Zu Programm Stackl.ASM. a) ABCDEFG b) Im Register wird Highbyte/Lowbyte abgelegt und 1m Speicher in

der Reihenfolge Lowbyte/Highbyte

Lösung 3.3.6/1: Im Programm JmpIndl.ASM fehlen an den mit ???? markierten Stellen die Befehle JMP AX und JMP SI.

Lösung 3.4.1/1:

;Programm CharAus3.ASM ;Ausgabe des Alphabets

Schleife:

.MODEL SMALL • CODE mov dl,'A'

mov ah,2 int 21h inc dl cmp dl,'Z'+1 jb Schleife

mov ah,4Ch int 21h END

Lösung 3.4.1/2:

;Programm CharAus4.ASM

;erstes Zeichen zur Ausgabe vorbereiten

;Ausgabe des Zeichens

;nächstes Zeichen ;vergleiche Ausgabezeichen mit 'Z'+1 ;JUMP BELOW - Sprung wenn< 'Z'+1

;Ausgabe des Alphabets am Bildschirm. Befehl JAE

.MODEL SMALL

.CODE mov dl,'A' ;erstes Zeichen zur Ausgabe vorbereiten

290

Schleife:

Weiter:

mov ah,2 int 21h inc dl cmp dl,'Z'+1 jae Weiter jmp Schleife

mov ah,4Ch int 21h END

Lösung 3.5.1/1:

iProgramm CharEin2.ASM

Lösungen zu den Aufgaben

;Ausgabe des Zeichens

inächstes Zeichen ivergleiche Ausgabezeichen mit 'Z'+1 ;wenn >= Schleife verlassen

iEingabe eines Zeichens und Ausgabe im ASCII Code

.MODEl SMAll

. CODE iZeichen in BX eingeben und an AscAus übergeben

Aus:

call Eingabe cmp bh,O jne Aus mov dl,'!' mov ah,2 int 21h mov bh,O mov dl,13 mov ah,2 int 21h mov dl,10 mov ah,2 int 21h ca II ByteAus mov ah,4Ch int 21h

Eingabe PROC

SonderTaste:

iEingabe nach BX mov bh,OFFh mov ah,1 int 21h cmp al,O je SonderT aste mov bl,al ret

iEingabe eines Zeichens nach BX

iZeichen daß Sondertaste i ausgeben

inöti9 für ByteAus iZeilenvorschub ausgeben

;Wagenrücklauf ausgeben

iAufruf des Unterprogramms ;Ende des Hauptprogramms

ikeine Sondertaste iZeichen in Al lesen

;Sondertaste ?

Lösungen zu den Aufgaben

mov ah,1 int 21h mov bl,al mov bh,O ret

ENDP iEingabe

ByteAus PROC iÜbergebenes Register bx

ACON1 ACON2

L1:

L2:

EQU 48 EQU 7

mov cl,4 shl bx,cl shr bl,cl aeld bh,ACON1 aeld bl,ACON1 cmp bh, '9' jbe L1 aeld bh,ACON2 cmp bl,'9' jbe L2 aeld bl,ACON2 mov dl,bh mov ah,2 int 21h mov dl,bl mov ah,2 int 21h ret ENDP

END

inochmals lesen

ierweiterter Code iZeichen daß Sondertaste

iAusgabezeichen in iBH und BL aufbereiten

iZeichenausgabe BH

iZeichenausgabe BL

iEnde Unterprogramm ByteAus

Lösung 3.5.3/1: Rekursl.ASM mit rekursivem Unterprogrammaufruf

iProgramm Rekurs1.ASM iDas Unterprogramm Upro ruft sich selbst auf

.MODEL SMALL

.STACK 100h • CODE

Upro PROC inc dl mov ah,2 int 21h

iauszugebendes Zeichen iZeichenausgabe

291

292

dec cx jz Zurueck call Upro

Zurueck: ret Upro ENOP

Start: mov dl, IAI-1 mov cx,5 call Upro mov ah,4Ch int 21h END Start

Lösung 3.6.1/1:

;Programm StrEin2.ASM

Lösungen zu den Aufgaben

;Abbruchbedingung für Rekursion ;rekursiver Aufruf

;Anfangswert IAI-1 ;5-malige Rekursion

;String einlesen und zeichenweise ausgeben

Maxlen len String

Eingabe

Ausgabe

_MODEL SMALL .STACK 100h .OATA OB 255 OB (7)

OB 255 OUP (?)

. CODE call Eingabe call Ausgabe mov ah,4Ch int 21h

PROC mov ax,SEG Maxlen ;Eingabepuffer nach OS:OX mov ds,ax mov dx,OFFSET Maxlen mov ah,OAh int 21h ret ENOP

PROC mov dl, 10 mov ah.2 int 21h mov cl, elen] mov ch,O mov bx,O

;Stringeingabe

;zeichenweise Stringausgabe ;Zeilenvorschub ausgeben

;Anzahl der Zeichen

;Abstand vom Stringanfang

Lösungen zu den Aufgaben 293

Schleife: mov ah,2 iZeichenausgabe

Ausgabe

Aufgabe 3.6.3/1:

mov dl,[bx+Stringl int 21h inc bx dec cx jnz Schleife ret ENDP

END

iProgramm StrEinXX.asm

MaxLen String

Eingabe

Sch:

Raus:

Eingabe

Ausgabe

.MODEL SMALL

.STACK 100h

.DATA = 10 OB MaxLen+3 DUP (?)

• CODE PROC mov di,O mov ah,O i nt 16h cJlll al, 13 je Raus cmp al,O je Sch mov [String+dil,al inc di cmp di,MaxLen je Raus jmp Sch mov [String+dil,13 inc di mov [String+dil,10 inc di mov [String+dil,'$' ret ENDP

PROC mov dx,OFFSET String mov ah,9 int 21h

iAnzahl der Zeichen herunterzählen

iAnzahl der eingegebenen Zeichen ;Tastatureingabe in AX

;Return-Taste gedrückt?

;erweiterter Tastaturcode ;wird ignoriert iZeichen abspeichern

;MaxLen Zeichen eingegeben

inächstes Zeichen lesen ;Vorbereitung zur ;Ausgabe mit ;der DOS-Funktion 9

;Stringausgabe

294

Ausgabe

Start:

ret ENDP

mov ax,Oldata mov ds,ax call Eingabe ca II Ausgabe mov ah,4Ch int 21h END Start

Lösungen zu den Aufgaben

Lösung 3.7.1/1:

;Programm Lods2.ASM ;Demonstration von LODS~. Programm mit dem Debugger testen

~orte

Start:

Schleife:

Schleife2:

.MODEL SMALL

. CODE D~ 1122h,3344h,5566h,7788h,99AAh,DBBCCh,DDDEEh,OFFOOh

mov ax.SEG ~orte mov ds,ax mov si.OFFSET ~orte cld ;Direction-Flag löschen für Inkrementierung

lodsw cmp al.O jne Schleife std

lodsw cmp ax.1122h jne Schleife2

mov ah.4Ch int 21h

END Start

; letztes ~ord

;Direction Flag setzen für Dekrementierung

;erstes ~ort

Lösung 3.7.1/2: Testet man das Programm Lods2.ASM mit dem DOS-De­bugger, dann sieht man, wie bei jedem LODSW das Register SI um 2 in­krementiert, bzw. dekrementiert wird und das entsprechende Wort in AX geladen wird. Mit STO ändert sich das Oirection-Flag von UP in ON (down).

Lösungen zu den Aufgaben

Lösung 3.7.2/1:

;Programm Stos2.ASM ;Oemonstration der Befehle LODSB und STOSB

.MODEL SMALL

.OATA Ziel OB 50 OUP (?)

. CODE

Schleife:

String

mov ax,SEG String mov ds,ax mov si,OFFSET String mov aX,SEG Ziel mov eS,ax mov di,OFFSET Ziel cld

lodsb stosb cmp al,O jne Schleife

mov ah,4Ch int 21h

;Quellenadresse nach OS:SI

;Source Index ;Zieladresse nach ES:OI

;Oestination Index ;Oirection-Flag zur Inkrementierung

OB 'Dies ist ein Teststring', 13, 10,0 END

Lösung 3.7.4/1: Programm StringXX.ASM

;Programm StringXX.ASM ;Oemonstration zu den impliziten Stringbefehlen

QuelleBytes LenBytes Quellellords Lenllords ZielBytes Zielllords Gleich Versch

.MODEL SMALL

.STACK 100h

.OATA OB 'ABCOEFG' EQU [$-QuelleBytesl Oll 1,2,3,4,5,6,7

;Anzahl der Bytes

EQU [$-Quellellordsl/2 ;Anzahl der lIords OB LenBytes DUP ('X') Oll Lenllords OUP (OFFh) OB 'sie sind gleich',13,10,'$' OB 'sie sind verschieden',13,10,'$'

. CODE LOCALS ;lokale Labels einschalten

295

296

KOPIERE

AUSGABE

VERGLEICHE

iiICilVersehieden: iiICilEnde:

Start:

L1: L2: L3: L4: L5:

MACRO QUELLE,ZIEL,LEN mov si,OFFSET QUELLE mov di,OFFSET ZIEL mov ex,LEN eld rep movs es:[ZIEL], [QUELLE] ENDM

MACRO TXT mov dx,OFFSET TXT mov ah,9 int 21h ENDM

MACRO QUELLE,ZIEL,LEN mov si,OFFSET QUELLE mov di,OFFSET ZIEL mov eX,LEN cld rep emps [QUELLE] ,es: [ZIEL] jne iiICilVersehieden AUSGABE Gleich jmpiilCilEnde AUSGABE Verseh

ENDM

mov aX,@data mov ds,ax mov eS,ax

Lösungen zu den Aufgaben

;DS:SI -> QUELLE ;ES:DI -> ZIEL ;Anzahl der Elemente in QUELLE ;Vorwärtsriehtung ;Kopieresehleife

;Ausgabe von TXT

;DS:SI -> QUELLE ;ES:DI -> ZIEL ;Anzahl der Vergleichswerte ;Vorwärtsriehtung ;Vergleiehssehleife ; lokales Label

;lokaler Label (@@ zeigt an)

VERGLEICHE QuelleBytes,ZielBytes,LenBytes KOPIERE QuelleBytes,ZielBytes,LenBytes VERGLEICHE QuelleBytes,ZielBytes,LenBytes KOPIERE QuelleYords,ZielYords,LenYords VERGLEICHE QuelleYords,ZielYords,LenYords mov ah,4Ch int 21h END Start

Im Macro VERGLEICHE wurden lokale Labels @@Ende und @@Ver­schieden benutzt. Der Geltungsbereich lokaler Labels erstreckt sich zwi­schen zwei globale Labels. Dazu wurden die globalen Labels LI: .. L5: eingeführt. Im MASM-Modus müssen lokale Labels mit der Anweisung LOCALS eingeschaltet werden.

Lösungen zu den Aufgaben

Lösung 3.8.2/1:

;Programm MTest.ASM ;Dieses Programm besteht aus mehreren Modulen •

Start:

• MODEL SMALL .STACK 100h .DATA

• CODE EXTRN U1:NEAR,U2:FAR GLOBAL U3:PROC

mov ax,@data mov dS,ax call u1 call U2 call U3 mov ah,4Ch int 21h END Start

; Include Datei M1X.asm

AUSGABE MACRO TXT mov dX,OFFSET TXT mov ah,9 int 21h ENDM

;Include Datei M11X.asm

EndeText EQU <'Das Programm ist zu Ende',13,10,'$'>

;Modul M2X.asm

INCLUDE M11X.asm

EndTxt Txt1 Txt2

;Modul M3X.asm INCLUDE M1X.asm

.MODEL SMALL

.DATA PUBLIC EndTxt,Txt1 GLOBAL Txt2 OB EndeText OB 'Dies ist der erste Text.',13,10,'$' OB 'Dies ist der zweite Text.',13,10,'$' END

297

298

U1

U3

iModul M4X.asm

INCLUDE M1X.asm

U2

.MODEL SMALL

.DATA EXTRN EndTxt:BYTE,Txt1:BYTE

• CODE PUBLIC U1 GLOBAL U3 EXTRN U2:FAR

PROC NEAR AUSGABE Txt1 ret ENDP

PROC call U2 AUSGABE EndTxt ret ENDP END

.MODEL SMALL

.DATA EXTRN Txt2:BYTE

. CODE PUBLIC U2 EXTRN U1:NEAR

PROC FAR AUSGABE Txt2 call U1 ret ENDP END

Lösungen zu den Aufgaben

Lösungen zu den Aufgaben

Lösung 3.9.2/1: Makro KUNDAUSGABE von Programm Stru3.ASM:

;Programm Stru3.ASM ;Geschachtelte Strukturen

AUSGABE

KUNDAUSGABE

NaTyp Nam Vnam NaTyp

KundTyp Nr N Alter KundTyp

Kunde

MACRO TXT mov ah,9 mov dx,OFFSET TXT int 21h ENOM

; Textausgabe

MACRO NUMMER,NAME,VORNAME,ALTER

ENOM

STRUC OB '12345678901234567890',13,10,'$' OB 'xxxxxxxxxxxxxxxxxxxx',13,10,'$' ENOS

STRUC OB '000',13,10,'$' NaTyp <>

OB '99',13,10,'$' ENOS

.MODEL SMALL

.STACK 100h

.OATA KundTyp <>

• CODE mov ax,@data mov ds,ax KUNDAUSGABE Kunde.Nr,Kunde.N.Nam,Kunde.N.Vnam,Kunde.Alter mov ah,4Ch int 21h END

299

300

Lösung 3.10.3/1:

iProgramm SegTestX.asm

Temp Temp

Video Video

.MODEl SMAll

.STACK 100h

SEGMENT PARA

ENDS

SEGMENT AT OBBOOh ENDS

• CODE VideoToTemp PROC

Lösungen zu den Aufgaben

;Segment Temp definieren

iSegment Video definieren

ASSUME ds:Video,es:Temp ;Segmentregister wählen mov aX,Video mov dS,ax mov si ,0 mov ax, Temp mov eS,ax mov di ,0 mov eX,BO*25 eld rep movsw ret ENDP

TempToVideo PROC

iDS:SI -> Video

;ES:DI -> Temp ;BO Zeilen

; übertragen

ASSUME ds:Temp,es:Video ;Segmentregister wählen mov ax, Temp mov dS,ax mov si ,0 mov aX,Video mov eS,ax mov di,O mov eX,BO*25 eld rep movsw ret ENDP

loesehe PROC ASSUME es:Video mov aX,Video mov eS,ax mov di ,0 mov eX,BO*25 eld mov ax,O rep stosw ret ENDP

;DS:SI -> Temp

;ES:DI -> Video ;BO Zeilen

; übertragen

;ES:DI -> Video ;BO Zeilen

;mit 0 ;füllen

Lösungen zu den Aufgaben

Warte PROC

Start:

mov ah,8 int 2lh ret ENDP

call VideoToTemp ca II Loesche call Warte call TempToVideo mov ah,4Ch int 2lh END Start

Lösung 3.10.3/2:

iProgramm SegTestY.ASM

iWarten auf Tastendruck

iProgramm als Änderung zu Programm SegTestX.ASM

Temp

Video

KOPIERE

.MODEL SMALL

.STACK l00h

SEGMENT PARA ENDS

SEGMENT AT OB800h ENDS

. CODE

MACRO QUELLE,ZIEL ASSUME ds:QUELLE,es:ZIEL mov aX,QUELLE mov dS,ax mov si ,0 mov aX,ZIEL mov eS,ax mov di ,0 mov cx,80*25 cld rep movsw ENDM

Loesche PROC ASSUME es:Video mov aX,Video mov eS,ax mov cx,80*25 mov di ,0

301

302

WARTE

Start:

cld mov ax,O rep stosw ret ENDP

MACRO mov ah,8 int 21h ENDM

KOPIERE Video,Temp eall Loesehe WARTE KOPIERE Temp,Video mov ah,4Ch int 21h END Start

Lösung 3.10.3/3:

iProgramm SegTestZ.asm

WARTE

KOPIERE

Video

Temp

MACRO mov ah,8 int 21h ENDM

MACRO QUELLE,ZIEL ASSUME ds:QUELLE,es:ZIEL mov aX,QUELLE mov dS,ax mov si,O mov ax,ZIEL mov eS,ax mov di,O mov eX,80*25 eId rep movsw ENDM

.MODEL SMALL

.STACK 100h

SEGMENT AT OB800h ENDS

SEGMENT PARA DW 80*25 ENDS

Lösungen zu den Aufgaben

Lösungen zu den Aufgaben

Code1

Loesche

Loesche Code1

Start:

SEGMENT 'CODE' ASSUME cs:Code1 PROC FAR ASSUME es:Video mov ax,Video mov eS,ax mov cx,80*25 mov di,O cld mov ax,O rep stosw ret ENDP ENDS

.CODE

303

KOPIERE Video,Temp call Loesche ASSUME cS:_TEXT WARTE

;Name des von .CODE erzeugten Segments

KOPIERE Temp,Video mov ah,4Ch int 21h END Start

Lösung 3.10.3/4:

;Programm SegTest.ASM ;Programm mit Standard-Segmentanweisungen

WARTE

KOPIERE

DOSSEG

MACRO mov ah,8 int 21h ENDM

;sorgt für Anordnung der Segmente ;im Microsoft Standard

MACRO QUELLE,ZIEL ASSUME ds:QUELLE,es:ZIEL mov ax,QUELLE mov ds,ax mov si,O mov ax,ZIEL mov eS,ax mov di,O mov cx,80*25 cld

304

StackSeg

StackSeg

Video Video

Temp

Temp

CodeSeg2

Loesche

Loesche CodeSeg2

CodeSegl

rep movsw ENOM

SEGMENT PARA STACK 'STACK' OB 100h OUP (?) ENOS

SEGMENT AT OB800h ENOS

SEGMENT PARA PRIVATE Oll 80*25 ENOS

SEGMENT PARA PRIVATE 'CODE' ASSUME cs:CodeSeg2 PROC FAR ASSUME es:Video mov aX,Video mov eS,ax mov cx,80*25 mov di ,0 cld mov ax,O rep stosw ret ENOP ENOS

SEGMENT PARA PRIVATE 'CODE'

Lösungen zu den Aufgaben

Start: ASSUME cs:CodeSegl,ss:Stackseg,ds:NOTHING,es:NOTHING KOPIERE Video,Temp

CodeSegl

call Loesche ASSUME cs:CodeSegl IIARTE KOPIERE Temp,Video mov ah,4Ch int 2lh ENOS END Start

Lösung 3.10.3/5:

iProgramm Group1.ASM iTest der Anweisung GROUP

StackSeg SEGMENT STACK Oll 100h OUP (?)

Lösungen zu den Aufgaben

StackSeg ENDS

DatGroup GROUP Dat1,Dat2

Dat1 SEGMENT PARA Z1 OB 'A' Dat1 ENDS

Dat2 SEGMENT PARA Z2 OB 'B' Dat2 ENDS

Code SEGMENT PARA PRIVATE ASSUME cs:Code,ss:StackSeg

Ausgabe PROC NEAR mov ah,2 int 21h ret ENDP

Start: mov ax,DatGroup mov ds,ax ASSUME ds:DatGroup mov dl, [Z1] ca II Ausgabe mov dl, [Z2] ca II Ausgabe mov ah,4Ch int 21h

Code ENDS END Start

Lösung 3.10.3/6:

;Programm Group2.ASM ;Test der Anweisung GROUP

StackSeg SEGMENT STACK DW 100h DUP (?)

StackSeg ENDS

DatGroup GROUP Dat1,Dat2

Dat1 SEGMENT PARA Z1 OB 'A' Dat1 ENDS

305

306

Dat2 Z2 Dat2

UproSeg

Ausgabe

UproSeg

Code

Start:

SEGMENT PARA OB 'B' ENDS

SEGMENT ASSUME cs:UproSeg PROC FAR mov ah,2 int 21h ret ENDP ENDS

SEGMENT ASSUME cs:Code,ss:StackSeg mov aX,DatGroup mov dS,ax ASSUME ds:DatGroup mov dL, [Z1] ca LL Ausgabe mov dL, [Z2] ca LL Ausgabe mov ah,4Ch int 21h

Code ENDS END Start

Lösung 3.11.1/1:

PROGRAM AP1.PAS; {$L AP1.obj}

VAR A,B:BYTE;

PROCEDURE Pro; EXTERNAL;

BEGlf.I A:=11; B:=22; Pro; WriteLn(A:3,B:3);

END.

Lösungen zu den Aufgaben

jModuL AP1.ASM

.MODEL TPASCAL

.DATA EXTRN A:Byte,B:Byte .CODE PUBLIC Pro

Pro PROC NEAR mov at,A mov B,aL ret

Pro ENDP END

Anmerkung zu Modul API.ASM: MOV B,A ist nicht erlaubt, da MOV zwischen zwei Speicheroperanden nicht zugelassen ist.

Lösung 3.11.2/1: Assemblermodul StrFu2.ASM, das vom StrFul.PAS ein-

Lösungen zu den Aufgaben

gebunden wird.

iModul StrFu2.asm

Umkehr

Sch:

.MODEL TPASCAL

. CODE

PUBLIC Umkehr PROC NEAR ARG X:DI./ORD lds si, [bp+4J les di, [bp+8J mov cl, [ds:siJ xor ch,ch mov [es:diJ ,cl aeld si,cx inc di std lodsb cld stosb loop Sch ret ENDP

END

iZeiger auf String iZeiger auf Quellenstring nach DS:SI iZeiger auf Zielstring nach ES:DI iStringlänge nach CX

iStringlänge nach Zielstring iDS:SI zeigt auf letztes Zeichen

irückwärts lesen

ivorwärts schreiben

Lösung 3.11.6/1 zu Programm PSP2: a) Assemblermodul PSP2.ASM:

iModul PSP2.ASM

ArgAus

Sch:

.MODEL TPASCAL

.DATA EXTRN PrefixSeg:WORD . CODE PUBLI C ArgAus PROC NEAR mov aX,PrefixSeg mov eS,ax mov si,80h mov cl, [es:siJ xor ch,ch inc si

mov dl, [es:siJ mov ah,2 int 21h

iSegmentadresse des PSP .> es

i[es:siJ enthält die Anzahl der igetippten Zeichen

iZeichen mit der Funktion 2 ausgeben

307

308

ine si loop Seh ret ENDP END

Lösungen zu den Aufgaben

b) Die Bildschirmausgabe beim Aufruf von Programm PSP2.EXE mit PSP AA BB ergibt: AA BB.

Lösung 3.11.6/2: ;Programm PSP3.ASM

Seh:

.MODEL SMALL

.STACK 100h

.DATA

. CODE

mov si ,80h mov cl, [si] xor eh,eh ine si

mov dl, [si] mov ah,2 int 21h ine si loop Seh mov ah,4Ch int 21h END

Programmverzeichnis (nach Abschnitten)

3.1 Elementare Assemblerprogramme LeerPro1.ASM 158 LeerPro1.MAP 161 LeerPro1.LST 163 164 LeerPro1.EXE 164

LeerPro2.ASM 169

3.2 DOS-Funktionen über INT 2lh aufrufen StrAus1.ASM 173 StrAus2.ASM 175 StrAus3.ASM 178 StrAus3.MAP 178 StrAus4.ASM 179 CharAus1.ASM 180 TestXX.ASM 180

3.3 Adressierung Jmp1.ASM 183 ZeichenO.ASM 187 Adr1.ASM 190 Extra1.ASM 192 ZeichenD.ASM 193 ZeichenD.COM 195 Stack1.ASM 196 Adr2.ASM 198 Adr3.ASM 200 Jmplnd1.ASM 200

3.4 Wiederholungsstruktur und Auswahlstruktur CharAus2.ASM 202 CharAus3.ASM 202 CharAus4.ASM 203 CharAus5.ASM 203 CharEin1.ASM 204

3.5 Unterprogramme AscAusl.ASM 206 CharEin2.ASM 207 CharEin3.ASM 208 StkPar1.ASM 211 StkPar2.ASM 212

3.6 Eingabe von Strings StrEin1.ASM 214 StrEin2.ASM 215 Loop1.ASM 216

Include1.ASM 217 StrEinXX.ASM 218

309

310

3.7 Stringbefehle Lodsl.ASM 220 Lods2.ASM 221 Stos1.ASM 221 Stos3.ASM 222

Programmverzeichnis (nach Abschnitten)

Stos2.ASM 223 Movsl.ASM 224 Repl.ASM 225 StringXX.ASM 226

3.8 Programme mit mehreren Moduln VideoRam.ASM 228 MIX.ASM 233 Video1.ASM 229 VideolU.ASM 230 SuchlH.ASM 231 SuchlU.ASM 232 MTestX.ASM 233

3.9 Strukturtypen Strul.ASM 236 Stru2.ASM 238 Stru3.ASM 239

3.10 Segmentanweisungen StrAusSl.ASM 240 StrCopS1.ASM 241 VidRamS1.ASM 242 MultSeg1.ASM 243 MSlH.ASM 244

MSIU.ASM 245 MSlD.ASM 246

3.11 Schnittstelle zu Turbo Pascal AsmTestl.PAS 250 AsmlnPl.ASM 251 AsmTest2.PAS 252 AsmlnP2.ASM 252

AsmTest3.P AS 254 AsmlnP3.ASM 254 ParamlP.PAS 255 ParamlA.ASM 255 FunklP .P AS 256 StrPar1.PAS 257 StrParl.ASM 258 StrFunk1.P AS 259 StrFunk1.ASM 259 StrFu1.P AS 261

StrFu1.ASM 262

MllX.ASM 233 M2X.ASM 233 M3X.ASM 233 M4X.ASM 233

SegTestX.ASM 247 SegTestY.ASM 247 SegTestZ.ASM 247 SegTest.ASM 248 Groupl.ASM 248 Group2.ASM 248

StrFu2.PAS 262 StrFu2.ASM 262 Entferne.ASM 263 StrFunk2.PAS 265 StrFunk2.ASM 265 StrFunk3.ASM 268 StrFunk3.P AS 269 StrFu4.PAS 270 StrFu4.ASM 271 PSPl.PAS 272 PSP2.PAS 272 PSP3.ASM 272

3.12 Dateizugriff über den Handle HandAusl.ASM 274 Hand2.ASM 279 HandEinl.ASM 275 Handl.ASM 277

Hand3.ASM 283

Lösungen zu den Aufgaben 311

Programmverzeichnis (nach Alphabet) Adr1.ASM 190 MIX.ASM 233 StrFunk2.P AS 265 Adr2.ASM 198 M2X.ASM 233 StrFunk3.ASM 268 Adr3.ASM 200 M3X.ASM 233 StrFunk3.P AS 269 AscAus1.ASM 206 M4X.ASM 233 StringXX.ASM 226 AsmlnP1.ASM 251 Movs1.ASM 224 StrPar1.ASM 258 AsmlnP2.ASM 252 MSlD.ASM 246 StrPar1.PAS 251 AsmlnP3.ASM 254 MSlH.ASM 244 Stru1.ASM 236 AsmTest1.PAS 250 MSIU.ASM 245 Stru2.ASM 238 AsmTest2.PAS 252 MTestX.ASM 233 Stru3.ASM 239 AsmTest3.P AS 254 MultSeg1.ASM 243 SuchlH.ASM 231

SuchlU.ASM 232 CharAus1.ASM 180 ParamlA.ASM 255 CharAus2.ASM 202 ParamlP.P AS 255 TestXX.ASM 180 CharAus3.ASM 202 PSP1.PAS 212 CharAus4.ASM 203 PSP2.P AS 212 Video1.ASM 229 CharAus5.ASM 203 PSP3.ASM 212 VideolU.ASM 230 CharEin1.ASM 204 VideoRam.ASM 228 CharEin2.ASM 201 Rep1.ASM 225 VidRamSl.ASM 242 CharEin3.ASM 208

SegTest.ASM 248 ZeichenO.ASM 181 Entferne.ASM 263 SegTestX.ASM 241 ZeichenD.ASM 193 Extra1.ASM 192 SegTestY.ASM 241 ZeichenD.COM 195 Funk1P.P AS 256 SegTestZ.ASM 241

Stack1.ASM 196 Group1.ASM 248 StkPar1.ASM 211 Group2.ASM 248 StkPar2.ASM 212

Stos1.ASM 221 Hand1.ASM 211 Stos2.ASM 223 Hand2.ASM 219 Stos3.ASM 222 Hand3.ASM 283 StrAus1.ASM 113 HandAus1.ASM 214 StrAus2.ASM 115 HandEin1.ASM 215 StrAus3.ASM 118

StrAus3.MAP 118 Include1.ASM 211 StrAus4.ASM 119

StrAusS1.ASM 240 Jmp1.ASM 183 StrCopS1.ASM 241 Jmplnd1.ASM 200 StrEin1.ASM 214

StrEin2.ASM 215 LeerPro1.ASM 158 StrEinXX.ASM 218 LeerPro1.EXE 164 StrFu1.ASM 262 LeerPro1.LST 163 164 StrFu1.P AS 261 LeerPro1.MAP 161 StrFu2.ASM 262 LeerPro2.ASM 169 StrFu2.P AS 262 Lods1.ASM 220 StrFu4.ASM 211 Lods2.ASM 221 StrFu4.P AS 210 Loop1.ASM 216 StrFunk1.ASM 259

StrFunk1.P AS 259 M11X.ASM 233 StrFunk2.ASM 265

312

Sachwortverzeichnis

!Zeichen (Makro) 131 $ (Stringende) 173 214 %Ausdruck (Makro) 131 %BIN 135 %CONDS 135 %CREF ALL 136 %CREFUREF 136 %CTLS 136 %DEPTH 137 %INCL 141 %LINUM 143 %LIST 143 %MACS 144 %NEWPAGE 146 %NOCONDS 146 %NOCREF 146 %NOINCL 146 %NOLIST 146 %NOMACS 147 %NOSYMS 147 %NOTRUNC 147 %OUT 147 %PAGESIZE 148 %PCNT 148 %POPLCTL 148 %PUSHLCTL 149 %SUBTTL 152 %SYMS 152 %TABSIZE 152 %TEXT 152 %TITLE 152 %TRUNC 152 &Name (Makro) 131 o 123 .286 133 .ALPHA 134 .CODE 135 169 .CONST 135 .CREF 136 .DATA 136 .ERR 138 .FARDATA 140 .LALL 142 .LFCOND 143

.MODEL 144 168

.RADIX 149

.SALL 150

.SECOND 151

.SEQ 151

.STACK 151 169

.TFCOND 152

.TYPE 129

.xALL 153

.xLIST 153

.XREF 153 /3 (TUNK) 155 / A (TASM) 118 /B (TASM) 118 /C (TASM) 118 /C (TUNK) 154 /D (TLINK) 154 /E (TUNK) 154 /1 (TUNK) 155 /KH (TASM) 119 /L (TASM) 162 /L (TASM) 184 /L (TLINK) 155 /LA (TASM) 163 /M (TUNK) 155 /N (TUNT) 155 /S (TUNK) 155 /T (TUNK) 155 IV (TUNK) 155 /X (TUNK) 155 : (bei Label) 170 ; (Kommentar) 169 ;; (Makro) 131 <> (Struktur) 236 <Text> (Makro) 131 = (Anweisung) 134 ? (Datendefinition) 175 209 ? (Speicherplatz) 124 ??Date 133 ??Filename 133 ??Time 133 @@ (lokal) 148 279 @Code 131 @CodeSize 131

Sachwortverzeichnis

@Cpu 132 @CurSeg 132 @Data 132 175 @Data 32 @DataSize 132 @FarData 133 @WordSize 133 [] (Adressierung) 124 187 {$L} 250 16-Bit-Adresse 9 16er-Regel 26 2er-Komplement 59

A (DEBUG) 14 194 A(ux.-Bit 23 AAA 36 AAD 36 AAM 37 AAS 37 Absolute Adresse 186 Absolutes Lesen 98 Abweisende Schleife 203 ADC 37 ADD 37 Adresse (RAM) 8 Adressieren (über Label) 197 Adressierung (16 Formen) 199 Adressierung 181 f Adressierungsarten 27f Adressierungsregeln 32 Adreßregister 6 AH 5 21 188 AL 21 ALIGN 134 AND 38 124 Anweisung - Befehl 167 Anweisungen (Übersicht) 133f ARG 135254 Array (von Bytes) 272 Array 174 Array kopieren 224 226 ASM - Datei 159 164 Assembler (Aspekte) 167 Assembler (in Pascal) 250f Assembler- Dateien 164

313

Assembler-Ebene 2 Assemblerprogramm (Struktur) 121 Assemblerprogrammzeile 122 Assemblieren (Programm) 159 ASSUME 135 240 Attribut-Type (Video) 185 Aufbau (Programm) 167 Aufgaben (Lösungen) 287f Aufrufen (TASM) 159 Ausführen (DEBUG) 14 Ausgabe (Buchstaben) 202 Ausgabestatus abfragen 86 Ausgeben (String) 75 Ausgeben (Zeichen) 75 Auswahlstruktur 203 AUTOEXEC.BAT 159 AUX 274 AX 21

BAK-Datei 164 Basisindizierte Adressierung 31 Basisregister (Adresse) 199 Basisregister 21 Basisrelative Adressierung 30 Beenden (Ausführung) 161 Befehl - Anweisung 167 Befehlsregister 9 Befehlssatz (ab 80286) 33 Befehlssatz (ab 80386) 34 Befehlssatz (bis 80386) 32 Befehlssatz - Assembler 167 Befehlsübersicht 36f Bildschirm (Aufbau) 185 Bildschirm beschreiben 227 Bildschirm löschen 186 Bildschirm-RAM 20 Bildschirmausgabe 173 Bildschirmmodi 101 Bildschirmspeicher 185 247 binär - hex - dezimal 7 Binden (in Pascalprogramm) 250 Binden (Module) 160 BIOS-Funktionen (Übersicht) 10lf BIOS-Interrupt 186 Bitverknüpfung (XOR) 61

314

Block (Speicher) 19 Blocktreiber 85 Blockverschiebung 50 Booten 111 BP 21 Break - Flag setzen 81 Bus 18 BX 21 BYTE 124 BYTE PTR 189

C(arry-Bit 23 CALL (Bear) 39 CALL (direkt) 39 CALL (FAR und NEAR) 210 CALL (Far) 38 CATSTR 135 CBW 40 CGA 185 CHMOD 84 CLC 40 CLD 40 220 CLl40 CMC 40 CMP 40 CMPS (Parameter) 226 CMPSB 41 252 Code adressieren 182 Code Segment 10 Code-Byte (Video) 185 CODESEG 135 Codesegment (mit Daten) 178 Codesegmente (mehrere) 243 Codeseite lesen 96 COM - EXE 66f COM174 COMM 135 COMPACT 145 CON 274 CPU 18 CS 22 CS:IP 10 Cursor setzen 101 CWD 41 CX 21

Sachwortverzeichnis

D (DEBUG) 176 D(irection-Bit 24 DAA 41 DAS 41 DATASEG 136 Datei öffnen 82 Datei um benennen 91 Dateipuffer leeren 97 Dateitypen (Übersicht) 164 Dateiverarbeitung (Handle) 273f Dateizeiger (Position) 283 Dateizeiger 282 Daten (in Codesegment) 178 Daten (relativ zu DS) 189 Daten-jExtra-jCode-Segment 12 Datendefinition 173 Datensatz lesen 283 Datensegment (Anfang) 175 Datensegment-Modul 244 Datensegmente (mehrere) 243 Datum abfragen 79 DB 174 DB und Maschinencode 198 DD 137 DEBUG (Befehlseingabe) 14 193f DEBUG (Programm untersuchen) 12 DEBUG - Turbo Assembler 192f DEBUG 4 176 Debugger (DOS) 176 Debugger (Turbo) 165f DEC 42 Device-Remote-Test 87 DF 137 DI 21 Direction - Flag 220 221 Directory lesen 91 Direkte Adresse 186 Direkte Adressierung 28 Direkter Assembler 15 Direktindizierte Adressierung 31 Direktzugriffdatei 279 Disassemblieren 176 191 Diskette formatieren 106 Diskettenstatus 105

Sachwortverzeichnis

disp 36 Displacement 30 DISPLAY 137 DIV 42 Divisions-Rest-Verfahren 7 Doppelwort 41 DOS-Funktionen (ohne 21h) 98f DOS-Funktionen über 21h 74f DOSSEG 137 248 DQ 137 Druckausgabe 110 DS (Daten adressieren) 189 DS 22 DT 137 DT A-Adresse 78 DUP 124 DW 137 209 DWORD 124 DX 21

Editieren (Programm) 158 Einbinden (in Pascal) 250 Eingabe von Strings 213f Eingabestatus abfragen 86 Eingeben (Programm) 158 162 Eingeben (String) 75 Eingeben (Zeichen) 74 Einsprungpunkt 177 240 EMUL 137 END (2 Aufgaben) 177 END 138 END und INT 21h 161 EQ 125 EQU 138206 ERRB 138 ERRDEF 138 ERRDIF 138 ERRE 139 ERRIDN 139 ERRIF 139 Erweiterter Code 203 Erweiterter Tastaturcode 218 ES (Daten adressieren) 192 ES 22 ESC 42

EVEN 140 EXE (Dateikopf) 68 EXE - COM 66f EXE-Datei (aus OBJ) 160 EXEC-Aufruf 90f EXIT 90 EXTERNAL 250 Externe Funktion 256 EXTRN 140 231f 246 251

FAR 125 FAR JMP 184 F AR -Code 182 FAR-Prozedur 271 FAR-Zeiger - Parameter 255 FB 136 Fehlerinformation 93 Festp1atten-Reset 104 FIND FIRST 91 Flags (bei SUB) 59 Flags (bei TEST) 59 Flags - Befehle 25 Flags 6 23 FORCDUP 88 Funktionen (DOS) 74 Funktionsergebnis 256 FWORD 125

G (DEBUG) 14 G (DEBUG) 195 GE 125 GLOBAL 140 227f GROUP 140 248 GT 125

h (hexadezimal) 28 193 Handle (Zugriffsmodi) 82 83 Handle 65 273f Handle duplizieren 88 Hand1e-Funktionen 82f Handle-Remote-Test 87 Hardware-Interrupt 69 Hauptprogramm-Modul244 Hauptspeicher 8 Hercules 185

315

316

Hexadezimal (Umwandlung) 206 Hexadezimal 6 HIGH 125 High 9 Highbyte-Lowbyte 29 HLT 43 HUGE 145

I(nterrupt-Bit 24 IDEAL (umschalten) 274 IDEAL 141 225 IDIV 43 IF 141 imm 36 IMUL 43 IN 44 INC 44 INCLUDE 141 217 Include-Datei 218 Indexregister (Adresse) 199 Indexregister 21 Indirekte Adresse (Formen) 199 Indirekte Adresse 187 Indirekte Adressierung 29 Indirekter Assembler 16 Initialisieren (Struktur) 236 INSTR 142 Instruction Pointer 9 INT 21h 17lf INT nn 44INTO 45 Interrupt (Ablauf) 72 Interrupt (Prinzip) 172 Interrupt 21h (Übersicht) 74f Interruptvektor (Aufbau) 71 Interruptvektor (im RAM) 19 Interruptvektor (Übersicht) 72 IOCTL-Unterfunktionen 84f IP 6 22 IP und JMP 179 IRET 45 IRP 142

J (Sprung) 45 JA 45 203 JB 45

JBE 202 JC 45 JG 45

Sachwortverzeichnis

JMP (Formen) 183 JMP 46 JMP und IP 179 JUMPS 142

Klasse 241 Kommandozeilen-Optionen 118f Komplement - SUB 59 Kopierbefehl MOV 162 Kopieren (in Struktur) 237 Kopieren (Speicher-Register) 188 Kopieren (String) 224 Kritische Fehler 98

Label (Strukturelement) 236 Label (zur Adressierung) 197 LABEL 142 Label 170 Label-Tabelle (LST) 163 Ladebefehl MOV 162 LAHF 48 LARGE 125 145 Laufwerk benennen 78 LDS 48 LEA 48 Leerdatei erzeugen 283 Leere Struktur 236 Leeres Stacksegment 245 LENGTH 126 LES 48 Lesen (aus Datei) 277 LIFO-Datenstruktur 196 Linken (Programm) 160 Linker (Optionen) 154 Linker-Dateien 164 Listing-Datei 162 184 LOCAL 143 LOCALS 143 279 LOCK 48 Locking 94 LODSB 49 220 LODSW 221

Sachwortverzeichnis

Logische Adresse 26 Lokale Variable 267 LOOP 49 216 LOW 126 Low 9 LowbytejHighbyte-Regel 188 Löschen (Bildschirm) 186 Löschen Puffer 76 Lösungen (zu Aufgaben) 287f LSEEK 84 LST - Datei 162f LT 126

MACRO 143 236 MACRO 236 MACRO-ENDM 217 Makro (Befehlseinheit) 216 Makro 226 232 Makro-Operatoren 131 f MAP-Datei 160 164 Marke (Label) 170 174 Maschinenprogramm EXE 162 Maschinensprachebefehl 167 MASK 126 MASM 16 144 225 MEDIUM 145 mem 36 Mem-Array 272 Memory Map 19 MOD 126 Modul (in Unit) 270 Modulare Programmierung 230 Module (in Pascal) 250f Module 227f Module einbinden 250 MOV (5 Formen) 49 MOV (Speicher-Register) 188 MOVS (Parameter) 226 MOVSB 50 224 MS-DOS (Dienste) 64 MS-DOS 63f MUL 50 MUL TERRS 145 Multiplex-Interrupt 99

N (DEBUG) 195 NAME 145 NE 126 NEAR 126 NEAR JMP 184 NEAR-Code 182 NEG 51 Netzwerk - IOCTL 87 Nibble 206 Nicht-abweisende Schleife 202 NOEMUL 146 NOJUMPS 146 NOLOCALS 146 NOMASM51 147 NOMULTERRS 147 NOP (Byte füllen) 184 NOP 51 222 NOT 51 NOWARN 147

O(verflow-Bit 24 OBJ und PAS 252 OBJ-Datei 160 164 Objektmodul (OBJ) 160 OFFSET 127 173 190 ofs 36

317

Operatoren (Rangfolge) 130 Operatoren-Übersicht (TASM) 123f Optionen (Turbo Linker ) 154f OR 51 127 ORG 147 OUT 52 Overlay laden 90

P (DEBUG) 15 176 Pjarity-Bit 23 PI86 147 PAGE 148 Paragraph 150 Parameter (auf Stack) 210 254 Parameter (in BX) 206 Parameter (in Variable) 207 Parameter (MOVS) 226 Parameter (über Prozedur) 255 Parameter (von Makro) 236

318

Parameterübergabe 254 Pargraphengrenze 11 Pascal - Assembler 249f Peripherie 18 Physikalische Adresse 26 PN08087 148 POP (vom Stack) 196 POP 52 POPF 52 Port 21 44 Ports 64 Positionieren (Zeichen) 186 Printer Setup String 95 PRN 274 PROC 127 PROC-ENDP 148 Programm 167 Programm beenden 74 Programmerstellung 158 162 Programmsegmentvorsatz (PSP) 271 Programmstruktur 121 Programmzeile (Assembler) 122 Programmzeile (Aufbau) 170 Protected-Mode 110 Prozedur - Makro 217 Prozedur 149 PSP (Pascal-Zugriff) 271 PSP 65 PSS 94 PSW 23 PTR 127 136 PUBLIC 149 231f 247 Puffer löschen 76 PURGE 149 PUSH (auf Stack) 196 PUSH 52 PWORD127

Q (DEBUG) 4 Quelltext ASM 162 QUIRKS 149 QWORD128

R (DEBUG) 4 13 15 176 194 RAM 18

Sachwortverzeichnis

RAM freigeben 89 Rangfolge (Operatoren) 130 RCL 53 RCR 53 RE CORD 149 reg 36 Register (80386) 35 Register (8086) 21 Register (8086-80286) 5 Register 2 Register retten 153 Register- Adresse 187 Register-Adressierung 28 Rekursion 212 291 Relative Adresse 189 REP 54 REP MOVSB 224 REPT 150 REPZ 54 RET 55 210 RETURNS 148 ROL 55 ROM 18 ROM-BASIC 20 ROM-BASIC aufrufen 111 ROR 55 Rotation (links) 53 Rotation (rechts) 54 Rücksprungadresse 211

S(ign-Bit 24 SAHF 56 SAR 56 Satzlänge (Datei) 283 Satznummer (Datei) 283 SBB 56 SCASB 231 SCASB 57 Schachtelung (Struktur) 237 Schieben (links) 53 Schieben (rechts) 54 Schleifen 201f Schreiben (in Datei) 277 Scrollen 102 SEG 128

Sachwortverzeichnis

seg 36 SEGMENT-ENDS 150241 Segment-Tabelle (LST) 163 SegmentOffset 9 25 182 Segmentanweisung 168 239f Segmentattribute 144 Segmente (in Modulen) 244 Segmentierung 10 25 Segmentregister 6 22 Segmentregisterzuordnung 22 Sequentielle Ausgabe 282 Serielle Schnittstelle 108 SETBLOCK 89 Shift und Rotate 53 54 SHL 53 57 206 SHORT 128 SHORT JMP 184 SHR 54 57 128 SI (bei Stringeingabe) 220 SI (Stringkopie) 224 SI 21 SIZE 128 225 274 SIZESTR 151 SMALL 128 144 168 Software 2 Software-Interrupt 69 Sondertaste 204 SP 21 Speicher (Memory Map) 19 Speicher freigeben 89 Speicheraufteilung 12 Speichermodelle 182 Speicherplätze 8 Speicherverteilung 92 Sprung (in Auswahl) 204 Sprung (in Schleife) 202 Sprungbefehl 179 Sprungbefehle 183 SS 22 Stack (Rückkehradresse ) 210 Stack 196 Standard-Segmentanweisungen 240f Standardeingabe 275 Stapelzeiger 21 Starten (TASM) 159

Statische Variable 267 Status-Bits (Übersicht) 23 Statusbits - Befehle 25 Statusregister 23 STC 58 STD 58 220 STI 58 STOSB 58 221 String (Eingabe) 213f String (Parameterübergabe ) 257 String ausgeben (BIOS) 164 String ausgeben 75 String befehle 219f STRUC 236f STRUC-ENDS 151 Strukturtypen 235f SUB 58 SUBSTR 151 SUBTTL 151 Suchen von Strings 263 Symboltabelle (LST) 163 SYMTYPE 128 System bus 18

T(rap-Bit 24 TASM (Aufruf-Optionen) 118f T ASM starten 159 Tastaturcode 218 Tastaturstatus 110 TBYTE 128 TD (Register-Test) 223 TD.EXE 165f Temporäre Datei 93 TEST 59 Text ausgeben 173 THIS 129 TINY -Speichermodell 144 TITLE 152 TLINK 154f TLINK aufrufen 160 TPASCAL 145 251 Turbo Assembler 16 Turbo Debugger 165f Turbo Pascal 249f TYPE 129

319

320

U (DEBUG) 176 183 191 UDA T ASEG 152 UFARDATA 153 Uhrzeit ändern 92 Umleitung im Netz 95 Umlenkung der Eingabe 275 Unassemble (U) 176 UNION 153 Unit (mit Modul) 270 Unit (Pascal) 253 UNKNOWN 129 UNLINK 84 Unmittelbare Adressierung 27 Unterbrechung 68f Unterbrechungsprinzip 172 Unterprogramm - Makro 217 Unterprogramm-Modul244 Unterprogrammaufruf 38 Unterprogramme 205f USES 148 153

Variablenparameter 255 Verbiegen (Vektor) 70 Verbund 238 Verify-Flag setzen 80 Verzeichnis lesen 89 Verzeichnis löschen 82 Video-RAM (Aufbau) 185 Video-RAM 227 247 Videomodi 101 View (Debugger) 166 VIEW (Debugger) 223

W (DEBUG) 195 Wagenrücklauf 214 WAIT 59 91 WARN 153 Werteparameter 255 WmTH 129 Wiederholung 201 f WORD 129 WORD PTR 189 Wort-Adresse 9 Wortarray 224

XC HG 60 XLAT 60 XOR 60 129

Sachwortverzeichnis

Z(ero-Bit 23 Zahlensysteme 6 Zählerschleife 216 Zählregister 21 Zeichen ausgeben 179 Zeichen eingeben 74 Zeichen schreiben (BIOS) 102 Zeichen schreiben 186 Zeichen suchen 231 Zeichentreiber 85 Zeile (Assemblerprogramm) 122 Zeilenaufbau 170 Zeilenvorschub 214 Zeit lesen III Zugriffsmodi (Handle) 82 83 Zwischencode OBJ 162