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

Short link: