Advertisement
Guest User

Untitled

a guest
Dec 15th, 2019
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.25 KB | None | 0 0
  1. code segment
  2. assume cs:code, ss:stosik, ds:dane
  3. mov ax,dane
  4. mov ds,ax
  5. mov ax,stosik
  6. mov ss,ax
  7. mov sp,offset szczyt
  8. ;tak
  9. mov ah,09h ;wyswietlanie stringow
  10. lea dx,wiadomoscStartu ;wczytanie textu efektywnego
  11. int 21h ;wywolanie rozkazu
  12. mov ah,0Ah ;wczytanie lancucha z klawiatury
  13. lea dx,max ;pobiera jaka liczba znakow maksymalnie
  14. int 21h ;wywolanie rozkazu
  15. mov ah,09h
  16. lea dx,symbolKonca
  17. int 21h
  18. ;zerowanie rejestrow
  19. xor ax,ax
  20. xor bx,bx
  21. xor cx,cx
  22. xor dx,dx
  23. mov cl,dlugosc ;podaje dlugosc lancucha
  24.  
  25. testDlugosc:
  26. cmp dlugosc,0
  27. je pusty ;skok jesli dlugosc rowna 0
  28. jmp testCzyLiczba
  29.  
  30. pusty:
  31. mov ah,09h
  32. lea dx,bladCiagPusty
  33. int 21h
  34. mov ax,4c03h ;zakonczenie programu
  35. int 21h ;wykonanie rozkazu
  36.  
  37. testCzyLiczba:
  38. mov dl,tab[bx] ;pobranie pierwszego znaku z prawej
  39. cmp dl,'0' ;porownanie z tablica ascii z 0
  40. jl blednaLiczba ;jesli mniejsza
  41. cmp dl,'9'
  42. jg blednaLiczba ;jesli wieksza
  43. inc bx ;zwieksz bx
  44. loop testCzyLiczba
  45. xor bx,bx ;zezrowanie bx
  46. mov cl,dlugosc ;wrzuc do rejestru zliczajacego
  47. jmp testZakres
  48.  
  49. blednaLiczba:
  50. mov ah,09h
  51. lea dx,bladNieLiczba
  52. int 21h
  53. mov ax,4c02h
  54. int 21h
  55.  
  56. testZakres:
  57. mov dx,10
  58. mov ax,suma
  59. mul dx ;mnozy sume zapisana dziesietnie x10
  60. jc przekroczono ;jesli przekroczylo zakres
  61. mov dh,0 ;zeruje dh
  62. mov dl,tab[bx]
  63. sub dx,'0' ;odejmuje wartosc 0 z ascii aby otrzymac cyfre a nie znak
  64. add ax,dx ;dodaje do akumulatora liczbe a nie znak
  65. jc przekroczono ;jesli carry to za duzo i skok do bledu
  66. mov suma,ax ;dodaje do sumy zawartosc akumulatora
  67. inc bx ;zwieksza bx
  68. loop testZakres ;petla dopoki bx sie nie skonczy
  69. jmp wypiszDec
  70.  
  71. przekroczono:
  72. mov ah,09h
  73. lea dx,bladZaDuza
  74. int 21h
  75. mov ax,4c03h
  76. int 21h
  77.  
  78. wypiszDec:
  79. mov ah,09h
  80. lea dx,wiadomoscDec
  81. int 21h
  82. lea dx,tab
  83. int 21h ;wyswietla zawartosc tab
  84.  
  85. lea dx,wiadomoscBin
  86. int 21h ;maska
  87. mov ah,02h ; rozkaz wyswietla znak
  88. mov cx,16 ;licznik na 16
  89. mov bx,suma
  90. wypiszBin:
  91. rol bx,1 ;pobiera pierwszy z lewej
  92. push bx ;wrzuca na stos
  93. and bx,1 ;jak 0 to 0 jak 1 to 1
  94. add bx,'0' ;zamienia wartosc na znak
  95. mov dl,bl ;wrzuca do dl
  96. int 21h ;wyswietla znak
  97. pop bx ;sciaga ze stosu
  98.  
  99. loop wypiszBin
  100.  
  101. mov ah,09h
  102. lea dx,wiadomoscHex
  103. int 21h
  104.  
  105. mov ah,02h
  106. mov cx,4 ;licznik na 4 bopo 4 znaki bierze z 16
  107. mov bx,suma
  108. wypiszHex:
  109. rol bx,4 ;pobiera 4 znaki z lewej
  110. push bx ;wrzuca na stos
  111. and bx,15 ;porownuje kazdy znak z 1111
  112. mov dl,hex[bx] ;do dl wrzuca po kolei wartosci zeby zrobic hex
  113. int 21h ;wykonanie przerwania
  114. pop bx ;zrzucenie ze stosu
  115. loop wypiszHex
  116. mov ax,4c00h ;koniec programu
  117. int 21h
  118. code ends
  119.  
  120. dane segment
  121. wiadomoscStartu db 10,13,'Wpisz liczbe (0-65535): $'
  122. bladCiagPusty db 10,13,'Podany ciag jest pusty!$'
  123. bladNieLiczba db 10,13,'Podany ciag nie jest liczba!$'
  124. bladZaDuza db 10,13,'Podana liczba jest za duza!$'
  125. wiadomoscDec db 'Liczba dziesietnie: $'
  126. wiadomoscBin db 10,13,'Liczba binarnie: $'
  127. wiadomoscHex db 10,13,'Liczba szesnastkowo: $'
  128. hex db '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'
  129. ;hex db '0123456789ABCDEF$'
  130. symbolKonca db 10,13,'$'
  131. max db 6
  132. dlugosc db ?
  133. tab db 7 dup('$')
  134. suma dw 0
  135. db '$'
  136. dane ends
  137.  
  138. stosik segment
  139. dw 100h dup(0)
  140. szczyt Label word
  141. stosik ends
  142. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement