struct.sbk 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454
  1. .486
  2. .model flat
  3. extrn __fltused:near
  4. extrn __ftol:near
  5. public _addpoint
  6. _TEXT segment
  7. _addpoint:
  8. push ebx
  9. push esi
  10. push edi
  11. push ebp
  12. mov ebp,esp
  13. mov edi,dword ptr (32)[ebp]
  14. add dword ptr (24)[ebp],edi
  15. mov edi,dword ptr (36)[ebp]
  16. add dword ptr (28)[ebp],edi
  17. mov edi,dword ptr (20)[ebp]
  18. lea esi,(24)[ebp]
  19. mov ecx,8
  20. rep movsb
  21. L1:
  22. mov esp,ebp
  23. pop ebp
  24. pop edi
  25. pop esi
  26. pop ebx
  27. ret
  28. public _canonrect
  29. _canonrect:
  30. push ebx
  31. push esi
  32. push edi
  33. push ebp
  34. mov ebp,esp
  35. sub esp,32
  36. mov edi,dword ptr (32)[ebp]
  37. cmp dword ptr (24)[ebp],edi
  38. jge L10
  39. mov edi,dword ptr (24)[ebp]
  40. mov dword ptr (-20)[ebp],edi
  41. jmp L11
  42. L10:
  43. mov edi,dword ptr (32)[ebp]
  44. mov dword ptr (-20)[ebp],edi
  45. L11:
  46. mov edi,dword ptr (-20)[ebp]
  47. mov dword ptr (-16)[ebp],edi
  48. mov edi,dword ptr (36)[ebp]
  49. cmp dword ptr (28)[ebp],edi
  50. jge L20
  51. mov edi,dword ptr (28)[ebp]
  52. mov dword ptr (-24)[ebp],edi
  53. jmp L21
  54. L20:
  55. mov edi,dword ptr (36)[ebp]
  56. mov dword ptr (-24)[ebp],edi
  57. L21:
  58. mov edi,dword ptr (-24)[ebp]
  59. mov dword ptr (-12)[ebp],edi
  60. mov edi,dword ptr (32)[ebp]
  61. cmp dword ptr (24)[ebp],edi
  62. jle L26
  63. mov edi,dword ptr (24)[ebp]
  64. mov dword ptr (-28)[ebp],edi
  65. jmp L27
  66. L26:
  67. mov edi,dword ptr (32)[ebp]
  68. mov dword ptr (-28)[ebp],edi
  69. L27:
  70. mov edi,dword ptr (-28)[ebp]
  71. mov dword ptr (-8)[ebp],edi
  72. mov edi,dword ptr (36)[ebp]
  73. cmp dword ptr (28)[ebp],edi
  74. jle L37
  75. mov edi,dword ptr (28)[ebp]
  76. mov dword ptr (-32)[ebp],edi
  77. jmp L38
  78. L37:
  79. mov edi,dword ptr (36)[ebp]
  80. mov dword ptr (-32)[ebp],edi
  81. L38:
  82. mov edi,dword ptr (-32)[ebp]
  83. mov dword ptr (-4)[ebp],edi
  84. mov edi,dword ptr (20)[ebp]
  85. lea esi,(-16)[ebp]
  86. mov ecx,16
  87. rep movsb
  88. L5:
  89. mov esp,ebp
  90. pop ebp
  91. pop edi
  92. pop esi
  93. pop ebx
  94. ret
  95. public _makepoint
  96. _makepoint:
  97. push ebx
  98. push esi
  99. push edi
  100. push ebp
  101. mov ebp,esp
  102. sub esp,8
  103. mov edi,dword ptr (24)[ebp]
  104. mov dword ptr (-8)[ebp],edi
  105. mov edi,dword ptr (28)[ebp]
  106. mov dword ptr (-4)[ebp],edi
  107. mov edi,dword ptr (20)[ebp]
  108. lea esi,(-8)[ebp]
  109. mov ecx,8
  110. rep movsb
  111. L39:
  112. mov esp,ebp
  113. pop ebp
  114. pop edi
  115. pop esi
  116. pop ebx
  117. ret
  118. public _makerect
  119. _makerect:
  120. push ebx
  121. push esi
  122. push edi
  123. push ebp
  124. mov ebp,esp
  125. sub esp,16
  126. lea edi,(-16)[ebp]
  127. lea esi,(24)[ebp]
  128. mov ecx,8
  129. rep movsb
  130. lea edi,(-8)[ebp]
  131. lea esi,(32)[ebp]
  132. mov ecx,8
  133. rep movsb
  134. lea esi,(-16)[ebp]
  135. sub esp,16
  136. mov edi,esp
  137. mov ecx,16
  138. rep movsb
  139. mov edi,dword ptr (20)[ebp]
  140. push edi
  141. call _canonrect
  142. add esp,20
  143. L42:
  144. mov esp,ebp
  145. pop ebp
  146. pop edi
  147. pop esi
  148. pop ebx
  149. ret
  150. public _ptinrect
  151. _ptinrect:
  152. push ebx
  153. push esi
  154. push edi
  155. push ebp
  156. mov ebp,esp
  157. sub esp,4
  158. mov edi,dword ptr (20)[ebp]
  159. cmp edi,dword ptr (28)[ebp]
  160. jl L53
  161. cmp edi,dword ptr (36)[ebp]
  162. jge L53
  163. mov edi,dword ptr (32)[ebp]
  164. cmp dword ptr (24)[ebp],edi
  165. jl L53
  166. mov edi,dword ptr (40)[ebp]
  167. cmp dword ptr (24)[ebp],edi
  168. jge L53
  169. mov dword ptr (-4)[ebp],1
  170. jmp L54
  171. L53:
  172. mov dword ptr (-4)[ebp],0
  173. L54:
  174. mov eax,dword ptr (-4)[ebp]
  175. L45:
  176. mov esp,ebp
  177. pop ebp
  178. pop edi
  179. pop esi
  180. pop ebx
  181. ret
  182. _TEXT ends
  183. _DATA segment
  184. public _y
  185. align 4
  186. _y label byte
  187. db 97
  188. db 98
  189. db 0
  190. db 1 dup (0)
  191. public _odd
  192. _DATA ends
  193. _TEXT segment
  194. _odd:
  195. push ebx
  196. push esi
  197. push edi
  198. push ebp
  199. mov ebp,esp
  200. sub esp,4
  201. lea edi,(-4)[ebp]
  202. lea esi,(20)[ebp]
  203. mov ecx,4
  204. rep movsb
  205. lea edi,(-4)[ebp]
  206. push edi
  207. lea edi,(L56)
  208. push edi
  209. call _printf
  210. add esp,8
  211. mov eax,0
  212. L55:
  213. mov esp,ebp
  214. pop ebp
  215. pop edi
  216. pop esi
  217. pop ebx
  218. ret
  219. _TEXT ends
  220. _TEXT segment
  221. align 4
  222. L58 label byte
  223. dd 0
  224. dd 0
  225. align 4
  226. L59 label byte
  227. dd 320
  228. dd 320
  229. align 4
  230. L60 label byte
  231. dd -1
  232. dd -1
  233. dd 1
  234. dd 1
  235. dd 20
  236. dd 300
  237. dd 500
  238. dd 400
  239. public _main
  240. _TEXT ends
  241. _TEXT segment
  242. _main:
  243. push ebx
  244. push esi
  245. push edi
  246. push ebp
  247. mov ebp,esp
  248. sub esp,108
  249. lea edi,(-68)[ebp]
  250. lea esi,(L58)
  251. mov ecx,8
  252. rep movsb
  253. lea edi,(-76)[ebp]
  254. lea esi,(L59)
  255. mov ecx,8
  256. rep movsb
  257. lea edi,(-36)[ebp]
  258. lea esi,(L60)
  259. mov ecx,32
  260. rep movsb
  261. push -10
  262. push -10
  263. lea edi,(-84)[ebp]
  264. push edi
  265. call _makepoint
  266. add esp,12
  267. lea esi,(-84)[ebp]
  268. sub esp,8
  269. mov edi,esp
  270. mov ecx,8
  271. rep movsb
  272. lea esi,(-76)[ebp]
  273. sub esp,8
  274. mov edi,esp
  275. mov ecx,8
  276. rep movsb
  277. lea edi,(-92)[ebp]
  278. push edi
  279. call _addpoint
  280. add esp,20
  281. push 10
  282. push 10
  283. lea edi,(-100)[ebp]
  284. push edi
  285. call _makepoint
  286. add esp,12
  287. lea esi,(-100)[ebp]
  288. sub esp,8
  289. mov edi,esp
  290. mov ecx,8
  291. rep movsb
  292. lea esi,(-68)[ebp]
  293. sub esp,8
  294. mov edi,esp
  295. mov ecx,8
  296. rep movsb
  297. lea edi,(-108)[ebp]
  298. push edi
  299. call _addpoint
  300. add esp,20
  301. lea esi,(-108)[ebp]
  302. sub esp,8
  303. mov edi,esp
  304. mov ecx,8
  305. rep movsb
  306. lea esi,(-92)[ebp]
  307. sub esp,8
  308. mov edi,esp
  309. mov ecx,8
  310. rep movsb
  311. lea edi,(-52)[ebp]
  312. push edi
  313. call _makerect
  314. add esp,20
  315. mov dword ptr (-4)[ebp],0
  316. jmp L64
  317. L61:
  318. mov edi,dword ptr (-4)[ebp]
  319. lea edi,[edi*8]
  320. mov esi,dword ptr (-32)[ebp][edi]
  321. push esi
  322. mov edi,dword ptr (-36)[ebp][edi]
  323. push edi
  324. lea edi,(-60)[ebp]
  325. push edi
  326. call _makepoint
  327. add esp,12
  328. mov edi,dword ptr (-56)[ebp]
  329. push edi
  330. mov edi,dword ptr (-4)[ebp]
  331. mov edi,dword ptr (-36)[ebp][edi*8]
  332. push edi
  333. lea edi,(L65)
  334. push edi
  335. call _printf
  336. add esp,12
  337. lea esi,(-52)[ebp]
  338. sub esp,16
  339. mov edi,esp
  340. mov ecx,16
  341. rep movsb
  342. lea esi,(-60)[ebp]
  343. sub esp,8
  344. mov edi,esp
  345. mov ecx,8
  346. rep movsb
  347. call _ptinrect
  348. add esp,24
  349. cmp eax,0
  350. jne L68
  351. lea edi,(L70)
  352. push edi
  353. call _printf
  354. add esp,4
  355. L68:
  356. mov edi,dword ptr (-40)[ebp]
  357. push edi
  358. mov edi,dword ptr (-44)[ebp]
  359. push edi
  360. mov edi,dword ptr (-48)[ebp]
  361. push edi
  362. mov edi,dword ptr (-52)[ebp]
  363. push edi
  364. lea edi,(L71)
  365. push edi
  366. call _printf
  367. add esp,20
  368. L62:
  369. inc dword ptr (-4)[ebp]
  370. L64:
  371. mov edi,dword ptr (-4)[ebp]
  372. cmp edi,4
  373. jb L61
  374. lea esi,(_y)
  375. sub esp,4
  376. mov edi,esp
  377. mov ecx,4
  378. rep movsb
  379. call _odd
  380. add esp,4
  381. push 0
  382. call _exit
  383. add esp,4
  384. mov eax,0
  385. L57:
  386. mov esp,ebp
  387. pop ebp
  388. pop edi
  389. pop esi
  390. pop ebx
  391. ret
  392. _TEXT ends
  393. extrn _exit:near
  394. _TEXT segment
  395. _TEXT ends
  396. extrn _printf:near
  397. _TEXT segment
  398. _TEXT ends
  399. _TEXT segment
  400. align 1
  401. L71 label byte
  402. db 119
  403. db 105
  404. db 116
  405. db 104
  406. db 105
  407. db 110
  408. db 32
  409. db 91
  410. db 37
  411. db 100
  412. db 44
  413. db 37
  414. db 100
  415. db 59
  416. db 32
  417. db 37
  418. db 100
  419. db 44
  420. db 37
  421. db 100
  422. db 93
  423. db 10
  424. db 0
  425. align 1
  426. L70 label byte
  427. db 110
  428. db 111
  429. db 116
  430. db 32
  431. db 0
  432. align 1
  433. L65 label byte
  434. db 40
  435. db 37
  436. db 100
  437. db 44
  438. db 37
  439. db 100
  440. db 41
  441. db 32
  442. db 105
  443. db 115
  444. db 32
  445. db 0
  446. align 1
  447. L56 label byte
  448. db 37
  449. db 115
  450. db 10
  451. db 0
  452. _TEXT ends
  453. end