wtorek, 29 stycznia 2013

Wczytywanie Liczby DEC i HEX w asemblerze.

Wczytywanie liczby dziesiętnej w asemblerze. (od 4 do 5 znaków na 16 bitów)

  1. Wczytaj cyfrę (pojedynczy znak ASCII)
    xor  bx,bx
    mov  ah,0
    int  16h
  2. Odejmij od cyfry '0' by z ASCII przejść do cyfry.
    sub   ax,'0'
    push  ax
  3. Przemnóż miejsce gdzie już jest liczba razy 10
    mov  ax,10
    mul  bx
    mov  bx,ax

    pop  ax
  4. Dodaj do miejsca gdzie jest już liczba kolejną cyfre.
    add  bx,ax
Liczba jest zapisywana bo rejestru bx. Całość możemy nazwać np jako readDEC i puścić w loop 4-5 razy jeśli chcemy wczytać liczbę 16 bitową. Przy 5 obrocie pętli jc (jesli flaga carry) wyrzucamy błąd ponieważ własnie przekroczyliśmy 16 bitów w naszej zmiennej i funkcja nie wykonała się poprawnie. 


Wczytywanie liczby HEX szesnastkowej w asemblerze. (dokładnie 4 znaki, każdy po 4 bity)

  1. Wczytaj cyfrę.
    mov  cx,4

    xor  bx,bx

    wczytaj:
    mov  ah,0
    int  16h
  2. Dozwól by były to cyfry i litery tylko 0-9, A-F
    cmp  al,'0'
    jb   wczytaj

    cmp  al,'9'
    jbe  dalej9

    cmp  al,'A'
    jb   wczytaj;

    cmp  al,'F'
    jbe  dalejF;
  3. Z ASCI do Cyfry lub Litery
    dalej9:
    sub  al,'0'

    dalejF:
    sub  al,'F'
  4. Przekręć miejsce gdzie są już liczby SHL o 4 bity w lewo i dodaj nowa cyfrę.
    shl  bx,4
    add  bx,ax

    loop wczytaj; zakręć wszystkim 4 razy

Brak komentarzy:

Prześlij komentarz