Guest User

Untitled

a guest
Jul 20th, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.48 KB | None | 0 0
  1. org 100h
  2.  
  3. mov si, values
  4. mov [pos_values], si
  5. mov si, keys
  6. mov [pos_keys], si
  7.  
  8. input:
  9. mov ah, 01h
  10. int 21h
  11. cmp al, byte(32)
  12. je end_key
  13. cmp al, byte(13)
  14. je end_value
  15. mov [si], al
  16. inc si
  17. jmp input
  18.  
  19. end_key:
  20. add [count], 1
  21. mov byte[si], '$'
  22. add [pos_keys], 64
  23. mov si, [pos_values]
  24. jmp input
  25.  
  26. end_value:
  27. cmp si, [pos_keys]
  28. je make_heap
  29. mov byte[si], '$'
  30. add [pos_values], 64
  31. mov si, [pos_keys]
  32. jmp input
  33.  
  34. print1:
  35. mov dl, byte(10)
  36. mov ah, 02h
  37. int 21h
  38. print:
  39. cmp [count], 0
  40. je exit
  41. dec [count]
  42. add [pos_keys], 64
  43. add [pos_values], 64
  44. mov si, [pos_keys]
  45. call print_key
  46. back1:
  47. mov dl, ' '
  48. mov ah, 02h
  49. int 21h
  50. mov si, [pos_values]
  51. jmp print_value
  52.  
  53. print_key:
  54. mov dl, [si]
  55. cmp dl, '$'
  56. je back1
  57. mov ah, 02h
  58. int 21h
  59. inc si
  60. jmp print_key
  61.  
  62. print_value:
  63. mov dl, [si]
  64. cmp dl, '$'
  65. je print1
  66. mov ah, 02h
  67. int 21h
  68. inc si
  69. jmp print_value
  70.  
  71. index:
  72. mov si, keys
  73. mov [pos_keys], si
  74. mov si, values
  75. mov [pos_values], si
  76. add [pos_keys], -64
  77. add [pos_values], -64
  78. jmp print
  79.  
  80. make_heap:
  81.  
  82. mov cx, [count]
  83. back3:
  84. mov ax, [count]
  85. mov [x], ax
  86. sub [x], cx
  87. mov ax, [x]
  88. call put
  89. loop back3
  90.  
  91. jmp sort
  92.  
  93. exit:
  94. mov ax, 4c00h
  95. int 21h
  96. ret
  97.  
  98. put:
  99. mov si, keys
  100. imul dx, ax, 64
  101. mov [position], dx
  102.  
  103. add si, [position]
  104. mov di, heap_keys
  105. add di, [position]
  106. mov [pos_heap_keys], di
  107. call copy
  108.  
  109. mov si, values
  110. add si, [position]
  111. mov di, heap_values
  112. add di, [position]
  113. mov [pos_heap_values], di
  114. call copy
  115.  
  116. jmp sift_up
  117. back4:
  118. ret
  119.  
  120.  
  121. sift_up:
  122. mov si, heap_keys
  123. mov dx, [pos_heap_keys]
  124. cmp si, [pos_heap_keys]
  125. je back4
  126.  
  127. mov di,[pos_heap_keys]
  128. sub di, si
  129. shr di, 6
  130. inc di
  131. shr di, 1
  132. shl di, 6
  133. sub di, 64
  134. mov bx, di
  135. add di, si
  136. mov ax, di
  137.  
  138. sub di, si
  139. mov si, heap_values
  140. add di, si
  141. mov bx, di
  142.  
  143. mov si, [pos_heap_keys]
  144. mov di, ax
  145.  
  146. push cx
  147. mov cx, 64
  148. repe cmpsb
  149. pop cx
  150.  
  151. jg back4
  152. call swap
  153. jmp sift_up
  154.  
  155.  
  156. swap:
  157. mov si, ax
  158. mov di, buffer
  159. call copy
  160.  
  161. mov si, [pos_heap_keys]
  162. mov di, ax
  163. call copy
  164.  
  165. mov si, buffer
  166. mov di, [pos_heap_keys]
  167. call copy
  168.  
  169. mov [pos_heap_keys], ax
  170.  
  171. mov si, bx
  172. mov di, buffer
  173. call copy
  174.  
  175. mov si, [pos_heap_values]
  176. mov di, bx
  177. call copy
  178.  
  179. mov si, buffer
  180. mov di, [pos_heap_values]
  181. call copy
  182.  
  183. mov [pos_heap_values], bx
  184.  
  185.  
  186. ret
  187.  
  188. sort:
  189.  
  190. mov ax, [count]
  191. mov cx, [count]
  192. back5:
  193. mov [count1], cx
  194. mov dx, [count1]
  195. mov ax, [count]
  196. sub ax, cx
  197. call pull
  198. back8:
  199. loop back5
  200. jmp back10
  201.  
  202. pull:
  203. mov si, heap_keys
  204. mov di, keys
  205. imul dx, ax, 64
  206. mov [position], dx
  207. add di, [position]
  208. call copy
  209.  
  210. mov si, heap_values
  211. mov di, values
  212. add di, [position]
  213. call copy
  214.  
  215. mov di, heap_keys
  216. mov si, di
  217. mov bx, [count1]
  218. imul dx, bx, 64
  219. sub dx, 64
  220. mov [position], dx
  221. add si, [position]
  222. call copy
  223.  
  224.  
  225. mov di, heap_values
  226. mov si,di
  227. add si, [position]
  228. call copy
  229.  
  230. mov si, heap_keys
  231. mov ax, si
  232. mov dx, [count1]
  233. mov bx, si
  234. sub [count1], 1
  235. jmp sift_down
  236. ret
  237.  
  238.  
  239. sift_down:
  240. mov [min], bx
  241. mov si, bx
  242.  
  243. mov di, heap_keys
  244. mov [t], di
  245. mov di, bx
  246. sub di, [t]
  247. add di, 64
  248. shr di, 6
  249. shl di, 1
  250. push di
  251. mov ax, [count1]
  252. cmp di, [count1]
  253. jg back8
  254. jmp compare_to_left
  255. back6:
  256. pop di
  257. inc di
  258. mov ax, [count1]
  259. cmp di, [count1]
  260. jg back7
  261. jmp compare_to_right
  262. back7:
  263.  
  264. cmp [min], bx
  265. je back8
  266.  
  267. mov ax, [min]
  268. mov [t], ax
  269. mov [pos_heap_keys], bx
  270. mov ax, [min]
  271.  
  272. mov si, heap_keys
  273. sub bx, si
  274. mov [pos_heap_values], bx
  275. mov si, heap_values
  276. add [pos_heap_values], si
  277.  
  278. mov si, heap_keys
  279. sub [min], si
  280. mov bx, [min]
  281. mov si, heap_values
  282. add bx, si
  283.  
  284. call swap
  285. mov bx, [t]
  286.  
  287. jmp sift_down
  288.  
  289.  
  290.  
  291. copy:
  292. push cx
  293. mov cx, 64
  294. rep movsb
  295. pop cx
  296. ret
  297.  
  298.  
  299. compare_to_left:
  300. mov si, heap_keys
  301. shl di, 6
  302. sub di, 64
  303. add di, si
  304. mov [t], di
  305. mov si, [min]
  306. push cx
  307. mov cx, 64
  308. repe cmpsb
  309. pop cx
  310. js back6
  311. mov ax, [t]
  312. mov [min], ax
  313. jmp back6
  314.  
  315. compare_to_right:
  316. mov si, heap_keys
  317. shl di, 6
  318. sub di, 64
  319. add di, si
  320. mov [t], di
  321. mov si, [min]
  322. push cx
  323. mov cx, 64
  324. repe cmpsb
  325. pop cx
  326. js back7
  327. mov ax, [t]
  328. mov [min], ax
  329. jmp back7
  330.  
  331. back10:
  332. mov si, buffer
  333. jmp seek
  334.  
  335. seek:
  336.  
  337. mov ah, 01h
  338. int 21h
  339. cmp al, byte(13)
  340. je end_word
  341. mov [si], al
  342. inc si
  343. jmp seek
  344.  
  345.  
  346. end_word:
  347. mov di, buffer
  348. cmp si, di
  349. je exit
  350. mov byte[si], '$'
  351. jmp bin_search
  352.  
  353. bin_search:
  354. mov si, keys
  355. mov [left], si
  356. imul dx, [count], 64
  357. add si, dx
  358. mov [right], si
  359. mov si, keys
  360. sub [right], si
  361. sub [left], si
  362. add [left], 64
  363. add [right], 64
  364. shr [left], 6
  365. shr [right], 6
  366. mov ax, [left]
  367. back11:
  368. inc ax
  369. mov bx, [right]
  370. cmp ax, [right]
  371. js back12
  372.  
  373.  
  374. dec ax
  375. mov si, values
  376. dec ax
  377. shl ax, 6
  378. add si, ax
  379. jmp print_answer
  380.  
  381. back12:
  382. mov bx, [left]
  383. add bx, [right]
  384. shr bx, 1
  385. mov dx, bx
  386. dec bx
  387. shl bx, 6
  388. mov si, keys
  389. add si, bx
  390. mov di, buffer
  391. mov [c], si
  392. mov bx, [si]
  393. mov dx, [di]
  394. push cx
  395. mov cx, 64
  396. repe cmpsb
  397. pop cx
  398. jg back13
  399.  
  400. mov si, keys
  401. sub [c], si
  402. add [c], 64
  403. shr [c], 6
  404.  
  405. mov bx, [c]
  406. mov [left], bx
  407. mov ax, [left]
  408. jmp back11
  409.  
  410.  
  411. back13:
  412. mov si, keys
  413. sub [c], si
  414. add [c], 64
  415. shr [c], 6
  416. mov bx, [c]
  417. mov [right], bx
  418. mov ax, [left]
  419. jmp back11
  420.  
  421. print_answer:
  422. mov dl, [si]
  423. cmp dl, '$'
  424. je back14
  425. mov ah, 02h
  426. int 21h
  427. inc si
  428. jmp print_answer
  429.  
  430. back14:
  431. mov dl, byte(10)
  432. mov ah, 02h
  433. int 21h
  434. jmp back10
  435.  
  436. position dw ?
  437. x dw ?
  438. pos_bufer dw 0
  439. count dw 0
  440. count1 dw 0
  441. c dw ?
  442. right dw ?
  443. left dw ?
  444. min dw ?
  445. pos_heap_keys dw ?
  446. pos_heap_values dw ?
  447. pos_keys dw ?
  448. t dw ?
  449. pos_values dw ?
  450. keys: rb 1024
  451. values: rb 1024
  452. heap_keys: db 1024 dup(0)
  453. heap_values: rb 1024
  454. buffer: rb 64
Add Comment
Please, Sign In to add comment