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)