stdarg.sbk 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416
  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. dd 2
  11. dd 3
  12. dd 4
  13. public _main
  14. _DATA ends
  15. _TEXT segment
  16. _main:
  17. push ebx
  18. push esi
  19. push edi
  20. push ebp
  21. mov ebp,esp
  22. sub esp,8
  23. lea edi,(L2)
  24. push edi
  25. call _print
  26. add esp,4
  27. lea edi,(L4)
  28. push edi
  29. lea edi,(L3)
  30. push edi
  31. call _print
  32. add esp,8
  33. push 10
  34. push 3
  35. lea edi,(L5)
  36. push edi
  37. call _print
  38. add esp,12
  39. push 10
  40. push 4
  41. lea edi,(L8)
  42. push edi
  43. lea edi,(L7)
  44. push edi
  45. lea edi,(L6)
  46. push edi
  47. call _print
  48. add esp,20
  49. push 10
  50. fld qword ptr (L10)
  51. sub esp,8
  52. fstp qword ptr [esp]
  53. lea edi,(L8)
  54. push edi
  55. lea edi,(L7)
  56. push edi
  57. lea edi,(L9)
  58. push edi
  59. call _print
  60. add esp,24
  61. lea edi,(_x)
  62. mov dword ptr (-8)[ebp],edi
  63. mov esi,edi
  64. mov dword ptr (-4)[ebp],esi
  65. sub esp,16
  66. mov edi,esp
  67. mov ecx,16
  68. rep movsb
  69. mov edi,dword ptr (-8)[ebp]
  70. mov esi,edi
  71. sub esp,16
  72. mov edi,esp
  73. mov ecx,16
  74. rep movsb
  75. mov edi,dword ptr (-8)[ebp]
  76. mov esi,edi
  77. sub esp,16
  78. mov edi,esp
  79. mov ecx,16
  80. rep movsb
  81. mov edi,dword ptr (-8)[ebp]
  82. mov esi,edi
  83. sub esp,16
  84. mov edi,esp
  85. mov ecx,16
  86. rep movsb
  87. mov edi,dword ptr (-8)[ebp]
  88. mov esi,edi
  89. sub esp,16
  90. mov edi,esp
  91. mov ecx,16
  92. rep movsb
  93. mov edi,dword ptr (-8)[ebp]
  94. mov esi,edi
  95. sub esp,16
  96. mov edi,esp
  97. mov ecx,16
  98. rep movsb
  99. lea edi,(L11)
  100. push edi
  101. call _print
  102. add esp,100
  103. mov eax,0
  104. L1:
  105. mov esp,ebp
  106. pop ebp
  107. pop edi
  108. pop esi
  109. pop ebx
  110. ret
  111. public _print
  112. _print:
  113. push ebx
  114. push esi
  115. push edi
  116. push ebp
  117. mov ebp,esp
  118. sub esp,28
  119. lea edi,(24)[ebp]
  120. mov dword ptr (-4)[ebp],edi
  121. jmp L17
  122. L14:
  123. mov edi,dword ptr (20)[ebp]
  124. movsx edi,byte ptr [edi]
  125. cmp edi,37
  126. jne L18
  127. mov edi,dword ptr (20)[ebp]
  128. lea edi,(1)[edi]
  129. mov dword ptr (20)[ebp],edi
  130. movsx edi,byte ptr [edi]
  131. mov dword ptr (-8)[ebp],edi
  132. mov edi,dword ptr (-8)[ebp]
  133. cmp edi,115
  134. je L34
  135. cmp edi,115
  136. jg L39
  137. L38:
  138. mov edi,dword ptr (-8)[ebp]
  139. cmp edi,98
  140. jl L20
  141. cmp edi,102
  142. jg L20
  143. jmp dword ptr (L40-392)[edi*4]
  144. _TEXT ends
  145. _TEXT segment
  146. align 4
  147. L40 label byte
  148. dd L23
  149. dd L28
  150. dd L30
  151. dd L20
  152. dd L36
  153. _TEXT ends
  154. _TEXT segment
  155. L39:
  156. cmp dword ptr (-8)[ebp],119
  157. je L32
  158. jmp L20
  159. L23:
  160. mov edi,dword ptr (-4)[ebp]
  161. lea edi,(16)[edi]
  162. mov dword ptr (-28)[ebp],edi
  163. mov dword ptr (-4)[ebp],edi
  164. lea edi,(-24)[ebp]
  165. mov esi,dword ptr (-28)[ebp]
  166. lea esi,(-16)[esi]
  167. mov ecx,16
  168. rep movsb
  169. mov edi,dword ptr (-12)[ebp]
  170. push edi
  171. mov edi,dword ptr (-16)[ebp]
  172. push edi
  173. mov edi,dword ptr (-20)[ebp]
  174. push edi
  175. mov edi,dword ptr (-24)[ebp]
  176. push edi
  177. lea edi,(L24)
  178. push edi
  179. call _printf
  180. add esp,20
  181. jmp L19
  182. L28:
  183. mov edi,dword ptr (-4)[ebp]
  184. lea edi,(4)[edi]
  185. mov dword ptr (-4)[ebp],edi
  186. movsx edi,byte ptr (-4)[edi]
  187. push edi
  188. lea edi,(L29)
  189. push edi
  190. call _printf
  191. add esp,8
  192. jmp L19
  193. L30:
  194. mov edi,dword ptr (-4)[ebp]
  195. lea edi,(4)[edi]
  196. mov dword ptr (-4)[ebp],edi
  197. mov edi,dword ptr (-4)[edi]
  198. push edi
  199. lea edi,(L31)
  200. push edi
  201. call _printf
  202. add esp,8
  203. jmp L19
  204. L32:
  205. mov edi,dword ptr (-4)[ebp]
  206. lea edi,(4)[edi]
  207. mov dword ptr (-4)[ebp],edi
  208. movsx edi,word ptr (-4)[edi]
  209. push edi
  210. lea edi,(L33)
  211. push edi
  212. call _printf
  213. add esp,8
  214. jmp L19
  215. L34:
  216. mov edi,dword ptr (-4)[ebp]
  217. lea edi,(4)[edi]
  218. mov dword ptr (-4)[ebp],edi
  219. mov edi,dword ptr (-4)[edi]
  220. push edi
  221. lea edi,(L35)
  222. push edi
  223. call _printf
  224. add esp,8
  225. jmp L19
  226. L36:
  227. mov edi,dword ptr (-4)[ebp]
  228. lea edi,(8)[edi]
  229. mov dword ptr (-4)[ebp],edi
  230. fld qword ptr (-8)[edi]
  231. sub esp,8
  232. fstp qword ptr [esp]
  233. lea edi,(L37)
  234. push edi
  235. call _printf
  236. add esp,12
  237. jmp L19
  238. L20:
  239. mov edi,dword ptr (20)[ebp]
  240. movsx edi,byte ptr [edi]
  241. push edi
  242. lea edi,(L29)
  243. push edi
  244. call _printf
  245. add esp,8
  246. jmp L19
  247. L18:
  248. mov edi,dword ptr (20)[ebp]
  249. movsx edi,byte ptr [edi]
  250. push edi
  251. lea edi,(L29)
  252. push edi
  253. call _printf
  254. add esp,8
  255. L19:
  256. L15:
  257. inc dword ptr (20)[ebp]
  258. L17:
  259. mov edi,dword ptr (20)[ebp]
  260. movsx edi,byte ptr [edi]
  261. cmp edi,0
  262. jne L14
  263. mov dword ptr (-4)[ebp],0
  264. mov eax,0
  265. L12:
  266. mov esp,ebp
  267. pop ebp
  268. pop edi
  269. pop esi
  270. pop ebx
  271. ret
  272. _TEXT ends
  273. extrn _printf:near
  274. _TEXT segment
  275. _TEXT ends
  276. _TEXT segment
  277. align 1
  278. L37 label byte
  279. db 37
  280. db 102
  281. db 0
  282. align 1
  283. L35 label byte
  284. db 37
  285. db 115
  286. db 0
  287. align 1
  288. L33 label byte
  289. db 37
  290. db 120
  291. db 0
  292. align 1
  293. L31 label byte
  294. db 37
  295. db 100
  296. db 0
  297. align 1
  298. L29 label byte
  299. db 37
  300. db 99
  301. db 0
  302. align 1
  303. L24 label byte
  304. db 123
  305. db 37
  306. db 100
  307. db 32
  308. db 37
  309. db 100
  310. db 32
  311. db 37
  312. db 100
  313. db 32
  314. db 37
  315. db 100
  316. db 125
  317. db 0
  318. align 1
  319. L11 label byte
  320. db 37
  321. db 98
  322. db 32
  323. db 37
  324. db 98
  325. db 32
  326. db 37
  327. db 98
  328. db 32
  329. db 37
  330. db 98
  331. db 32
  332. db 37
  333. db 98
  334. db 32
  335. db 37
  336. db 98
  337. db 10
  338. db 0
  339. align 4
  340. L10 label byte
  341. dd 00H
  342. dd 040140000H
  343. align 1
  344. L9 label byte
  345. db 37
  346. db 115
  347. db 37
  348. db 115
  349. db 32
  350. db 37
  351. db 102
  352. db 37
  353. db 99
  354. db 0
  355. align 1
  356. L8 label byte
  357. db 115
  358. db 116
  359. db 0
  360. align 1
  361. L7 label byte
  362. db 116
  363. db 101
  364. db 0
  365. align 1
  366. L6 label byte
  367. db 37
  368. db 115
  369. db 37
  370. db 115
  371. db 32
  372. db 37
  373. db 119
  374. db 37
  375. db 99
  376. db 0
  377. align 1
  378. L5 label byte
  379. db 116
  380. db 101
  381. db 115
  382. db 116
  383. db 32
  384. db 37
  385. db 100
  386. db 37
  387. db 99
  388. db 0
  389. align 1
  390. L4 label byte
  391. db 50
  392. db 0
  393. align 1
  394. L3 label byte
  395. db 116
  396. db 101
  397. db 115
  398. db 116
  399. db 32
  400. db 37
  401. db 115
  402. db 10
  403. db 0
  404. align 1
  405. L2 label byte
  406. db 116
  407. db 101
  408. db 115
  409. db 116
  410. db 32
  411. db 49
  412. db 10
  413. db 0
  414. _TEXT ends
  415. end