jeszcze - Aragorn

Transkrypt

jeszcze - Aragorn
MAKROSY
MAKROINSTRUKCJA DEFINIOWANA
Deklaracja
• Nazwa MACRO
[lista_parametrow_formalnych]
• ;tresc, sekwencja instrukcji
• ;rozkazy, dyrektywy, komentarze itd.
• ENDM
Wywołanie
Nazwa [lista_parametrów_aktualnych]
Przykład_1:
EXIT MACRO
MOV AH, 4CH
Wywołanie:
INT 21H
ENDM
...............
EXIT
Przykład_2:
NAPIS1
DB
“ALA MA KOTA”, 10, 13, „$”
• MAKROINSTRUKCJE NIEDEFINIOWANE
• DYREKTYWY I OPERATORY DODATKOWE
• STEROWANIE ASEMBLACJĄ WARUNKOWO
Składnia dyrektywy
Warunek spełniony gdy:
IF wyrażenie
Wartość wyrażenia jest równa zero
IFN wyrażenie
Wartość wyrażenia jest różna od zera
IF1
Pierwszy przebieg asemblera
IF2
Drugi przebieg asemblera
IFDEF nazwa
Nazwa została zdefiniowana
IFNDEF nazwa
Nazwa nie została zdefiniowana
IFB
Argument będący łańcuchem jest pusty (if blank)
argument
IFNB argument
Argument będący łańcuchem nie jest pusty (if not black)
IFIDN [argument1], [argument2]
Oba argumenty (łańcuchy) są identyczne
IFDIF [argument1], [argument2]
Oba argumenty (łańcuchy) są różne
OPERACJE NA
ŁAŃCUCHACH
• Grunt to konwencja że:
cel jest w ES:DI, a
źródło → DS:SI
• czyli w instrukcjach często brakuje operandów
• Prefiksy powtórzenia REP, REPZ/REPE, REPNZ/REPNE
• MOVSB, MOVSW, MOVSD kopiuje się
Bbajt/Wword/Ddbl_word z pod adresu ES:DI do DS.:SI
.MODEL SMALL
.DATA
NAPIS1 DB ' PIERWSZA LINIA, A
TERAZ:',13,10
NAPIS2 DB ' DRUGA LINIA!
,13,10,'$'
.CODE
START:
MOV AX,SEG NAPIS1
MOV DS,AX
MOV ES,AX
MOV AH,9
MOV DX,OFFSET NAPIS1
INT 21H
MOV SI , OFFSET NAPIS1
MOV DI, OFFSET NAPIS2
MOV CX, 5
REP MOVSD
MOV AH,9
MOV DX,OFFSET NAPIS1
INT 21H
MOV AH,4CH
INT 21H
END START
END
'
LODSB, LODSW, LODSD (załadowanie
AKUMOLATORA wartością spod DS.:SI =
B/W/DW loaded into register ACC)
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
.DATA
NAPIS DB ' DEMONSTRACJA UŻYCIE INSTRUKCJI LODSB',13,10,'$'
.CODE
ASSUME CS:KOD , DS:DANE
START:
MOV AX,SEG NAPIS
MOV DS,AX
MOV AH,9
; funkcja wyświetlająca napis
LEA DX,NAPIS
; załadowanie offsetu napisu
INT 21H ; wywołanie przerwania
MOV AX,DS
; przekopiowanie ds do es
MOV ES,AX
PETLA:
LODSB ; załadowanie al wartością spod DS:SI
CMP AL,'$'
; porównanie al z '$'
JE KONIEC
; jeśli równe to nie wypisuj (skacz do etykiety koniec)
MOV AH,2
; FUNKCJA WYPISUJĄCA ZNAK Z DL
MOV DL,AL
; w dl ma by† kod znaku do wyświetlenia ale mamy go w al
INT 21H
JNE PETLA
KONIEC:
MOV AH,4CH
; zakończenie programu
INT 21H
END START
END
STOSB, STOSW, STOSD: kopiowanie zawartości
AKUMOLATORA do adresu ES:DI
STOS copies the value (B/W/DW) in ACC into the
location pointed to by ES:DI
SCASB, SCASW, SCASD: porównuje AKK ze celem
(ES:DI)
OPERACJE MODYFIKACJE DANE POD
CZAS PRZESYŁANIA
MOVSX OP1, OP2
MOVZX OP1, OP2
LOOPZ, LOOPNZ (ZF, ETYKIETA)