Pokaż wyniki 1 do 2 z 2

Temat: Assembler zrozumieć kod (początkujący )

  1. #1
    Zarejestrowany
    May 2014
    Postów
    1

    Domyślnie 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

  2. #2
    Zarejestrowany
    Jan 2009
    Postów
    836

    Domyślnie

    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 - 09: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
  •  
Subskrybuj