Guest User

Untitled

a guest
May 25th, 2018
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. DOSINTR   EQU  021H
  2. EXIT      EQU  04CH
  3. OK        EQU  000H
  4. CR        EQU  00DH ;CARRIAGE RETURN (POWROT KARETKI)
  5. LF        EQU  00AH ;LINE FEED (LINIA PELNA - COS TAKIEGO)
  6.  
  7. PROGRAM SEGMENT
  8.  
  9. ASSUME CS:PROGRAM, DS:DATA, SS:STACK_
  10.  
  11. DATA SEGMENT
  12.           POLECENIE    DB 'PODAJ LICZBE W SYSTEMIE DEC : ',CR,LF,'$'
  13.           BUFOR        DB 6         ;TO CALE   | PRZERWANIE 'WIE' ILE MOZE MAX WPISAC
  14.           ILE          DB (0)       ;JEST      | FAKTYCZNA LICZBA ZNAKOW
  15.           TAB          DB 6 DUP (?) ;BUFOREM   | 5 ZNAKOW + CR (ENTER)
  16.           SUMA         DW (0)
  17.           DZIESIETNIE  DB CR,LF,'DZIESIETNIE  : $'
  18.           BINARNIE     DB CR,LF,'BINARNIE     : $'
  19.           SZESNASTKOWO DB CR,LF,'SZESNASTKOWO : $'
  20.           HEX          DB '0123456789ABCDEF' ;NIE TRZEBA $ BO TO NIE JEST DRUKOWANE
  21.           ZBYT_DUZA    DB 'PODANA LICZBA JEST ZBYT DUZA ! PODAJ LICZBE <= 65535 DEC$'
  22.           BRAK_DANYCH  DB 'NIE WPISANO ZADNEJ WARTOSCI !$'
  23.           ZLE_DANE     DB 'PODANY CIAG ZNAKOW NIE MOZE ZOSTAC '
  24.                        DB 'ZINTERPRETOWANY JAKO LICZBA !$'
  25. DATA ENDS
  26.  
  27. ;PROCEDURA (PSEUDO FUNKCJA) WYPISYWANIE LANCUCHA
  28. ;WYWOLANIE LEA  AX,POLECENIE
  29. ;          CALL WYPISZ
  30. WYPISZ PROC
  31.           MOV  DX,AX
  32.           XOR  AX,AX
  33.           MOV  AH,09H
  34.           INT  DOSINTR
  35.           RET      
  36. WYPISZ ENDP
  37.  
  38. ;TO SAMO DLA WCZYTANIA
  39. WCZYTAJ PROC
  40.           MOV  DX,AX
  41.           XOR  AX,AX
  42.           MOV  AH,0AH
  43.           INT  DOSINTR
  44.           RET
  45. WCZYTAJ ENDP
  46.  
  47. ;TO SAMO DLA POJEDYNCZEGO ZNAKU
  48. ASCI_ZNAK PROC
  49.           PUSH DX
  50.           MOV  DX,AX
  51.           XOR  AX,AX
  52.           MOV  AH,02H
  53.           INT  DOSINTR
  54.           POP  DX
  55.           RET
  56. ASCI_ZNAK ENDP
  57.  
  58. ;WYPISYWANIE BINARNIE
  59. PISZ_BIN PROC
  60.           MOV  CX,10H     ;16 ITERACJI
  61.           MOV  DX,SUMA
  62.  
  63. BIN:      PUSH DX        
  64.           AND  DX,08000H  ;WYLUSKANIE BITU NAJMLODSZEGO
  65.           CMP  DX,08000H  ;TEST CZY TO JEDYNKA
  66.           JNZ  ZERO
  67.           MOV  AX,'1'
  68.           CALL ASCI_ZNAK
  69.           JMP  DAL
  70.            
  71. ZERO:     MOV  AX,'0'
  72.           CALL ASCI_ZNAK      
  73.  
  74. DAL:      POP  DX
  75.           SHL  DX,01H
  76.           LOOP BIN        ;PUKI CX <> 0
  77.           RET
  78. PISZ_BIN ENDP
  79.  
  80. ;WYPISYWANIE SZESNASTKOWO
  81. PISZ_HEX PROC
  82.           MOV  CX,04H     ;4 ITERACJE
  83.           MOV  BX,SUMA
  84.          
  85. SZESN:    PUSH BX
  86.           AND  BX,0F000H  ;MASKOWANIE 4 BITOW
  87.           SHR  BX,0CH     ;PRZESUWANIE DO PRAWEJ
  88.           MOV  AL,HEX[BX] ;INDEXOWANIE TA LICZBA, WYPISANIE Z TABLICY HEX
  89.           CALL ASCI_ZNAK
  90.           POP  BX
  91.           SHL  BX,04H     ;PRZESUNIECIE O 4 POCZATKOWEJ WARTOSCI BX
  92.           LOOP SZESN      ;PUKI CX <> 0
  93.           RET
  94. PISZ_HEX ENDP
  95.  
  96. START:    ;STANDARDOWY POCZATEK
  97.           MOV  AX,DATA
  98.           MOV  DS,AX
  99.           MOV  AX,STACK_
  100.           MOV  SS,AX
  101.           LEA  SP,TOP
  102.           XOR  AX,AX    
  103.          
  104.           ;WPROWADZ LICZBE OR DIE !
  105.           LEA  AX,POLECENIE
  106.           CALL WYPISZ
  107.          
  108.           ;WCZYTAJ DO BUF Z KONSOLI
  109.           LEA  AX,BUFOR
  110.           CALL WCZYTAJ
  111.            
  112.           ;CZY LANCUCH JEST PUSTY
  113.           CMP  ILE,00H
  114.           JE   PUSTY
  115.          
  116.           ;BX INDEKSUJE BAJTY WEJSCIA OD 0          
  117.           XOR  BX,BX
  118.          
  119. PENTLA:   ;PRZETWARZANIE CIAGU ZNAKOW - WG ALGORYTMU Z FOTY
  120.           ;PRAWIE JAK WHILE :-D
  121.           CMP  BL,ILE
  122.           JE   DALEJ
  123.          
  124.           ;ODLOZENIE BX BO BEDZIE WYKORZYSTANY W MNOZENIU
  125.           PUSH BX
  126.          
  127.           ;MNOZENIE SUMY * 10
  128.           MOV  AX,SUMA
  129.           MOV  BX,0AH
  130.           MUL  BX
  131.           MOV  SUMA,AX
  132.           JC   ZA_DUZY
  133.          
  134.           ;MUSI BYC TU ZCIAGNIETE !
  135.           ;GDYBY DALEJ TO KRZAKI I NIEWIEM CZEMU :-P
  136.           POP  BX
  137.          
  138.           ;CZY ZNAK JEST CYFRA
  139.           XOR  AX,AX
  140.           MOV  AL,TAB[BX]
  141.           SUB  AX,'0'
  142.           CMP  AX,0AH
  143.           JNC  ZLY
  144.          
  145.           ;POWIEKSZENIE SUMY O CYFRE JEDNOSCI
  146.           ADD  SUMA,AX
  147.           JC   ZA_DUZY
  148.          
  149.           ;INKREMENTACJA INDEXU I POWROT
  150.           INC  BX
  151.           JMP  PENTLA                            
  152.  
  153. PUSTY:    ;BESZTANIE FRAJERA
  154.           LEA  AX,BRAK_DANYCH
  155.           CALL WYPISZ
  156.           JMP  KONIEC
  157.  
  158. ZLY:      ;BESZTANIE FRAJERA
  159.           LEA  AX,ZLE_DANE
  160.           CALL WYPISZ
  161.           JMP  KONIEC
  162.          
  163. ZA_DUZY:  ;BESZTANIE FRAJERA
  164.           LEA  AX,ZBYT_DUZA
  165.           CALL WYPISZ        
  166.           JMP  KONIEC
  167.  
  168. DALEJ:    ;DOPISANIE NA KONIEC '$' - TAM GDZIE ENTER
  169.           XOR  BX,BX
  170.           MOV  BL,ILE
  171.           MOV  TAB[BX],'$'
  172.          
  173.           ;PISZ TO CO Z WEJSCIA
  174.           ;CZYLI DZIESIETNIE
  175.           LEA  AX,DZIESIETNIE
  176.           CALL WYPISZ
  177.           LEA  AX,TAB
  178.           CALL WYPISZ
  179.          
  180.           ;PISZ BINARNIE
  181.           LEA  AX,BINARNIE
  182.           CALL WYPISZ
  183.           CALL PISZ_BIN
  184.          
  185.           ;PISZ SZESNASTKOWO
  186.           LEA  AX,SZESNASTKOWO
  187.           CALL WYPISZ
  188.           CALL PISZ_HEX
  189.          
  190. KONIEC:   ;GIVE DOS HIS POWER BACK OR DIE !
  191.           MOV  AL,OK
  192.           MOV  AH,EXIT
  193.           INT  DOSINTR
  194. PROGRAM ENDS
  195.  
  196. STACK_ SEGMENT
  197.           ;STOS JEDNAK MA 1024 BAJTY BO WORD MA 16 BITOW
  198.           DW 100H DUP (?)
  199.           TOP LABEL WORD
  200. STACK_ ENDS
  201.  
  202. END START
Add Comment
Please, Sign In to add comment