RicardasSim

c2nasm with -O0 and -O3

Aug 22nd, 2026 (edited)
4,570
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.17 KB | None | 0 0
  1. ----------------------------------------------------------
  2. C:
  3. ----------------------------------------------------------
  4. //-Wall -Wextra -Wpedantic -Wshadow -Wconversion
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <time.h>
  8.  
  9. int main()
  10. {
  11. srand((unsigned int)time(NULL));
  12. int r_1 = rand();
  13. printf("(1a) %d\n", r_1);
  14. int last_two_1 = abs(r_1 % 100);
  15. printf("(1b) %02d\n", last_two_1);
  16. int r_2 = rand();
  17. printf("(2a) %d\n", r_2);
  18. int last_two_2 = abs(r_2 % 100);
  19. printf("(2b) %02d\n", last_two_2);
  20.  
  21. int limit = (last_two_1 > last_two_2) ? last_two_2 : last_two_1;
  22.  
  23. int line_length = 0;
  24.  
  25. for (int i = 1; i <= limit; ++i)
  26. {
  27. int printed = printf("%d ", i);
  28. line_length += printed;
  29.  
  30. if (line_length >= 80)
  31. {
  32. printf("\n");
  33. line_length = 0;
  34. }
  35. }
  36.  
  37. putchar('\n');
  38.  
  39. return 0;
  40. }
  41.  
  42. ----------------------------------------------------------
  43. c2nasm -O0
  44. ----------------------------------------------------------
  45. default rel
  46.  
  47. global main
  48.  
  49. extern putchar
  50. extern printf
  51. extern rand
  52. extern srand
  53. extern time
  54.  
  55.  
  56. SECTION .text exec
  57.  
  58. main:
  59. endbr64
  60. push rbp
  61. mov rbp, rsp
  62. sub rsp, 32
  63. mov edi, 0
  64. call time
  65. mov edi, eax
  66. call srand
  67. call rand
  68. mov dword [rbp-18H], eax
  69. mov eax, dword [rbp-18H]
  70. mov esi, eax
  71. lea rax, [rel L_004]
  72. mov rdi, rax
  73. mov eax, 0
  74. call printf
  75. mov edx, dword [rbp-18H]
  76. movsxd rax, edx
  77. imul rax, rax, 1374389535
  78. shr rax, 32
  79. sar eax, 5
  80. mov ecx, edx
  81. sar ecx, 31
  82. sub eax, ecx
  83. imul ecx, eax, 100
  84. mov eax, edx
  85. sub eax, ecx
  86. mov edx, eax
  87. neg edx
  88. cmovns eax, edx
  89. mov dword [rbp-14H], eax
  90. mov eax, dword [rbp-14H]
  91. mov esi, eax
  92. lea rax, [rel L_005]
  93. mov rdi, rax
  94. mov eax, 0
  95. call printf
  96. call rand
  97. mov dword [rbp-10H], eax
  98. mov eax, dword [rbp-10H]
  99. mov esi, eax
  100. lea rax, [rel L_006]
  101. mov rdi, rax
  102. mov eax, 0
  103. call printf
  104. mov edx, dword [rbp-10H]
  105. movsxd rax, edx
  106. imul rax, rax, 1374389535
  107. shr rax, 32
  108. sar eax, 5
  109. mov ecx, edx
  110. sar ecx, 31
  111. sub eax, ecx
  112. imul ecx, eax, 100
  113. mov eax, edx
  114. sub eax, ecx
  115. mov edx, eax
  116. neg edx
  117. cmovns eax, edx
  118. mov dword [rbp-0CH], eax
  119. mov eax, dword [rbp-0CH]
  120. mov esi, eax
  121. lea rax, [rel L_007]
  122. mov rdi, rax
  123. mov eax, 0
  124. call printf
  125. mov edx, dword [rbp-14H]
  126. mov eax, dword [rbp-0CH]
  127. cmp edx, eax
  128. cmovle eax, edx
  129. mov dword [rbp-8H], eax
  130. mov dword [rbp-20H], 0
  131. mov dword [rbp-1CH], 1
  132. jmp L_003
  133.  
  134. L_001: mov eax, dword [rbp-1CH]
  135. mov esi, eax
  136. lea rax, [rel L_008]
  137. mov rdi, rax
  138. mov eax, 0
  139. call printf
  140. mov dword [rbp-4H], eax
  141. mov eax, dword [rbp-4H]
  142. add dword [rbp-20H], eax
  143. cmp dword [rbp-20H], 79
  144. jle L_002
  145. mov edi, 10
  146. call putchar
  147. mov dword [rbp-20H], 0
  148. L_002: add dword [rbp-1CH], 1
  149. L_003: mov eax, dword [rbp-1CH]
  150. cmp eax, dword [rbp-8H]
  151. jle L_001
  152. mov edi, 10
  153. call putchar
  154. mov eax, 0
  155. leave
  156. ret
  157.  
  158. SECTION .data noexec
  159.  
  160.  
  161. SECTION .bss noexec
  162.  
  163.  
  164. SECTION .rodata noexec
  165.  
  166. L_004:
  167. db 28H, 31H, 61H, 29H, 20H, 25H, 64H, 0AH
  168. db 00H
  169.  
  170. L_005:
  171. db 28H, 31H, 62H, 29H, 20H, 25H, 30H, 32H
  172. db 64H, 0AH, 00H
  173.  
  174. L_006:
  175. db 28H, 32H, 61H, 29H, 20H, 25H, 64H, 0AH
  176. db 00H
  177.  
  178. L_007:
  179. db 28H, 32H, 62H, 29H, 20H, 25H, 30H, 32H
  180. db 64H, 0AH, 00H
  181.  
  182. L_008:
  183. db 25H, 64H, 20H, 00H
  184.  
  185.  
  186. SECTION .note.gnu.property noexec
  187.  
  188. db 04H, 00H, 00H, 00H, 10H, 00H, 00H, 00H
  189. db 05H, 00H, 00H, 00H, 47H, 4EH, 55H, 00H
  190. db 02H, 00H, 00H, 0C0H, 04H, 00H, 00H, 00H
  191. db 03H, 00H, 00H, 00H, 00H, 00H, 00H, 00H
  192.  
  193. ----------------------------------------------------------
  194. c2nasm -O3
  195. ----------------------------------------------------------
  196. default rel
  197.  
  198. global main
  199.  
  200. extern putc
  201. extern stdout
  202. extern putchar
  203. extern __printf_chk
  204. extern rand
  205. extern srand
  206. extern time
  207.  
  208.  
  209. SECTION .text exec
  210.  
  211.  
  212. SECTION .data noexec
  213.  
  214.  
  215. SECTION .bss noexec
  216.  
  217.  
  218. SECTION .rodata.str1.1 noexec
  219.  
  220. .LC0:
  221. db 28H, 31H, 61H, 29H, 20H, 25H, 64H, 0AH
  222. db 00H
  223.  
  224. .LC1:
  225. db 28H, 31H, 62H, 29H, 20H, 25H, 30H, 32H
  226. db 64H, 0AH, 00H
  227.  
  228. .LC2:
  229. db 28H, 32H, 61H, 29H, 20H, 25H, 64H, 0AH
  230. db 00H
  231.  
  232. .LC3:
  233. db 28H, 32H, 62H, 29H, 20H, 25H, 30H, 32H
  234. db 64H, 0AH, 00H
  235.  
  236. .LC4:
  237. db 25H, 64H, 20H, 00H
  238.  
  239.  
  240. SECTION .text.startup exec
  241.  
  242. main:
  243. endbr64
  244. push r13
  245. xor edi, edi
  246. push r12
  247. push rbp
  248. push rbx
  249. sub rsp, 8
  250. call time
  251. mov edi, eax
  252. call srand
  253. call rand
  254. lea rsi, [rel .LC0]
  255. mov edi, 2
  256. mov ebx, eax
  257. mov edx, eax
  258. xor eax, eax
  259. call __printf_chk
  260. movsxd rax, ebx
  261. mov edx, ebx
  262. mov edi, 2
  263. imul rax, rax, 1374389535
  264. sar edx, 31
  265. lea rsi, [rel .LC1]
  266. sar rax, 37
  267. sub eax, edx
  268. imul eax, eax, 100
  269. sub ebx, eax
  270. mov r12d, ebx
  271. neg r12d
  272. cmovs r12d, ebx
  273. xor eax, eax
  274. mov edx, r12d
  275. call __printf_chk
  276. call rand
  277. lea rsi, [rel .LC2]
  278. mov edi, 2
  279. mov ebx, eax
  280. mov edx, eax
  281. xor eax, eax
  282. call __printf_chk
  283. movsxd rax, ebx
  284. mov edx, ebx
  285. mov edi, 2
  286. imul rax, rax, 1374389535
  287. sar edx, 31
  288. lea rsi, [rel .LC3]
  289. sar rax, 37
  290. sub eax, edx
  291. imul eax, eax, 100
  292. sub ebx, eax
  293. mov eax, ebx
  294. neg eax
  295. cmovns ebx, eax
  296. xor eax, eax
  297. mov edx, ebx
  298. call __printf_chk
  299. cmp r12d, ebx
  300. cmovg r12d, ebx
  301. test r12d, r12d
  302. jz L_003
  303. add r12d, 1
  304. mov ebx, 1
  305. xor ebp, ebp
  306. lea r13, [rel .LC4]
  307. jmp L_002
  308.  
  309. ALIGN 8
  310. L_001: add ebx, 1
  311. cmp ebx, r12d
  312. jz L_003
  313. L_002: mov edx, ebx
  314. mov rsi, r13
  315. mov edi, 2
  316. xor eax, eax
  317. call __printf_chk
  318. add ebp, eax
  319. cmp ebp, 79
  320. jle L_001
  321. mov edi, 10
  322. add ebx, 1
  323. xor ebp, ebp
  324. call putchar
  325. cmp ebx, r12d
  326. jnz L_002
  327. L_003: mov rsi, qword [rel stdout]
  328. mov edi, 10
  329. call putc
  330. add rsp, 8
  331. xor eax, eax
  332. pop rbx
  333. pop rbp
  334. pop r12
  335. pop r13
  336. ret
  337.  
  338.  
  339.  
  340. SECTION .note.gnu.property noexec
  341.  
  342. db 04H, 00H, 00H, 00H, 10H, 00H, 00H, 00H
  343. db 05H, 00H, 00H, 00H, 47H, 4EH, 55H, 00H
  344. db 02H, 00H, 00H, 0C0H, 04H, 00H, 00H, 00H
  345. db 03H, 00H, 00H, 00H, 00H, 00H, 00H, 00H
  346.  
  347. ----------------------------------------------------------
  348. Changes to compile -O3 with NASM
  349. ----------------------------------------------------------
  350. .LC0: -> main.LC0:
  351. .LC1: -> main.LC1:
  352. .LC2: -> main.LC2:
  353. .LC3: -> main.LC3:
  354. .LC4: -> main.LC4:
  355.  
Advertisement
Add Comment
Please, Sign In to add comment