Programowanie w asemblerze 2
Transkrypt
Programowanie w asemblerze 2
WPROWADZENIE DO ARCHITEKTURY KOMPUTERÓW Zadanie: Napisać kalkulator działający na liczbach całkowitych (4 działania) liczby i znak podawane z klawiatury Instrukcje: MOV source, destination PUSH rejestr, POP rejestr ADD do_czego_dodać, co_dodać SUB do_czego_dodać, co_dodać MUL przez_co_mnożyć_ax (lub al dla 8bit) wynik dx:ax (lub ax dla 8bit) DIV przez_co dzielić_dx:ax (lub sam ax dla 8bit) wynik w ax, reszta w dx (odp. al.,ah) JMP Etykieta LOOP Etykieta zmniejsza zawartość CX o 1, jeżeli CX>0 wykonuje skok do ‘Etykieta’ CMP A,B A=B JE jump if A equal B A>B JA jump if A above B A<B JB jump if A below B JAE A>=B A<=B JBE A<>B JNE FUNKCJE DOS’u: (INT 21h): 01h - Wprowadzenie kodu ASCII ze std wejścia AH=01h, kod ASCII w AL 02h - Wypisanie kodu ASCII na std wyjście AH=02h, DL= kod ASCII 09h - Wypisanie stringu AH=09h, DS:DX – adres stringu zakończonego ‘$’ 0ah – Pobranie stringu ze std wejścia do bufora, AH=0ah, DS:DX – adres bufora PROCEDURY: Deklaracja <nazwa_procedury> PROC ;wszystkie rejestry wykorzystywane w procedurze ; TUTAJ KOD PROCEDURY ;wszystkie rejestry wykorzystywane w procedurze RET <nazwa_procedury> ENDP WYWOŁANIE PROCEDURY: CALL <nazwa_procedury> na stos (push) zdjąć ze stosu (pop) Makrodefinicje: deklaracja: nazwa MACRO lista parametrów <treść makra, sekwencja instrukcji> ENDM Wywołanie: nazwa lista parametrów Przykład Print MACRO tekst push ax push dx mov ah,9 lea dx,tekst int 21h pop dx pop ax ENDM Print moj_tekst moj_tekst db ’to jest moj tekst’,’$’