Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- code segment
- assume cs:code, ss:stosik, ds:dane
- mov ax,dane
- mov ds,ax
- mov ax,stosik
- mov ss,ax
- mov sp,offset szczyt
- ;tak
- mov ah,09h ;wyswietlanie stringow
- lea dx,wiadomoscStartu ;wczytanie textu efektywnego
- int 21h ;wywolanie rozkazu
- mov ah,0Ah ;wczytanie lancucha z klawiatury
- lea dx,max ;pobiera jaka liczba znakow maksymalnie
- int 21h ;wywolanie rozkazu
- mov ah,09h
- lea dx,symbolKonca
- int 21h
- ;zerowanie rejestrow
- xor ax,ax
- xor bx,bx
- xor cx,cx
- xor dx,dx
- mov cl,dlugosc ;podaje dlugosc lancucha
- testDlugosc:
- cmp dlugosc,0
- je pusty ;skok jesli dlugosc rowna 0
- jmp testCzyLiczba
- pusty:
- mov ah,09h
- lea dx,bladCiagPusty
- int 21h
- mov ax,4c03h ;zakonczenie programu
- int 21h ;wykonanie rozkazu
- testCzyLiczba:
- mov dl,tab[bx] ;pobranie pierwszego znaku z prawej
- cmp dl,'0' ;porownanie z tablica ascii z 0
- jl blednaLiczba ;jesli mniejsza
- cmp dl,'9'
- jg blednaLiczba ;jesli wieksza
- inc bx ;zwieksz bx
- loop testCzyLiczba
- xor bx,bx ;zezrowanie bx
- mov cl,dlugosc ;wrzuc do rejestru zliczajacego
- jmp testZakres
- blednaLiczba:
- mov ah,09h
- lea dx,bladNieLiczba
- int 21h
- mov ax,4c02h
- int 21h
- testZakres:
- mov dx,10
- mov ax,suma
- mul dx ;mnozy sume zapisana dziesietnie x10
- jc przekroczono ;jesli przekroczylo zakres
- mov dh,0 ;zeruje dh
- mov dl,tab[bx]
- sub dx,'0' ;odejmuje wartosc 0 z ascii aby otrzymac cyfre a nie znak
- add ax,dx ;dodaje do akumulatora liczbe a nie znak
- jc przekroczono ;jesli carry to za duzo i skok do bledu
- mov suma,ax ;dodaje do sumy zawartosc akumulatora
- inc bx ;zwieksza bx
- loop testZakres ;petla dopoki bx sie nie skonczy
- jmp wypiszDec
- przekroczono:
- mov ah,09h
- lea dx,bladZaDuza
- int 21h
- mov ax,4c03h
- int 21h
- wypiszDec:
- mov ah,09h
- lea dx,wiadomoscDec
- int 21h
- lea dx,tab
- int 21h ;wyswietla zawartosc tab
- lea dx,wiadomoscBin
- int 21h ;maska
- mov ah,02h ; rozkaz wyswietla znak
- mov cx,16 ;licznik na 16
- mov bx,suma
- wypiszBin:
- rol bx,1 ;pobiera pierwszy z lewej
- push bx ;wrzuca na stos
- and bx,1 ;jak 0 to 0 jak 1 to 1
- add bx,'0' ;zamienia wartosc na znak
- mov dl,bl ;wrzuca do dl
- int 21h ;wyswietla znak
- pop bx ;sciaga ze stosu
- loop wypiszBin
- mov ah,09h
- lea dx,wiadomoscHex
- int 21h
- mov ah,02h
- mov cx,4 ;licznik na 4 bopo 4 znaki bierze z 16
- mov bx,suma
- wypiszHex:
- rol bx,4 ;pobiera 4 znaki z lewej
- push bx ;wrzuca na stos
- and bx,15 ;porownuje kazdy znak z 1111
- mov dl,hex[bx] ;do dl wrzuca po kolei wartosci zeby zrobic hex
- int 21h ;wykonanie przerwania
- pop bx ;zrzucenie ze stosu
- loop wypiszHex
- mov ax,4c00h ;koniec programu
- int 21h
- code ends
- dane segment
- wiadomoscStartu db 10,13,'Wpisz liczbe (0-65535): $'
- bladCiagPusty db 10,13,'Podany ciag jest pusty!$'
- bladNieLiczba db 10,13,'Podany ciag nie jest liczba!$'
- bladZaDuza db 10,13,'Podana liczba jest za duza!$'
- wiadomoscDec db 'Liczba dziesietnie: $'
- wiadomoscBin db 10,13,'Liczba binarnie: $'
- wiadomoscHex db 10,13,'Liczba szesnastkowo: $'
- hex db '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'
- ;hex db '0123456789ABCDEF$'
- symbolKonca db 10,13,'$'
- max db 6
- dlugosc db ?
- tab db 7 dup('$')
- suma dw 0
- db '$'
- dane ends
- stosik segment
- dw 100h dup(0)
- szczyt Label word
- stosik ends
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement