crypt.asm 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. jumps
  2. .model small
  3. .code
  4. org 100h
  5. start: mov di, 80h
  6. cmp byte ptr [di], 0
  7. je errusg
  8. mov al, [di]
  9. mov ah, 0
  10. mov dx, ax
  11. dec dx
  12. mov di, 82h
  13. mov si, offset fname1
  14. mov cx, 0
  15. loop1: mov al, [di]
  16. mov [si], al
  17. inc di
  18. inc si
  19. inc cx
  20. cmp cx, dx
  21. je errusg
  22. cmp byte ptr [di], ' '
  23. je nextloop2
  24. jmp loop1
  25. nextloop2:
  26. mov byte ptr [si], 0
  27. loop2: inc di
  28. inc cx
  29. cmp byte ptr [di], ' '
  30. je loop2
  31. mov si, offset fname2
  32. loop3: mov al, [di]
  33. mov [si], al
  34. inc di
  35. inc si
  36. inc cx
  37. cmp cx, dx
  38. je begcopy
  39. cmp byte ptr [di], ' '
  40. je begcopy
  41. jmp loop3
  42. begcopy:mov byte ptr [si], 0
  43. mov ah, 09h
  44. mov dx, offset inpstr
  45. int 21h
  46. mov si, offset passwd
  47. mov di, 0
  48. loop4: mov ah, 08h
  49. int 21h
  50. cmp al, 0dh
  51. je passend
  52. mov [si], al
  53. inc si
  54. inc di
  55. mov ah, 02h
  56. mov dl, '*'
  57. int 21h
  58. jmp loop4
  59. passend:mov si, offset passlen
  60. mov ax, di
  61. mov byte ptr [si],al
  62. mov ax, 3d00h
  63. mov dx, offset fname1
  64. int 21h
  65. jc openerr
  66. mov si, ax
  67. mov ah, 3ch
  68. mov cx, 0
  69. mov dx, offset fname2
  70. int 21h
  71. jc openerr
  72. mov di, ax
  73. ;---------------------------------------------
  74. loop8: mov bx, si
  75. mov ah, 3fh
  76. mov dx, offset buf
  77. mov cx, 255
  78. int 21h
  79. PUSH ax
  80. PUSH bx
  81. PUSH dx
  82. PUSH si
  83. PUSH di
  84. mov si, offset passwd
  85. mov di, offset passlen
  86. mov dl, [di]
  87. mov dh, 0
  88. mov di, offset buf
  89. mov cx, ax
  90. mov bx, 0
  91. loop5: mov al, [si]
  92. xor [di], al
  93. inc di
  94. inc si
  95. inc bx
  96. mov al, bl
  97. mov ah, 0
  98. div dl
  99. cmp ah, 0
  100. je newchange
  101. contin: cmp bx, cx
  102. je looopend
  103. jmp loop5
  104. newchange:
  105. mov si, offset passwd
  106. jmp contin
  107. looopend:
  108. POP di
  109. POP si
  110. POP dx
  111. POP bx
  112. POP ax
  113. mov ah, 40h
  114. mov bx, di
  115. int 21h
  116. cmp ax, 255
  117. jb loopend
  118. jmp loop8
  119. loopend:mov bx,si
  120. mov ah, 3eh
  121. int 21h
  122. mov bx, di
  123. mov ah, 3eh
  124. int 21h
  125. int 20h
  126. ;---------------------------------------
  127. errusg: mov ah, 09h
  128. mov dx, offset errstr
  129. int 21h
  130. int 20h
  131. openerr:mov ah, 09h
  132. mov dx, offset errstr2
  133. int 21h
  134. int 20h
  135. errstr db 'usage: "crypt.exe source dest"$'
  136. errstr2 db 'File not found!$'
  137. inpstr db 'Enter the password:$'
  138. passwd db 50 dup (?)
  139. passlen db ?
  140. fname1 db 13 dup (?)
  141. fname2 db 13 dup (?)
  142. buf db 256 dup (?)
  143. end start