-
Assembler zrozumieć kod (początkujący )
Potrzebuję pomocy by zrozumieć i nauczyć się assemblera. Mam taki program i nie wszystko rozumiem jak dzia
.286
.model small
.stack 100h
.data
napis db 'Podaj lancuch znakow:',10,13,'$'
bufor db 100, 101 dup('$')
.code
start: mov ax,seg napis --> napis jest ładowany do ax
mov ds,ax --> ax czyli napis jest ładowany do rejetru segmentowego ds
mov ah,9 --> wyświetla w konsoli ciąg znaków
mov dx,offset napis --> 1. nie bardzo dx dostaje długość wyrazu ?
int 21h --> wywołuje przerwanie
mov ah,10 --> wczytuje dane
mov dx,offset bufor -->2. tak samo dostaje informacje o długości znaków ?
int 21h
mov ah,2 --> 3.czy to zamienia znaki na kod ascii ?
mov dl,10 --> 4. Nie wiem ?
int 21h
mov si,offset bufor -->5. si dostaje długość wyrazu ?
add si,2 --> do si dodajemy 2 bo pierwsze bity nie zawierają znaku tylko jakieś informacje
petla: mov dl,[si] -->dl przyjmuje wartość znaku z si
cmp dl,13 -->5.porównanie lecz po co i dlaczego do 13 ?
je dalej --> skok jeśli równe
cmp dl,'a' --> 6 porównanie dl do nr ASCII a ?
jb hopsa --> skok jeśli mniejsze
cmp dl,'z' --> porównanie do do nr ASCII z
ja hopsa --> skok gdy wiekszy
sub dl,32 --> odejmowanie od znaku dl 32
mov [si],dl -->7. znak przyjmuje wartość z odejmowania
hopsa: inc si --> znak si zwiększamy o jedne
jmp petla --> jest to skok typu go to
dalej: mov ah,9
mov dx,offset bufor
add dx,2
int 21h
koniec: mov ax,4c00h
int 21h
end start
Dobrze rozumiem ?
I przydała by się pomoc w zrozumieniu braków
-
1. Przerwanie 21h realizuje wyświetlenie łańcucha znajdującego się w DS : DX. Do DS załadowałeś już adres page przez akumulator(AX) linijkę wyżej - teraz trzeba załadować offset łańcucha do DX. Jak w parze DS : DX znajdzie się początek łańcucha to int21h funkcja 09h realizuje wyświetlanie go na ekraniel
2. To przerwanie po prostu daje efekt naciśnięcia entera - konkretnie wyświetla znak nowej linii NL (ASCII 10)
Poczytaj sobie o przerwaniach programowych, będziesz wiedział czemu do DH ładuje się to a do AL tamto - w opisie przerwań też jest jakie rejestry mają mieć wprowadzone jakie dane. W przypadku pk 2. DL musi mieć numer ASCII znaku w tym przypadku dostaje 10 czyli nowa linia więc będzie efekt enter'a po poprzedniej komendzie: )
Ostatnio edytowane przez Elitegroup : 08-07-2014 - 08:54
Zasady Postowania
- Nie możesz zakładać nowych tematów
- Nie możesz pisać wiadomości
- Nie możesz dodawać załączników
- Nie możesz edytować swoich postów
-
Forum Rules