diff options
Diffstat (limited to 'PGU/OLD/asm')
| -rw-r--r-- | PGU/OLD/asm/exit.s | 17 | ||||
| -rw-r--r-- | PGU/OLD/asm/max.c | 27 | ||||
| -rw-r--r-- | PGU/OLD/asm/max.s | 39 | ||||
| -rw-r--r-- | PGU/OLD/asm/maximum | bin | 0 -> 1120 bytes | |||
| -rw-r--r-- | PGU/OLD/asm/maximum.s | 14 |
5 files changed, 97 insertions, 0 deletions
diff --git a/PGU/OLD/asm/exit.s b/PGU/OLD/asm/exit.s new file mode 100644 index 0000000..b1ef45b --- /dev/null +++ b/PGU/OLD/asm/exit.s @@ -0,0 +1,17 @@ +.section .data + +.section .text + +.globl _start + +_start: + + # %eax should contain syscall number + # to be executed (exit syscall num: 1) + movl $1, %eax + + # %ebx contains syscall argument + movl $5, %ebx + + #Call syscall interrupt + int $0x80 diff --git a/PGU/OLD/asm/max.c b/PGU/OLD/asm/max.c new file mode 100644 index 0000000..5b4c37a --- /dev/null +++ b/PGU/OLD/asm/max.c @@ -0,0 +1,27 @@ +int main(void) +{ + + static int list[] = {10,20,30,40,5,50,60,70,80,90,0}; + int i, ret; + + ret = list[0]; + i = 0; + + /* + for (i = 0; list[i] != 0; i++) { + if (list[i] < ret) + ret = list[i]; + } + */ + while (1) { + i++; + + if (list[i] == 0) + return ret; + + if (ret > list[i]) + ret = list[i]; + } + + return ret; +} diff --git a/PGU/OLD/asm/max.s b/PGU/OLD/asm/max.s new file mode 100644 index 0000000..21f750a --- /dev/null +++ b/PGU/OLD/asm/max.s @@ -0,0 +1,39 @@ + .file "max.c" + .text + .globl main + .type main, @function +main: +.LFB0: + .cfi_startproc + movl $list.1406+8, %ecx + movl $20, %edx + movl $10, %eax +.L2: + cmpl %edx, %eax + cmovg %edx, %eax + addl $4, %ecx + movl -4(%ecx), %edx + testl %edx, %edx + jne .L2 + rep ret + .cfi_endproc +.LFE0: + .size main, .-main + .section .rodata + .align 32 + .type list.1406, @object + .size list.1406, 44 +list.1406: + .long 10 + .long 20 + .long 30 + .long 40 + .long 5 + .long 50 + .long 60 + .long 70 + .long 80 + .long 90 + .long 0 + .ident "GCC: (GNU) 6.2.1 20160916 (Red Hat 6.2.1-2)" + .section .note.GNU-stack,"",@progbits diff --git a/PGU/OLD/asm/maximum b/PGU/OLD/asm/maximum Binary files differnew file mode 100644 index 0000000..4c7b855 --- /dev/null +++ b/PGU/OLD/asm/maximum diff --git a/PGU/OLD/asm/maximum.s b/PGU/OLD/asm/maximum.s new file mode 100644 index 0000000..cb6394c --- /dev/null +++ b/PGU/OLD/asm/maximum.s @@ -0,0 +1,14 @@ +#%edi holds the current position +#%ebx hold the current highest value +#%eax hold the current element being examined + +.section.data data_items: +.long 3, 4, 5, 65, 44, 36, 99, 6, 7, 8, 9, 0 + data_end:.section.text.globl _start + _start:movl $ (data_items), %edi +movl (%edi), %eax +movl % eax, %ebx +start_loop:cmpl $ (data_end), %edi +je loop_exit +addl $4, %edi +movl (%edi), %eax cmpl % ebx, %eax jle start_loop movl % eax, %ebx jmp start_loop loop_exit:movl $1, %eax int $0x80 |
