fields.sbk 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324
  1. .486
  2. .model flat
  3. extrn __fltused:near
  4. extrn __ftol:near
  5. _DATA segment
  6. public _x
  7. align 4
  8. _x label byte
  9. dd 1
  10. db 2
  11. db 3 dup (0)
  12. db 03H
  13. db 040H
  14. db 2 dup (0)
  15. db 050H
  16. db 6
  17. db 2 dup (0)
  18. public _i
  19. align 4
  20. _i label byte
  21. dd 16
  22. public _y
  23. align 4
  24. _y label byte
  25. db 023H
  26. db 3 dup (0)
  27. db 09H
  28. db 00H
  29. db 00H
  30. db 00H
  31. public _main
  32. _DATA ends
  33. _TEXT segment
  34. _main:
  35. push ebx
  36. push esi
  37. push edi
  38. push ebp
  39. mov ebp,esp
  40. movsx edi,byte ptr (_x+13)
  41. push edi
  42. mov edi,dword ptr (_x+12)
  43. sal edi,25
  44. sar edi,29
  45. push edi
  46. mov edi,dword ptr (_x+8)
  47. sal edi,16
  48. sar edi,28
  49. push edi
  50. mov edi,dword ptr (_x+8)
  51. sal edi,20
  52. sar edi,20
  53. push edi
  54. movsx edi,byte ptr (_x+4)
  55. push edi
  56. mov edi,dword ptr (_x)
  57. push edi
  58. lea edi,(L4)
  59. push edi
  60. call _printf
  61. add esp,28
  62. mov edi,dword ptr (_y+4)
  63. push edi
  64. mov edi,dword ptr (_y)
  65. mov esi,edi
  66. shr esi,2
  67. and esi,15
  68. push esi
  69. and edi,3
  70. push edi
  71. lea edi,(L10)
  72. push edi
  73. call _printf
  74. add esp,16
  75. mov edi,dword ptr (_x+8)
  76. and edi,0ffff0fffH
  77. mov esi,dword ptr (_i)
  78. sal esi,28
  79. sar esi,28
  80. shl esi,12
  81. and esi,0f000H
  82. or edi,esi
  83. mov dword ptr (_x+8),edi
  84. mov edi,dword ptr (_x+12)
  85. and edi,0ffffff8fH
  86. mov dword ptr (_x+12),edi
  87. movsx edi,byte ptr (_x+13)
  88. push edi
  89. mov edi,dword ptr (_x+12)
  90. sal edi,25
  91. sar edi,29
  92. push edi
  93. mov edi,dword ptr (_x+8)
  94. sal edi,16
  95. sar edi,28
  96. push edi
  97. mov edi,dword ptr (_x+8)
  98. sal edi,20
  99. sar edi,20
  100. push edi
  101. movsx edi,byte ptr (_x+4)
  102. push edi
  103. mov edi,dword ptr (_x)
  104. push edi
  105. lea edi,(L4)
  106. push edi
  107. call _printf
  108. add esp,28
  109. mov edi,dword ptr (_y)
  110. and edi,0fffffffcH
  111. or edi,2
  112. mov dword ptr (_y),edi
  113. mov edi,dword ptr (_i)
  114. mov dword ptr (_y+4),edi
  115. mov edi,dword ptr (_y+4)
  116. push edi
  117. mov edi,dword ptr (_y)
  118. mov esi,edi
  119. shr esi,2
  120. and esi,15
  121. push esi
  122. and edi,3
  123. push edi
  124. lea edi,(L10)
  125. push edi
  126. call _printf
  127. add esp,16
  128. lea edi,(_x)
  129. push edi
  130. call _f2
  131. add esp,4
  132. mov eax,0
  133. L3:
  134. mov esp,ebp
  135. pop ebp
  136. pop edi
  137. pop esi
  138. pop ebx
  139. ret
  140. public _f1
  141. _f1:
  142. push ebx
  143. push esi
  144. push edi
  145. push ebp
  146. mov ebp,esp
  147. mov edi,dword ptr (20)[ebp]
  148. and dword ptr [edi],0ffffffc3H
  149. mov edi,dword ptr (20)[ebp]
  150. mov esi,dword ptr [edi]
  151. and esi,0fffffffcH
  152. mov ebx,0
  153. and ebx,3
  154. and ebx,3
  155. or esi,ebx
  156. mov dword ptr [edi],esi
  157. mov edi,dword ptr (20)[ebp]
  158. mov edi,dword ptr [edi]
  159. and edi,60
  160. cmp edi,0
  161. je L22
  162. lea edi,(L24)
  163. push edi
  164. call _printf
  165. add esp,4
  166. L22:
  167. mov edi,dword ptr (20)[ebp]
  168. or dword ptr [edi],3
  169. mov edi,dword ptr (20)[ebp]
  170. or dword ptr [edi],60
  171. mov edi,dword ptr (20)[ebp]
  172. mov edi,dword ptr [edi]
  173. mov esi,edi
  174. shr esi,2
  175. and esi,15
  176. push esi
  177. and edi,3
  178. push edi
  179. lea edi,(L25)
  180. push edi
  181. call _printf
  182. add esp,12
  183. mov eax,0
  184. L21:
  185. mov esp,ebp
  186. pop ebp
  187. pop edi
  188. pop esi
  189. pop ebx
  190. ret
  191. public _f2
  192. _f2:
  193. push ebx
  194. push esi
  195. push edi
  196. push ebp
  197. mov ebp,esp
  198. sub esp,4
  199. cmp dword ptr (_i),0
  200. jne L28
  201. mov dword ptr (-4)[ebp],1
  202. jmp L29
  203. L28:
  204. mov dword ptr (-4)[ebp],0
  205. L29:
  206. mov edi,dword ptr (20)[ebp]
  207. mov esi,dword ptr [edi]
  208. and esi,0fffffffcH
  209. mov ebx,dword ptr (-4)[ebp]
  210. and ebx,3
  211. and ebx,3
  212. or esi,ebx
  213. mov dword ptr [edi],esi
  214. mov edi,dword ptr (20)[ebp]
  215. push edi
  216. call _f1
  217. add esp,4
  218. mov esi,dword ptr [edi]
  219. and esi,0ffffffc3H
  220. mov ebx,0
  221. and ebx,15
  222. lea ebx,[ebx*4]
  223. and ebx,60
  224. or esi,ebx
  225. mov dword ptr [edi],esi
  226. mov eax,0
  227. L26:
  228. mov esp,ebp
  229. pop ebp
  230. pop edi
  231. pop esi
  232. pop ebx
  233. ret
  234. _TEXT ends
  235. extrn _printf:near
  236. _TEXT segment
  237. _TEXT ends
  238. _TEXT segment
  239. align 1
  240. L25 label byte
  241. db 112
  242. db 45
  243. db 62
  244. db 97
  245. db 32
  246. db 61
  247. db 32
  248. db 48
  249. db 120
  250. db 37
  251. db 120
  252. db 44
  253. db 32
  254. db 112
  255. db 45
  256. db 62
  257. db 98
  258. db 32
  259. db 61
  260. db 32
  261. db 48
  262. db 120
  263. db 37
  264. db 120
  265. db 10
  266. db 0
  267. align 1
  268. L24 label byte
  269. db 112
  270. db 45
  271. db 62
  272. db 98
  273. db 32
  274. db 33
  275. db 61
  276. db 32
  277. db 48
  278. db 33
  279. db 10
  280. db 0
  281. align 1
  282. L10 label byte
  283. db 121
  284. db 32
  285. db 61
  286. db 32
  287. db 37
  288. db 100
  289. db 32
  290. db 37
  291. db 100
  292. db 32
  293. db 37
  294. db 100
  295. db 10
  296. db 0
  297. align 1
  298. L4 label byte
  299. db 120
  300. db 32
  301. db 61
  302. db 32
  303. db 37
  304. db 100
  305. db 32
  306. db 37
  307. db 100
  308. db 32
  309. db 37
  310. db 100
  311. db 32
  312. db 37
  313. db 100
  314. db 32
  315. db 37
  316. db 100
  317. db 32
  318. db 37
  319. db 100
  320. db 10
  321. db 0
  322. _TEXT ends
  323. end