Kompilacja : tasm prog1.asm
Linkowanie: tlink prog1.obj
Wynik: prog1.exe
Linkowanie: tlink prog1.obj
Wynik: prog1.exe
;Moj 1 program wczytuje dane z bufora i je wyswietla MODEL TINY STACK 24H DATASEG napis db "Podaj swoje imie: $" imie db 20,0,10,13,20 dup("$") enters db 10,13,"$" CODESEG START: xor ax,ax ;zerowanie ax dla pewnosci mov ax,@DATA mov ds,ax ;wyswietlenie napis lea dx,napis;mov dx,offset napis mov ah,9 int 21h ;wczytaj do imie mov ah,0ah mov dx, offset imie int 21h ;wyswietl znak powrotu karetki i nowej linii mov ah,9 mov dx,offset enters int 21h ;wyswietl dane z imie mov ah,9 mov dx, offset[imie+2] int 21h ;czekanie na znak mov ah,8 int 21h mov ah,4ch;mov ax,4c00h int 21h END START
Zacznijmy od początku, czyli deklaracji zmiennych:
napis db "Podaj swoje imie: $" imie db 20,0,20 dup("$") enters db 10,13,"$"
Pierwsza zmienna wyświetla się na początku programu i jest deklarowana jako declare byte.
Druga zmienna to ciąg bajtów w których: 20 oznacza maksymalną długość bufora, 0 będzie oznaczać realną wczytaną długość bufora z klawiatury.Z kolei 20 dup("$") dla TASM-a oznacza zadeklarowanie 20 bajtów o zawartości $. Dlaczego? Ponieważ każdy ciąg znaków w asm musi się kończyć znakiem dolara.
xor ax,ax ;zerowanie ax dla pewnosci mov ax,@DATA mov ds,ax
W tym miejscu przenosimy segment danych do rejestrów ds i ax.
;wyswietlenie napis lea dx,napis;mov dx,offset napis mov ah,9 int 21h
Tutaj wrzucamy do dx offset(przesunięcie względem segmentu) zmiennej napis, następnie do ah wrzucamy wartość 9 i wywołujemy przerwanie dos-a 21H.
;wczytaj do imie mov ah,0ah mov dx, offset imie int 21h
Tak samo jak powyżej ale korzystamy z funkcji 0Ah przerwania 21H dos-u. W rejestrze DX będzie spoczywał wpisany ciąg do bufora.
;wyswietl znak powrotu karetki i nowej linii mov ah,9 mov dx,offset enters int 21h ;wyswietl dane z imie mov ah,9 mov dx, offset[imie+2] int 21h ;czekanie na znak mov ah,8 int 21h mov ah,4ch;mov ax,4c00h int 21h
W powyższym fragmencie powtarzamy wyświetlenie danych(ah 9,int 21H) z tym, że w wyświetlaniu danych z imienia zaczynamy od 2 bajtu(0 bajt zarezerwowaliśmy na długość ciągu, 1 bajt dla faktycznej długości ciągu. Liczymy od zera of course.). Na koniec czekamy na dowolny klawisz klawiatury.
Na koniec podrzucam bardzo pomocną literaturę:
Polski kurs asm:http://rudy.mif.pg.gda.pl/~bogdro/
Zbiór wszystkich przerwań dosu:http://www.ctyme.com/intr/int.htm
Pozdrowienia!
1 comments:
Wielkie dzięki za wytłumaczenie. Tego właśnie szukałem :)
Post a Comment