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’,’$’