[ Pobierz całość w formacie PDF ]
odwrotnym ukośnikiem \.
Dalsze przykłady:
" ([a-zA-Z0-9]+\.?)+[a-zA-Z]+@([a-zA-Z0-9]+\.)+[a-zA-Z]{2,4} - adres e-mail (zapisany tak, by login
ani domena nie kończyły się kropką)
" ([a-zA-Z]{3,6}://)?([a-zA-Z0-9/\-]+\.?)+[a-zA-Z0-9]+(#[a-zA-Z0-9\-]+)? - adres (z protokołem lub
bez) zasobu na serwerze (zapisany tak, by nie kończył się kropką, może zawierać myślniki a w
ostatnim członie także znak #)
Poprzednia część kursu (Alt+3)
Kolejna część kursu (Alt+4)
Spis treści off-line (Alt+1)
Spis treści on-line (Alt+2)
Ułatwienia dla niepełnosprawnych (Alt+0)
wiczenia
1. Napisać program zawierający 2 tablice DWORDów o wymiarach 17 na 31, po czym w trakcie
działania programu wypełnić każde pole pierwszej wartością FFEEDDCCh. Potem, 8 pierwszych
elementów skopiować do drugiej tablicy, a resztę drugiej wypełnić wartością BA098765h. Wtedy
porównać zawartość obu tablic i wyliczyć pierwszą pozycję, na której się różnią (powinna oczywiście
wynosić 9)
2. Napisać wyrażenie regularne, które opisze:
f& wszystkie wyrażenia deklaracji zmiennych: DB, DW, DP, DQ, DT
f& znacznik HTML bez atrybutów, czyli coś wyglądające tak: lub tak: (bez
spacji).
f& liczbę szesnastkową dowolnej niezerowej długości z ewentualnym przedrostkiem 0x albo (do
wyboru) przyrostkiem H lub h.
Bogdan Drozdowski 149
Bogdan Drozdowski Język asembler dla każdego 2009-02-25
150 Bogdan Drozdowski
2009-02-25 Język asembler dla każdego Bogdan Drozdowski
Jak pisać programy w języku asembler?
Część 17 - Pobieranie i wyświetlanie, czyli jak komunikować się ze światem.
O ile wyświetlanie i pobieranie od użytkownika tekstów jest łatwe do wykonania - wystarczy uruchomić tylko
jedną funkcję systemową (ah=9 i ah=0A przerwania 21h) - to pobieranie i wyświetlanie na przykład liczb
wcale nie jest takie proste i każdemu może przysporzyć problemów. W tej części podam parę algorytmów,
dzięki którym każdy powinien sobie z tym poradzić.
Wyświetlanie tekstu
(przeskocz wyświetlanie tekstu)
Co prawda wszyscy już to umieją, ale dla porządku też o tym wspomnę.
Wszyscy znają funkcję ah=9 przerwania DOSa - wystraczy podać jej łańcuch znaków zakończony znakiem
dolara, a ona wszystko sama wyświetli. Ale co, jeśli chcemy wyświetlić znak dolara? Albo nie mamy DOSa
do dyspozycji?
Otóż, są jeszcze inne funkcje służące do wyświetlania tekstu na ekranie - na przykład funkcja ah=0E
przerwania 10h (wyświetla po jednym znaku), funkcja ah=2 przerwania DOSa (wyświetla po jednym znaku),
funkcja ah=13h przerwania 10h (wyświetla całe napisy, można podać pozycję napisu i kolor każdego znaku).
Zawsze można też wyświetlać tekst ręcznie.
Pobieranie tekstu
(przeskocz pobieranie tekstu)
Do pobierania tekstów od użytkownika służyć może funkcja AH=0A przerwania DOSa. Wystarczy podać jej
adres bufora takiej konstrukcji:
bufor db 20 ; maksymalna ilość znaków do pobrania
db 0 ; tu dostaniemy, ile znaków pobrano
dane: times 22 db "$" ; miejsce na dane
DOS wczyta dane z klawiatury (co najwyżej tyle bajtów, ile podaliśmy), w drugim bajcie zwróci nam, ile
faktycznie przeczytano (Enter kończy), a od trzeciego bajtu zaczynają się same dane. Można się do nich
odwoływać albo poprzez [dane], albo poprzez [bufor+2].
Jeśli nie ma DOSa do dyspozycji, można korzystać z funkcji ah=0 przerwania klawiatury int 16h.
Wyświetlanie liczb
(przeskocz wyświetlanie liczb)
Są generalnie dwa podejścia do tego problemu:
1. dzielenie przez coraz mniejsze potęgi liczby 10 (zaczynając od najwyższej odpowiedniej) i
wyświetlanie ilorazów
2. dzielenie przez 10 i wyświetlanie reszt wspak
Podejście pierwsze jest zilustrowane takim kodem dla liczb 16-bitowych (0-65535):
Bogdan Drozdowski 151
Bogdan Drozdowski Język asembler dla każdego 2009-02-25
mov ax, [liczba]
xor dx, dx
mov cx, 10000
div cx
or al, '0'
; wyświetl AL jako znak
mov ax, dx
xor dx, dx
mov cx, 1000
div cx
or al, '0'
; wyświetl AL jako znak
mov ax, dx
mov cl, 100
div cl
or al, '0'
; wyświetl AL jako znak
mov al, ah
xor ah, ah
mov cl, 10
div cl
or ax, '00'
; wyświetl AL jako znak
; potem wyświetl AH jako znak
Jak widać, im więcej cyfr może mieć liczba, tym więcej będzie takich bloków. Trzeba zacząć od najwyższej
możliwej potęgi liczby 10, bo inaczej może dojść do przepełnienia. W każdym kroku dzielnik musi mieć o
[ Pobierz całość w formacie PDF ]