Advertisement
Guest User

Untitled

a guest
Dec 7th, 2019
243
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Progr                   segment
  2.                                 assume cs:Progr, ds:dane, ss:stosik
  3. start:                  mov ax,dane
  4.                                 mov ds,ax
  5.                                 mov ax,stosik
  6.                                 mov ss,ax
  7.                                 mov sp,offset szczyt
  8.                                
  9.                                 mov dx,offset wiad3
  10.                                 mov ah,09h
  11.                                 int 21h
  12.                                
  13.                                 mov dx,offset strmax
  14.                                 mov ah,0Ah
  15.                                 int 21h
  16.                                
  17.                                 mov dx,offset czysc
  18.                                 mov ah,09h
  19.                                 int 21h                       ;W tej czesci kodu wyswietlamy lancuch znakow i wprowadzamy liczbe
  20.                          
  21.                                
  22.                                 mov ax,0
  23.                                 mov bh,0
  24.                                 mov ch,0
  25.                                 mov cl,strlen ;Ilosc powtorzen petli loop1 na podstawie dlugosci liczby np '23' petla powtorzy sie 2 razy, '456' petla powtorzy sie 3 razy
  26.                                 mov di,offset string
  27. loop1:                  jcxz endf
  28.                                 dec cx
  29.                                 mov bl,ds:[di]
  30.                                 sub bl,'0' ;Odejmujemy od wartosci znak '0' przez co sprawdzamy czy wartosc jest liczba
  31.                                 jb blad1  
  32.                                 cmp bl,10  ;Ustawia flage CF
  33.                                 jae blad1  ;Jesli CF=0, wtedy wykonuje skok do blad1 czyli podany ciag znakow nie jest liczba
  34.                                 mov dx,10
  35.                                 mul dx
  36.                                 cmp dx,0    ;????Nie wiem czemu ustawia flage ZF=1
  37.                                 jnz blad2   ;Skok do bledu2 gdy ZF=1 czyli liczba nie jest 16 bitowa
  38.                                 add ax,bx
  39.                                 jc blad2
  40.                                 inc di
  41.                                 jmp loop1   ;?????? Petla wykona sie max 6 razy
  42. blad1:                   mov dx,offset wiad1
  43.                                 mov ah,09h
  44.                                 int 21h
  45.                                 mov ax,4C01h
  46.                                 int 21h
  47. blad2:                   mov dx,offset wiad2
  48.                                 mov ah,09h
  49.                                 int 21h
  50.                                 mov ax,4C01h
  51.                                 int 21h              ;Kominukaty bledu
  52. endf:                  
  53.                                
  54.                                 mov bx,ax
  55.                                
  56.                                 mov dx,offset wiad4
  57.                                 mov ah,09h
  58.                                 int 21h
  59.  
  60.                                 mov ax,bx
  61.                                 mov bx,16
  62.                                 push bx        ;Wyswieletnie tekstu wiad4
  63.                                                
  64. ncyfra:                  mov dx,0
  65.                                 div bx  ;?????A tu nie wiem co sie dzieje
  66.                                 push dx
  67.                                 cmp ax,0
  68.                                 jz wypisz
  69.                                 jmp ncyfra
  70. dodaj1:                  add dx,7
  71.                                 jmp przerw
  72. dodaj2:                   add dx,'0'
  73.                                 cmp dx,'9'
  74.                                 jg dodaj1
  75. przerw:                   mov ah,02h
  76.                                 int 21h
  77. wypisz:                 pop dx
  78.                                 cmp dx,16
  79.                                 jnge dodaj2
  80.                              
  81.                                 mov ah,01h
  82.                                 int 21h
  83.                                
  84.                                 mov ax,4C00h
  85.                                 int 21h
  86. Progr                   ends
  87.  
  88. dane                    segment
  89. strmax                  db 0EFh                          ;Segment z danmi
  90. strlen                  db 0
  91. string                  db 0F0h dup(0)
  92. wiad1                    db 'Wykryto zly znak$'
  93. wiad2                    db 'Liczba jest wieksza niz 16 bitow$'
  94. wiad3                    db 'Liczba dziesietna: $'
  95. wiad4                    db 'Liczba heksadecymalna: $'
  96. czysc                 db 13,10,'$'
  97. dane                    ends
  98.  
  99. stosik                  segment
  100.                                 dw 100h dup(0)
  101. szczyt                  Label word
  102. stosik                  ends
  103.  
  104. end start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement