CCCPaste

c2nasm with -O0 and -O3

C:
-----------------------------
//-Wall -Wextra -Wpedantic -Wshadow -Wconversion
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
srand((unsigned int)time(NULL));
int r_1 = rand();
printf("(1a) %d\n", r_1);
int last_two_1 = abs(r_1 % 100);
printf("(1b) %02d\n", last_two_1);
int r_2 = rand();
printf("(2a) %d\n", r_2);
int last_two_2 = abs(r_2 % 100);
printf("(2b) %02d\n", last_two_2);

int limit = (last_two_1 > last_two_2) ? last_two_2 : last_two_1;

int line_length = 0;

for (int i = 1; i <= limit; ++i)
{
int printed = printf("%d ", i);
line_length += printed;

if (line_length >= 80)
{
printf("\n");
line_length = 0;
}
}

putchar('\n');

return 0;
}

c2nasm -O0
-----------------------------
default rel

global main

extern putchar
extern printf
extern rand
extern srand
extern time


SECTION .text exec

main:
endbr64
push rbp
mov rbp, rsp
sub rsp, 32
mov edi, 0
call time
mov edi, eax
call srand
call rand
mov dword [rbp-18H], eax
mov eax, dword [rbp-18H]
mov esi, eax
lea rax, [rel L_004]
mov rdi, rax
mov eax, 0
call printf
mov edx, dword [rbp-18H]
movsxd rax, edx
imul rax, rax, 1374389535
shr rax, 32
sar eax, 5
mov ecx, edx
sar ecx, 31
sub eax, ecx
imul ecx, eax, 100
mov eax, edx
sub eax, ecx
mov edx, eax
neg edx
cmovns eax, edx
mov dword [rbp-14H], eax
mov eax, dword [rbp-14H]
mov esi, eax
lea rax, [rel L_005]
mov rdi, rax
mov eax, 0
call printf
call rand
mov dword [rbp-10H], eax
mov eax, dword [rbp-10H]
mov esi, eax
lea rax, [rel L_006]
mov rdi, rax
mov eax, 0
call printf
mov edx, dword [rbp-10H]
movsxd rax, edx
imul rax, rax, 1374389535
shr rax, 32
sar eax, 5
mov ecx, edx
sar ecx, 31
sub eax, ecx
imul ecx, eax, 100
mov eax, edx
sub eax, ecx
mov edx, eax
neg edx
cmovns eax, edx
mov dword [rbp-0CH], eax
mov eax, dword [rbp-0CH]
mov esi, eax
lea rax, [rel L_007]
mov rdi, rax
mov eax, 0
call printf
mov edx, dword [rbp-14H]
mov eax, dword [rbp-0CH]
cmp edx, eax
cmovle eax, edx
mov dword [rbp-8H], eax
mov dword [rbp-20H], 0
mov dword [rbp-1CH], 1
jmp L_003

L_001: mov eax, dword [rbp-1CH]
mov esi, eax
lea rax, [rel L_008]
mov rdi, rax
mov eax, 0
call printf
mov dword [rbp-4H], eax
mov eax, dword [rbp-4H]
add dword [rbp-20H], eax
cmp dword [rbp-20H], 79
jle L_002
mov edi, 10
call putchar
mov dword [rbp-20H], 0
L_002: add dword [rbp-1CH], 1
L_003: mov eax, dword [rbp-1CH]
cmp eax, dword [rbp-8H]
jle L_001
mov edi, 10
call putchar
mov eax, 0
leave
ret

SECTION .data noexec


SECTION .bss noexec


SECTION .rodata noexec

L_004:
db 28H, 31H, 61H, 29H, 20H, 25H, 64H, 0AH
db 00H

L_005:
db 28H, 31H, 62H, 29H, 20H, 25H, 30H, 32H
db 64H, 0AH, 00H

L_006:
db 28H, 32H, 61H, 29H, 20H, 25H, 64H, 0AH
db 00H

L_007:
db 28H, 32H, 62H, 29H, 20H, 25H, 30H, 32H
db 64H, 0AH, 00H

L_008:
db 25H, 64H, 20H, 00H


SECTION .note.gnu.property noexec

db 04H, 00H, 00H, 00H, 10H, 00H, 00H, 00H
db 05H, 00H, 00H, 00H, 47H, 4EH, 55H, 00H
db 02H, 00H, 00H, 0C0H, 04H, 00H, 00H, 00H
db 03H, 00H, 00H, 00H, 00H, 00H, 00H, 00H

c2nasm -O3
-----------------------------
default rel

global main

extern putc
extern stdout
extern putchar
extern __printf_chk
extern rand
extern srand
extern time


SECTION .text exec


SECTION .data noexec


SECTION .bss noexec


SECTION .rodata.str1.1 noexec

.LC0:
db 28H, 31H, 61H, 29H, 20H, 25H, 64H, 0AH
db 00H

.LC1:
db 28H, 31H, 62H, 29H, 20H, 25H, 30H, 32H
db 64H, 0AH, 00H

.LC2:
db 28H, 32H, 61H, 29H, 20H, 25H, 64H, 0AH
db 00H

.LC3:
db 28H, 32H, 62H, 29H, 20H, 25H, 30H, 32H
db 64H, 0AH, 00H

.LC4:
db 25H, 64H, 20H, 00H


SECTION .text.startup exec

main:
endbr64
push r13
xor edi, edi
push r12
push rbp
push rbx
sub rsp, 8
call time
mov edi, eax
call srand
call rand
lea rsi, [rel .LC0]
mov edi, 2
mov ebx, eax
mov edx, eax
xor eax, eax
call __printf_chk
movsxd rax, ebx
mov edx, ebx
mov edi, 2
imul rax, rax, 1374389535
sar edx, 31
lea rsi, [rel .LC1]
sar rax, 37
sub eax, edx
imul eax, eax, 100
sub ebx, eax
mov r12d, ebx
neg r12d
cmovs r12d, ebx
xor eax, eax
mov edx, r12d
call __printf_chk
call rand
lea rsi, [rel .LC2]
mov edi, 2
mov ebx, eax
mov edx, eax
xor eax, eax
call __printf_chk
movsxd rax, ebx
mov edx, ebx
mov edi, 2
imul rax, rax, 1374389535
sar edx, 31
lea rsi, [rel .LC3]
sar rax, 37
sub eax, edx
imul eax, eax, 100
sub ebx, eax
mov eax, ebx
neg eax
cmovns ebx, eax
xor eax, eax
mov edx, ebx
call __printf_chk
cmp r12d, ebx
cmovg r12d, ebx
test r12d, r12d
jz L_003
add r12d, 1
mov ebx, 1
xor ebp, ebp
lea r13, [rel .LC4]
jmp L_002

ALIGN 8
L_001: add ebx, 1
cmp ebx, r12d
jz L_003
L_002: mov edx, ebx
mov rsi, r13
mov edi, 2
xor eax, eax
call __printf_chk
add ebp, eax
cmp ebp, 79
jle L_001
mov edi, 10
add ebx, 1
xor ebp, ebp
call putchar
cmp ebx, r12d
jnz L_002
L_003: mov rsi, qword [rel stdout]
mov edi, 10
call putc
add rsp, 8
xor eax, eax
pop rbx
pop rbp
pop r12
pop r13
ret



SECTION .note.gnu.property noexec

db 04H, 00H, 00H, 00H, 10H, 00H, 00H, 00H
db 05H, 00H, 00H, 00H, 47H, 4EH, 55H, 00H
db 02H, 00H, 00H, 0C0H, 04H, 00H, 00H, 00H
db 03H, 00H, 00H, 00H, 00H, 00H, 00H, 00H