Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ----------------------------------------------------------
- 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
- ----------------------------------------------------------
- Changes to compile -O3 with NASM
- ----------------------------------------------------------
- .LC0: -> main.LC0:
- .LC1: -> main.LC1:
- .LC2: -> main.LC2:
- .LC3: -> main.LC3:
- .LC4: -> main.LC4:
Advertisement
Add Comment
Please, Sign In to add comment