Advertisement
Guest User

fastorialtest

a guest
Jul 31st, 2015
208
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 17.93 KB | None | 0 0
  1. ; Generated by toASM
  2. KERN_INT equ 80h
  3. SYS_OUT equ 4
  4. SYS_IN equ 3
  5. SYS_EXIT equ 1
  6. STDOUT equ 1
  7. STDIN equ 0
  8.  
  9. section .data
  10. _s0 db "WIDTH: "
  11. _len0 equ $-_s0
  12. _s1 db "HEIGHT: "
  13. _len1 equ $-_s1
  14. _s2 db "Total positions = "
  15. _len2 equ $-_s2
  16. _s3 db "",10,""
  17. _len3 equ $-_s3
  18. _s4 db "Depth\tPositions",10,"0\t\t1",10,""
  19. _len4 equ $-_s4
  20. _s5 db "kek"
  21. _len5 equ $-_s5
  22.  
  23. section .bss
  24. _sbuf resb 255
  25. _ibuf resd 1
  26. _vsbuf resd 1
  27. _a0 resd 9
  28. _i0 resd 1 ;gap
  29. _vs0 resd 1
  30. _i1 resd 1 ;t
  31. _vs1 resd 1
  32. _i2 resd 1 ;i
  33. _vs2 resd 1
  34. _i3 resd 1 ;j
  35. _vs3 resd 1
  36. _i4 resd 1 ;buffer
  37. _vs4 resd 1
  38. _i5 resd 1 ;buf
  39. _vs5 resd 1
  40. _i6 resd 1 ;buf2
  41. _vs6 resd 1
  42. _i7 resd 1 ;a
  43. _vs7 resd 1
  44. _i8 resd 1 ;b
  45. _vs8 resd 1
  46. _i9 resd 1 ;w
  47. _vs9 resd 1
  48. _i10 resd 1 ;h
  49. _vs10 resd 1
  50. _i11 resd 1 ;size
  51. _vs11 resd 1
  52. _i12 resd 1 ;_size
  53. _vs12 resd 1
  54. _i13 resd 1 ;__size
  55. _vs13 resd 1
  56. _i14 resd 1 ;totpositions
  57. _vs14 resd 1
  58. _i15 resd 1 ;cnt
  59. _vs15 resd 1
  60. _i16 resd 1 ;NEW_STATE
  61. _vs16 resd 1
  62. _a1 resd 500000000
  63. _i17 resd 1 ;index
  64. _vs17 resd 1
  65. _i18 resd 1 ;currentDepth
  66. _vs18 resd 1
  67. _i19 resd 1 ;newPositions
  68. _vs19 resd 1
  69. _i20 resd 1 ;aa
  70. _vs20 resd 1
  71. _i21 resd 1 ;.buf
  72. _vs21 resd 1
  73. _i22 resd 1 ;.buf2
  74. _vs22 resd 1
  75. _i23 resd 1 ;.buf3
  76. _vs23 resd 1
  77.  
  78. section .text
  79. global _start
  80. _start:
  81. ;assign(t,0)
  82. mov eax, 0
  83. mov [_i1], eax
  84. ;assign(i,0)
  85. mov eax, 0
  86. mov [_i2], eax
  87. ;print("WIDTH: ")
  88. mov ecx, _s0
  89. mov edx, _len0
  90. call _print
  91.  
  92. ;read(w)
  93. mov ecx, _sbuf
  94. mov edx, 255
  95. call _read
  96.  
  97. mov eax, [_vsbuf]
  98. mov [_vs9], eax
  99. call string_to_int
  100. mov eax, [_ibuf]
  101. mov [_i9], eax
  102. ;print("HEIGHT: ")
  103. mov ecx, _s1
  104. mov edx, _len1
  105. call _print
  106.  
  107. ;read(h)
  108. mov ecx, _sbuf
  109. mov edx, 255
  110. call _read
  111.  
  112. mov eax, [_vsbuf]
  113. mov [_vs10], eax
  114. call string_to_int
  115. mov eax, [_ibuf]
  116. mov [_i10], eax
  117. ;assign(size,w)
  118. mov eax, [_i9]
  119. mov [_i11], eax
  120. ;mul(size,h)
  121. mov eax, [_i11]
  122. imul eax, [_i10]
  123. mov [_i11], eax
  124. ;assign(_size, size)
  125. mov eax, [_i11]
  126. mov [_i12], eax
  127. ;assign(__size, size)
  128. mov eax, [_i11]
  129. mov [_i13], eax
  130. ;inc(__size)
  131. inc DWORD [_i13]
  132. ;dec(_size)
  133. dec DWORD [_i12]
  134. ;while(i[<]size)[ assign(buf,i) | inc(buf) | assign_array(tiles, i, buf) | inc(i)]
  135. mov eax, [_i2]
  136. mov ebx, [_i11]
  137. cmp eax, ebx
  138. jl ._loop2 ;Depth 0->1
  139. jmp ._loop3
  140. ._loop2: ;LOOP @ Depth=1
  141. ;assign(buf,i)
  142. mov eax, [_i2]
  143. mov [_i5], eax
  144. ;inc(buf)
  145. inc DWORD [_i5]
  146. ;assign_array(tiles, i, buf)
  147. mov eax, [_i5]
  148. mov ebx, [_i2]
  149. mov [_a0+ebx*4], eax
  150. ;inc(i)
  151. inc DWORD [_i2]
  152. ;loop if i<size
  153. mov eax, [_i2]
  154. mov ebx, [_i11]
  155. cmp eax, ebx
  156. jl ._loop2
  157. ._loop3:
  158. ;assign(i,0)
  159. mov eax, 0
  160. mov [_i2], eax
  161. ;while(i[<]size)[assign(buffer,size)|dec(buffer,i)|mul(t,buffer)|assign(buf2, i)|inc(buf2)|assign(j,buf2)|while(j[<]size)[arr(a,tiles,i)|arr(b,tiles,j)|if(a[>]b) [inc(t)]|inc(j)] | inc(i)]
  162. mov eax, [_i2]
  163. mov ebx, [_i11]
  164. cmp eax, ebx
  165. jl ._loop4 ;Depth 0->1
  166. jmp ._loop5
  167. ._loop4: ;LOOP @ Depth=1
  168. ;assign(buffer,size)
  169. mov eax, [_i11]
  170. mov [_i4], eax
  171. ;dec(buffer,i)
  172. mov eax, [_i4]
  173. sub DWORD eax, [_i2]
  174. mov [_i4], eax
  175. ;mul(t,buffer)
  176. mov eax, [_i1]
  177. imul eax, [_i4]
  178. mov [_i1], eax
  179. ;assign(buf2, i)
  180. mov eax, [_i2]
  181. mov [_i6], eax
  182. ;inc(buf2)
  183. inc DWORD [_i6]
  184. ;assign(j,buf2)
  185. mov eax, [_i6]
  186. mov [_i3], eax
  187. ;while(j[<]size)[arr(a,tiles,i)|arr(b,tiles,j)|if(a[>]b) [inc(t)]|inc(j)]
  188. mov eax, [_i3]
  189. mov ebx, [_i11]
  190. cmp eax, ebx
  191. jl ._loop6 ;Depth 1->2
  192. jmp ._loop7
  193. ._loop6: ;LOOP @ Depth=2
  194. ;arr(a,tiles,i)
  195. mov eax, [_i2]
  196. imul eax, eax, 4
  197. add eax, _a0
  198. mov ebx, [eax]
  199. mov [_i7], ebx
  200. ;arr(b,tiles,j)
  201. mov eax, [_i3]
  202. imul eax, eax, 4
  203. add eax, _a0
  204. mov ebx, [eax]
  205. mov [_i8], ebx
  206. ;if(a[>]b) [inc(t)]
  207. mov eax, [_i7]
  208. mov ebx, [_i8]
  209. cmp eax, ebx
  210. jg ._loop8 ;Depth 2->3
  211. jmp ._loop9
  212. ._loop8: ;OK @ Depth=3
  213. ;inc(t)
  214. inc DWORD [_i1]
  215. jmp ._loop10
  216. ._loop9: ;ELSE @ Depth=3
  217. ._loop10:
  218. ;inc(j)
  219. inc DWORD [_i3]
  220. ;loop if j<size
  221. mov eax, [_i3]
  222. mov ebx, [_i11]
  223. cmp eax, ebx
  224. jl ._loop6
  225. ._loop7:
  226. ;inc(i)
  227. inc DWORD [_i2]
  228. ;loop if i<size
  229. mov eax, [_i2]
  230. mov ebx, [_i11]
  231. cmp eax, ebx
  232. jl ._loop4
  233. ._loop5:
  234. ;assign_array(tiles,_size,1)
  235. mov eax, 1
  236. mov ebx, [_i12]
  237. mov [_a0+ebx*4], eax
  238. ;assign(i,_size)
  239. mov eax, [_i12]
  240. mov [_i2], eax
  241. ;while(i[>=]1)[assign(buf,i)|dec(buf) | assign(buffer, __size) | dec(buffer,i) | assign(buf2, t) | mod(buf2, buffer)| inc(buf2) | assign_array(tiles,buf,buf2) | assign(buffer, __size) | dec(buffer,i) | div(t,buffer) | assign(j,i) | inc(j) | while(j[<=]size)[ dec(i) | dec(j) | arr(a,tiles,i) | arr(b,tiles,j) | if(b[>=]a)[inc(b) | assign_array(tiles,j,b)] | inc(j) | inc(i) | inc(j)] |dec(i)]
  242. mov eax, [_i2]
  243. mov ebx, 1
  244. cmp eax, ebx
  245. jge ._loop12 ;Depth 0->1
  246. jmp ._loop13
  247. ._loop12: ;LOOP @ Depth=1
  248. ;assign(buf,i)
  249. mov eax, [_i2]
  250. mov [_i5], eax
  251. ;dec(buf)
  252. dec DWORD [_i5]
  253. ;assign(buffer, __size)
  254. mov eax, [_i13]
  255. mov [_i4], eax
  256. ;dec(buffer,i)
  257. mov eax, [_i4]
  258. sub DWORD eax, [_i2]
  259. mov [_i4], eax
  260. ;assign(buf2, t)
  261. mov eax, [_i1]
  262. mov [_i6], eax
  263. ;mod(buf2, buffer)
  264. xor edx, edx
  265. mov eax, [_i6]
  266. idiv DWORD [_i4]
  267. mov [_i6], edx
  268. ;inc(buf2)
  269. inc DWORD [_i6]
  270. ;assign_array(tiles,buf,buf2)
  271. mov eax, [_i6]
  272. mov ebx, [_i5]
  273. mov [_a0+ebx*4], eax
  274. ;assign(buffer, __size)
  275. mov eax, [_i13]
  276. mov [_i4], eax
  277. ;dec(buffer,i)
  278. mov eax, [_i4]
  279. sub DWORD eax, [_i2]
  280. mov [_i4], eax
  281. ;div(t,buffer)
  282. xor edx, edx
  283. mov eax, [_i1]
  284. idiv DWORD [_i4]
  285. mov [_i1], eax
  286. ;assign(j,i)
  287. mov eax, [_i2]
  288. mov [_i3], eax
  289. ;inc(j)
  290. inc DWORD [_i3]
  291. ;while(j[<=]size)[ dec(i) | dec(j) | arr(a,tiles,i) | arr(b,tiles,j) | if(b[>=]a)[inc(b) | assign_array(tiles,j,b)] | inc(j) | inc(i) | inc(j)]
  292. mov eax, [_i3]
  293. mov ebx, [_i11]
  294. cmp eax, ebx
  295. jle ._loop14 ;Depth 1->2
  296. jmp ._loop15
  297. ._loop14: ;LOOP @ Depth=2
  298. ;dec(i)
  299. dec DWORD [_i2]
  300. ;dec(j)
  301. dec DWORD [_i3]
  302. ;arr(a,tiles,i)
  303. mov eax, [_i2]
  304. imul eax, eax, 4
  305. add eax, _a0
  306. mov ebx, [eax]
  307. mov [_i7], ebx
  308. ;arr(b,tiles,j)
  309. mov eax, [_i3]
  310. imul eax, eax, 4
  311. add eax, _a0
  312. mov ebx, [eax]
  313. mov [_i8], ebx
  314. ;if(b[>=]a)[inc(b) | assign_array(tiles,j,b)]
  315. mov eax, [_i8]
  316. mov ebx, [_i7]
  317. cmp eax, ebx
  318. jge ._loop16 ;Depth 2->3
  319. jmp ._loop17
  320. ._loop16: ;OK @ Depth=3
  321. ;inc(b)
  322. inc DWORD [_i8]
  323. ;assign_array(tiles,j,b)
  324. mov eax, [_i8]
  325. mov ebx, [_i3]
  326. mov [_a0+ebx*4], eax
  327. jmp ._loop18
  328. ._loop17: ;ELSE @ Depth=3
  329. ._loop18:
  330. ;inc(j)
  331. inc DWORD [_i3]
  332. ;inc(i)
  333. inc DWORD [_i2]
  334. ;inc(j)
  335. inc DWORD [_i3]
  336. ;loop if j<=size
  337. mov eax, [_i3]
  338. mov ebx, [_i11]
  339. cmp eax, ebx
  340. jle ._loop14
  341. ._loop15:
  342. ;dec(i)
  343. dec DWORD [_i2]
  344. ;loop if i>=1
  345. mov eax, [_i2]
  346. mov ebx, 1
  347. cmp eax, ebx
  348. jge ._loop12
  349. ._loop13:
  350. ;while(i[<]size)[arr(a,tiles,i) | if(a[==]size)[assign(gap, i)] | inc(i)]
  351. mov eax, [_i2]
  352. mov ebx, [_i11]
  353. cmp eax, ebx
  354. jl ._loop20 ;Depth 0->1
  355. jmp ._loop21
  356. ._loop20: ;LOOP @ Depth=1
  357. ;arr(a,tiles,i)
  358. mov eax, [_i2]
  359. imul eax, eax, 4
  360. add eax, _a0
  361. mov ebx, [eax]
  362. mov [_i7], ebx
  363. ;if(a[==]size)[assign(gap, i)]
  364. mov eax, [_i7]
  365. mov ebx, [_i11]
  366. cmp eax, ebx
  367. je ._loop22 ;Depth 1->2
  368. jmp ._loop23
  369. ._loop22: ;OK @ Depth=2
  370. ;assign(gap, i)
  371. mov eax, [_i2]
  372. mov [_i0], eax
  373. jmp ._loop24
  374. ._loop23: ;ELSE @ Depth=2
  375. ._loop24:
  376. ;inc(i)
  377. inc DWORD [_i2]
  378. ;loop if i<size
  379. mov eax, [_i2]
  380. mov ebx, [_i11]
  381. cmp eax, ebx
  382. jl ._loop20
  383. ._loop21:
  384. ;assign(cnt,1)
  385. mov eax, 1
  386. mov [_i15], eax
  387. ;assign(NEW_STATE, 255)
  388. mov eax, 255
  389. mov [_i16], eax
  390. ;assign(totpositions, 1)
  391. mov eax, 1
  392. mov [_i14], eax
  393. ;while(cnt[<=]size)[ mul(totpositions,cnt) | inc(cnt)]
  394. mov eax, [_i15]
  395. mov ebx, [_i11]
  396. cmp eax, ebx
  397. jle ._loop26 ;Depth 0->1
  398. jmp ._loop27
  399. ._loop26: ;LOOP @ Depth=1
  400. ;mul(totpositions,cnt)
  401. mov eax, [_i14]
  402. imul eax, [_i15]
  403. mov [_i14], eax
  404. ;inc(cnt)
  405. inc DWORD [_i15]
  406. ;loop if cnt<=size
  407. mov eax, [_i15]
  408. mov ebx, [_i11]
  409. cmp eax, ebx
  410. jle ._loop26
  411. ._loop27:
  412. ;print("Total positions = ".totpositions."\n")
  413. mov ecx, _s2
  414. mov edx, _len2
  415. call _print
  416.  
  417. mov eax, [_i14]
  418. mov [_ibuf], eax
  419. mov eax, [_vs14]
  420. mov [_vsbuf], eax
  421. call int_to_string
  422. mov eax, [_vsbuf]
  423. mov [_vs14], eax
  424. inc DWORD [_vs14]
  425. mov ecx, _sbuf
  426. mov edx, [_vs14]
  427. call _print
  428. dec DWORD [_vs14]
  429. mov ecx, _s3
  430. mov edx, _len3
  431. call _print
  432.  
  433. ;assign(cnt,0)
  434. mov eax, 0
  435. mov [_i15], eax
  436. ;while(cnt[<]totpositions)[assign_array(positions,cnt,NEW_STATE) | inc(cnt)]
  437. mov eax, [_i15]
  438. mov ebx, [_i14]
  439. cmp eax, ebx
  440. jl ._loop28 ;Depth 0->1
  441. jmp ._loop29
  442. ._loop28: ;LOOP @ Depth=1
  443. ;assign_array(positions,cnt,NEW_STATE)
  444. mov eax, [_i16]
  445. mov ebx, [_i15]
  446. mov [_a1+ebx*4], eax
  447. ;inc(cnt)
  448. inc DWORD [_i15]
  449. ;loop if cnt<totpositions
  450. mov eax, [_i15]
  451. mov ebx, [_i14]
  452. cmp eax, ebx
  453. jl ._loop28
  454. ._loop29:
  455. ;assign(i,0)
  456. mov eax, 0
  457. mov [_i2], eax
  458. ;while(i[<]size)[assign(buffer,size)|dec(buffer,i)|mul(t,buffer)|assign(buf2, i)|inc(buf2)|assign(j,buf2)|while(j[<]size)[arr(a,tiles,i)|arr(b,tiles,j)|if(a[>]b) [inc(t)]|inc(j)] | inc(i)]
  459. mov eax, [_i2]
  460. mov ebx, [_i11]
  461. cmp eax, ebx
  462. jl ._loop30 ;Depth 0->1
  463. jmp ._loop31
  464. ._loop30: ;LOOP @ Depth=1
  465. ;assign(buffer,size)
  466. mov eax, [_i11]
  467. mov [_i4], eax
  468. ;dec(buffer,i)
  469. mov eax, [_i4]
  470. sub DWORD eax, [_i2]
  471. mov [_i4], eax
  472. ;mul(t,buffer)
  473. mov eax, [_i1]
  474. imul eax, [_i4]
  475. mov [_i1], eax
  476. ;assign(buf2, i)
  477. mov eax, [_i2]
  478. mov [_i6], eax
  479. ;inc(buf2)
  480. inc DWORD [_i6]
  481. ;assign(j,buf2)
  482. mov eax, [_i6]
  483. mov [_i3], eax
  484. ;while(j[<]size)[arr(a,tiles,i)|arr(b,tiles,j)|if(a[>]b) [inc(t)]|inc(j)]
  485. mov eax, [_i3]
  486. mov ebx, [_i11]
  487. cmp eax, ebx
  488. jl ._loop32 ;Depth 1->2
  489. jmp ._loop33
  490. ._loop32: ;LOOP @ Depth=2
  491. ;arr(a,tiles,i)
  492. mov eax, [_i2]
  493. imul eax, eax, 4
  494. add eax, _a0
  495. mov ebx, [eax]
  496. mov [_i7], ebx
  497. ;arr(b,tiles,j)
  498. mov eax, [_i3]
  499. imul eax, eax, 4
  500. add eax, _a0
  501. mov ebx, [eax]
  502. mov [_i8], ebx
  503. ;if(a[>]b) [inc(t)]
  504. mov eax, [_i7]
  505. mov ebx, [_i8]
  506. cmp eax, ebx
  507. jg ._loop34 ;Depth 2->3
  508. jmp ._loop35
  509. ._loop34: ;OK @ Depth=3
  510. ;inc(t)
  511. inc DWORD [_i1]
  512. jmp ._loop36
  513. ._loop35: ;ELSE @ Depth=3
  514. ._loop36:
  515. ;inc(j)
  516. inc DWORD [_i3]
  517. ;loop if j<size
  518. mov eax, [_i3]
  519. mov ebx, [_i11]
  520. cmp eax, ebx
  521. jl ._loop32
  522. ._loop33:
  523. ;inc(i)
  524. inc DWORD [_i2]
  525. ;loop if i<size
  526. mov eax, [_i2]
  527. mov ebx, [_i11]
  528. cmp eax, ebx
  529. jl ._loop30
  530. ._loop31:
  531. ;assign_array(positions,t,0)
  532. mov eax, 0
  533. mov ebx, [_i1]
  534. mov [_a1+ebx*4], eax
  535. ;assign(currentDepth,0)
  536. mov eax, 0
  537. mov [_i18], eax
  538. ;print("Depth\tPositions\n0\t\t1\n")
  539. mov ecx, _s4
  540. mov edx, _len4
  541. call _print
  542.  
  543. ;exit(1)
  544. mov ebx, 1 ;Return code
  545. jmp ._exit_point
  546. ;do_while(newPositions[!=]0)[assign(aa,0) |assign(newPositions,0) |while(aa[<]totpositions)[arr(.buf, positions, aa)|if(.buf[==]currentDepth)[assign_array(tiles,_size,1)|assign(i,_size)|while(i[>=]1)[assign(buf,i)|dec(buf) | assign(buffer, __size) | dec(buffer,i) | assign(buf2, t) | mod(buf2, buffer)| inc(buf2) | assign_array(tiles,buf,buf2) | assign(buffer, __size) | dec(buffer,i) | div(t,buffer) | assign(j,i) | inc(j) | while(j[<=]size)[ dec(i) | dec(j) | arr(a,tiles,i) | arr(b,tiles,j) | if(b[>=]a)[inc(b) | assign_array(tiles,j,b)] | inc(j) | inc(i) | inc(j)] |dec(i)]| while(i[<]size)[arr(a,tiles,i) | if(a[==]size)[assign(gap, i)] | inc(i)]| assign(i,0)| while(i[<=]4)[print("kek")]]|inc(aa)]]
  547. ._loop38: ;LOOP @ Depth=1
  548. ;assign(aa,0)
  549. mov eax, 0
  550. mov [_i20], eax
  551. ;assign(newPositions,0)
  552. mov eax, 0
  553. mov [_i19], eax
  554. ;while(aa[<]totpositions)[arr(.buf, positions, aa)|if(.buf[==]currentDepth)[assign_array(tiles,_size,1)|assign(i,_size)|while(i[>=]1)[assign(buf,i)|dec(buf) | assign(buffer, __size) | dec(buffer,i) | assign(buf2, t) | mod(buf2, buffer)| inc(buf2) | assign_array(tiles,buf,buf2) | assign(buffer, __size) | dec(buffer,i) | div(t,buffer) | assign(j,i) | inc(j) | while(j[<=]size)[ dec(i) | dec(j) | arr(a,tiles,i) | arr(b,tiles,j) | if(b[>=]a)[inc(b) | assign_array(tiles,j,b)] | inc(j) | inc(i) | inc(j)] |dec(i)]| while(i[<]size)[arr(a,tiles,i) | if(a[==]size)[assign(gap, i)] | inc(i)]| assign(i,0)| while(i[<=]4)[print("kek")]]|inc(aa)]
  555. mov eax, [_i20]
  556. mov ebx, [_i14]
  557. cmp eax, ebx
  558. jl ._loop39 ;Depth 1->2
  559. jmp ._loop40
  560. ._loop39: ;LOOP @ Depth=2
  561. ;arr(.buf, positions, aa)
  562. mov eax, [_i20]
  563. imul eax, eax, 4
  564. add eax, _a1
  565. mov ebx, [eax]
  566. mov [_i21], ebx
  567. ;if(.buf[==]currentDepth)[assign_array(tiles,_size,1)|assign(i,_size)|while(i[>=]1)[assign(buf,i)|dec(buf) | assign(buffer, __size) | dec(buffer,i) | assign(buf2, t) | mod(buf2, buffer)| inc(buf2) | assign_array(tiles,buf,buf2) | assign(buffer, __size) | dec(buffer,i) | div(t,buffer) | assign(j,i) | inc(j) | while(j[<=]size)[ dec(i) | dec(j) | arr(a,tiles,i) | arr(b,tiles,j) | if(b[>=]a)[inc(b) | assign_array(tiles,j,b)] | inc(j) | inc(i) | inc(j)] |dec(i)]| while(i[<]size)[arr(a,tiles,i) | if(a[==]size)[assign(gap, i)] | inc(i)]| assign(i,0)| while(i[<=]4)[print("kek")]]
  568. mov eax, [_i21]
  569. mov ebx, [_i18]
  570. cmp eax, ebx
  571. je ._loop41 ;Depth 2->3
  572. jmp ._loop42
  573. ._loop41: ;OK @ Depth=3
  574. ;assign_array(tiles,_size,1)
  575. mov eax, 1
  576. mov ebx, [_i12]
  577. mov [_a0+ebx*4], eax
  578. ;assign(i,_size)
  579. mov eax, [_i12]
  580. mov [_i2], eax
  581. ;while(i[>=]1)[assign(buf,i)|dec(buf) | assign(buffer, __size) | dec(buffer,i) | assign(buf2, t) | mod(buf2, buffer)| inc(buf2) | assign_array(tiles,buf,buf2) | assign(buffer, __size) | dec(buffer,i) | div(t,buffer) | assign(j,i) | inc(j) | while(j[<=]size)[ dec(i) | dec(j) | arr(a,tiles,i) | arr(b,tiles,j) | if(b[>=]a)[inc(b) | assign_array(tiles,j,b)] | inc(j) | inc(i) | inc(j)] |dec(i)]
  582. mov eax, [_i2]
  583. mov ebx, 1
  584. cmp eax, ebx
  585. jge ._loop45 ;Depth 3->4
  586. jmp ._loop46
  587. ._loop45: ;LOOP @ Depth=4
  588. ;assign(buf,i)
  589. mov eax, [_i2]
  590. mov [_i5], eax
  591. ;dec(buf)
  592. dec DWORD [_i5]
  593. ;assign(buffer, __size)
  594. mov eax, [_i13]
  595. mov [_i4], eax
  596. ;dec(buffer,i)
  597. mov eax, [_i4]
  598. sub DWORD eax, [_i2]
  599. mov [_i4], eax
  600. ;assign(buf2, t)
  601. mov eax, [_i1]
  602. mov [_i6], eax
  603. ;mod(buf2, buffer)
  604. xor edx, edx
  605. mov eax, [_i6]
  606. idiv DWORD [_i4]
  607. mov [_i6], edx
  608. ;inc(buf2)
  609. inc DWORD [_i6]
  610. ;assign_array(tiles,buf,buf2)
  611. mov eax, [_i6]
  612. mov ebx, [_i5]
  613. mov [_a0+ebx*4], eax
  614. ;assign(buffer, __size)
  615. mov eax, [_i13]
  616. mov [_i4], eax
  617. ;dec(buffer,i)
  618. mov eax, [_i4]
  619. sub DWORD eax, [_i2]
  620. mov [_i4], eax
  621. ;div(t,buffer)
  622. xor edx, edx
  623. mov eax, [_i1]
  624. idiv DWORD [_i4]
  625. mov [_i1], eax
  626. ;assign(j,i)
  627. mov eax, [_i2]
  628. mov [_i3], eax
  629. ;inc(j)
  630. inc DWORD [_i3]
  631. ;while(j[<=]size)[ dec(i) | dec(j) | arr(a,tiles,i) | arr(b,tiles,j) | if(b[>=]a)[inc(b) | assign_array(tiles,j,b)] | inc(j) | inc(i) | inc(j)]
  632. mov eax, [_i3]
  633. mov ebx, [_i11]
  634. cmp eax, ebx
  635. jle ._loop47 ;Depth 4->5
  636. jmp ._loop48
  637. ._loop47: ;LOOP @ Depth=5
  638. ;dec(i)
  639. dec DWORD [_i2]
  640. ;dec(j)
  641. dec DWORD [_i3]
  642. ;arr(a,tiles,i)
  643. mov eax, [_i2]
  644. imul eax, eax, 4
  645. add eax, _a0
  646. mov ebx, [eax]
  647. mov [_i7], ebx
  648. ;arr(b,tiles,j)
  649. mov eax, [_i3]
  650. imul eax, eax, 4
  651. add eax, _a0
  652. mov ebx, [eax]
  653. mov [_i8], ebx
  654. ;if(b[>=]a)[inc(b) | assign_array(tiles,j,b)]
  655. mov eax, [_i8]
  656. mov ebx, [_i7]
  657. cmp eax, ebx
  658. jge ._loop49 ;Depth 5->6
  659. jmp ._loop50
  660. ._loop49: ;OK @ Depth=6
  661. ;inc(b)
  662. inc DWORD [_i8]
  663. ;assign_array(tiles,j,b)
  664. mov eax, [_i8]
  665. mov ebx, [_i3]
  666. mov [_a0+ebx*4], eax
  667. jmp ._loop51
  668. ._loop50: ;ELSE @ Depth=6
  669. ._loop51:
  670. ;inc(j)
  671. inc DWORD [_i3]
  672. ;inc(i)
  673. inc DWORD [_i2]
  674. ;inc(j)
  675. inc DWORD [_i3]
  676. ;loop if j<=size
  677. mov eax, [_i3]
  678. mov ebx, [_i11]
  679. cmp eax, ebx
  680. jle ._loop47
  681. ._loop48:
  682. ;dec(i)
  683. dec DWORD [_i2]
  684. ;loop if i>=1
  685. mov eax, [_i2]
  686. mov ebx, 1
  687. cmp eax, ebx
  688. jge ._loop45
  689. ._loop46:
  690. ;while(i[<]size)[arr(a,tiles,i) | if(a[==]size)[assign(gap, i)] | inc(i)]
  691. mov eax, [_i2]
  692. mov ebx, [_i11]
  693. cmp eax, ebx
  694. jl ._loop53 ;Depth 3->4
  695. jmp ._loop54
  696. ._loop53: ;LOOP @ Depth=4
  697. ;arr(a,tiles,i)
  698. mov eax, [_i2]
  699. imul eax, eax, 4
  700. add eax, _a0
  701. mov ebx, [eax]
  702. mov [_i7], ebx
  703. ;if(a[==]size)[assign(gap, i)]
  704. mov eax, [_i7]
  705. mov ebx, [_i11]
  706. cmp eax, ebx
  707. je ._loop55 ;Depth 4->5
  708. jmp ._loop56
  709. ._loop55: ;OK @ Depth=5
  710. ;assign(gap, i)
  711. mov eax, [_i2]
  712. mov [_i0], eax
  713. jmp ._loop57
  714. ._loop56: ;ELSE @ Depth=5
  715. ._loop57:
  716. ;inc(i)
  717. inc DWORD [_i2]
  718. ;loop if i<size
  719. mov eax, [_i2]
  720. mov ebx, [_i11]
  721. cmp eax, ebx
  722. jl ._loop53
  723. ._loop54:
  724. ;assign(i,0)
  725. mov eax, 0
  726. mov [_i2], eax
  727. ;while(i[<=]4)[print("kek")]
  728. mov eax, [_i2]
  729. mov ebx, 4
  730. cmp eax, ebx
  731. jle ._loop59 ;Depth 3->4
  732. jmp ._loop60
  733. ._loop59: ;LOOP @ Depth=4
  734. ;print("kek")
  735. mov ecx, _s5
  736. mov edx, _len5
  737. call _print
  738.  
  739. ;loop if i<=4
  740. mov eax, [_i2]
  741. mov ebx, 4
  742. cmp eax, ebx
  743. jle ._loop59
  744. ._loop60:
  745. jmp ._loop43
  746. ._loop42: ;ELSE @ Depth=3
  747. ._loop43:
  748. ;inc(aa)
  749. inc DWORD [_i20]
  750. ;loop if aa<totpositions
  751. mov eax, [_i20]
  752. mov ebx, [_i14]
  753. cmp eax, ebx
  754. jl ._loop39
  755. ._loop40:
  756. ;loop if newPositions!=0
  757. mov eax, [_i19]
  758. mov ebx, 0
  759. cmp eax, ebx
  760. jne ._loop38
  761. ._exit_point:
  762. mov eax, SYS_EXIT
  763. int KERN_INT
  764. ; Subroutines
  765. _print:
  766. push eax
  767. push ebx
  768. mov eax, SYS_OUT
  769. mov ebx, STDOUT
  770. int KERN_INT
  771. pop ebx
  772. pop eax
  773. ret
  774. _read:
  775. push eax
  776. push ebx
  777. mov eax, SYS_IN
  778. mov ebx, STDIN
  779. int KERN_INT
  780. dec eax
  781. mov [_vsbuf], eax
  782. pop ebx
  783. pop eax
  784. ret
  785. string_to_int:
  786. push ebx
  787. push ecx
  788. push edx
  789. push esi
  790. push edi
  791. mov eax, [_vsbuf]
  792. xor edi, edi
  793. mov ebx, 0
  794. .loop:
  795. imul ebx, ebx, 10
  796. add bl, [_sbuf+edi]
  797. sub bl, '0'
  798. inc edi
  799. cmp edi, eax
  800. jl .loop
  801. mov [_ibuf], ebx
  802. pop edi
  803. pop esi
  804. pop edx
  805. pop ecx
  806. pop ebx
  807. ret
  808. int_to_string:
  809. push eax
  810. push ebx
  811. push ecx
  812. push edx
  813. push esi
  814. push edi
  815. mov eax, [_ibuf]
  816. xor edi, edi
  817. mov ecx, 10
  818. .ciclo:
  819. xor edx, edx
  820. idiv ecx
  821. add edx, '0'
  822. mov [_sbuf+edi], dl
  823. inc edi
  824. cmp eax, 0
  825. jg .ciclo
  826. mov BYTE [_sbuf+edi], 0
  827. mov [_vsbuf], edi
  828. mov edx, edi
  829. shr edx, 1
  830. xor esi, esi
  831. .invert:
  832. mov al, [_sbuf+esi]
  833. mov bl, [_sbuf+edi]
  834. xchg al, bl
  835. mov [_sbuf+esi], al
  836. mov [_sbuf+edi], bl
  837. dec edi
  838. inc esi
  839. cmp edi, edx
  840. jg .invert
  841. pop edi
  842. pop esi
  843. pop edx
  844. pop ecx
  845. pop ebx
  846. pop eax
  847. ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement