diff options
| -rw-r--r-- | assignments/3/Makefile | 11 | ||||
| -rw-r--r-- | assignments/3/main.c | 17 | ||||
| -rwxr-xr-x | assignments/3/main.exe | bin | 0 -> 16672 bytes | |||
| -rw-r--r-- | assignments/3/main.s | 78 | ||||
| -rw-r--r-- | assignments/3/numbers.txt | 100 |
5 files changed, 188 insertions, 18 deletions
diff --git a/assignments/3/Makefile b/assignments/3/Makefile index aad6e24..676a135 100644 --- a/assignments/3/Makefile +++ b/assignments/3/Makefile @@ -1,4 +1,13 @@ -default: main.s +default: main.s main.exe numbers.txt main.s: main.c gcc -S -fverbose-asm -O2 main.c + +main.exe: main.c + gcc -o main.exe main.c + +numbers.txt: + ruby -e '100.times { IO.write("numbers.txt", "#{rand(100_000_000)}\n", mode: "a+") }' + +run: main.exe numbers.txt + ./main.exe < numbers.txt diff --git a/assignments/3/main.c b/assignments/3/main.c index 12d80e7..4807327 100644 --- a/assignments/3/main.c +++ b/assignments/3/main.c @@ -2,7 +2,20 @@ int main(int argc, char *argv[]) { - for (int i = 0; i < 10; i++) { - printf("%d\n", i); + int number = 0; + int max = -1; + int min = -1; + + while(scanf("%d", &number) != EOF) { + if (max == -1 || number > max) { + max = number; + } + if (min == -1 || number < min) { + min = number; + } + + number = 0; } + + printf("Max: %d\nMin: %d\n", max, min); } diff --git a/assignments/3/main.exe b/assignments/3/main.exe Binary files differnew file mode 100755 index 0000000..e66cae1 --- /dev/null +++ b/assignments/3/main.exe diff --git a/assignments/3/main.s b/assignments/3/main.s index ebf2625..e54d228 100644 --- a/assignments/3/main.s +++ b/assignments/3/main.s @@ -6,7 +6,9 @@ .text .section .rodata.str1.1,"aMS",@progbits,1 .LC0: - .string "%d\n" + .string "%d" +.LC1: + .string "Max: %d\nMin: %d\n" .section .text.startup,"ax",@progbits .p2align 4 .globl main @@ -14,28 +16,74 @@ main: .LFB11: .cfi_startproc - pushq %rbx # + pushq %r12 # .cfi_def_cfa_offset 16 - .cfi_offset 3, -16 -# main.c:5: for (int i = 0; i < 10; i++) { - xorl %ebx, %ebx # i - .p2align 4 + .cfi_offset 12, -16 + pushq %rbp # + .cfi_def_cfa_offset 24 + .cfi_offset 6, -24 +# main.c:7: int min = -1; + movl $-1, %ebp #, min +# main.c:4: { + pushq %rbx # + .cfi_def_cfa_offset 32 + .cfi_offset 3, -32 +# main.c:6: int max = -1; + movl $-1, %ebx #, max +# main.c:4: { + subq $16, %rsp #, + .cfi_def_cfa_offset 48 + leaq 12(%rsp), %r12 #, tmp107 +# main.c:9: while(scanf("%d", &number) != EOF) { + jmp .L2 # + .p2align 4,,10 .p2align 3 +.L5: +# main.c:10: if (max == -1 || number > max) { + movl 12(%rsp), %eax # number, pretmp_20 +# main.c:10: if (max == -1 || number > max) { + cmpl %eax, %ebx # pretmp_20, max + movl %eax, %edx # pretmp_20, tmp108 + cmovge %ebx, %edx # max,, tmp108 + cmpl $-1, %ebx #, max + movl %edx, %ebx # tmp108, tmp108 +# main.c:13: if (min == -1 || number < min) { + movl %eax, %edx # pretmp_20, tmp110 +# main.c:10: if (max == -1 || number > max) { + cmove %eax, %ebx # tmp108,, pretmp_20, tmp108 +# main.c:13: if (min == -1 || number < min) { + cmpl %eax, %ebp # pretmp_20, min + cmovle %ebp, %edx # min,, tmp110 + cmpl $-1, %ebp #, min + cmovne %edx, %eax # tmp110,, pretmp_20 + movl %eax, %ebp # pretmp_20, min .L2: -# main.c:6: printf("%d\n", i); - movl %ebx, %esi # i, +# main.c:9: while(scanf("%d", &number) != EOF) { + xorl %eax, %eax # + movq %r12, %rsi # tmp107, movl $.LC0, %edi #, +# main.c:5: int number = 0; + movl $0, 12(%rsp) #, number +# main.c:9: while(scanf("%d", &number) != EOF) { + call __isoc99_scanf # +# main.c:9: while(scanf("%d", &number) != EOF) { + cmpl $-1, %eax #, tmp112 + jne .L5 #, +# main.c:20: printf("Max: %d\nMin: %d\n", max, min); + movl %ebp, %edx # min, + movl %ebx, %esi # max, + movl $.LC1, %edi #, xorl %eax, %eax # -# main.c:5: for (int i = 0; i < 10; i++) { - addl $1, %ebx #, i -# main.c:6: printf("%d\n", i); call printf # -# main.c:5: for (int i = 0; i < 10; i++) { - cmpl $10, %ebx #, i - jne .L2 #, -# main.c:8: } +# main.c:21: } + addq $16, %rsp #, + .cfi_def_cfa_offset 32 xorl %eax, %eax # popq %rbx # + .cfi_def_cfa_offset 24 + popq %rbp # + .cfi_def_cfa_offset 16 + popq %r12 # .cfi_def_cfa_offset 8 ret .cfi_endproc diff --git a/assignments/3/numbers.txt b/assignments/3/numbers.txt new file mode 100644 index 0000000..8e214b4 --- /dev/null +++ b/assignments/3/numbers.txt @@ -0,0 +1,100 @@ +92466815 +74269497 +87050963 +25751600 +8977277 +77496058 +30567041 +5491932 +73316075 +62877755 +45131658 +23209575 +52124207 +68541577 +96103422 +62574138 +46543308 +69316651 +80018420 +75836516 +58878100 +6148427 +44641940 +9142229 +61646141 +14736493 +17563644 +61133076 +48271908 +54418408 +84568705 +15645588 +57940938 +10026192 +8379555 +85693099 +8887701 +51277614 +86893573 +29301811 +9482011 +16525518 +55418577 +85246213 +99702148 +43592251 +89572153 +47687764 +16903422 +54985874 +21405561 +38938206 +40252034 +77770613 +84641140 +15944022 +20266861 +24590849 +73021859 +32635053 +65623867 +46364251 +89109658 +13712279 +86114503 +5544717 +63892 +66769336 +41908253 +92439154 +39785844 +39528483 +77990612 +4983638 +47246349 +32947081 +94376839 +1540652 +2165773 +60160647 +16783606 +35466343 +37097791 +75362813 +92732163 +62378631 +73101996 +53838971 +69587672 +20567356 +42877851 +57101803 +62146312 +64184386 +6339851 +57935937 +55319705 +19904225 +90504632 +87909544 |
