summaryrefslogtreecommitdiff
path: root/PGU/OLD/asm
diff options
context:
space:
mode:
authorCarlos Maiolino <[email protected]>2025-07-10 22:55:07 +0200
committerCarlos Maiolino <[email protected]>2025-07-10 22:56:55 +0200
commitd98f46ce647846b0aa30b2e16a30fd4e152a1bf5 (patch)
tree267474fcc77cf20b428f6f4c7f768ca09f4cfe0e /PGU/OLD/asm
parent869e68986aa8f69af6e7842260a68d1e5c6f796f (diff)
Add new code
Signed-off-by: Carlos Maiolino <[email protected]>
Diffstat (limited to 'PGU/OLD/asm')
-rw-r--r--PGU/OLD/asm/exit.s17
-rw-r--r--PGU/OLD/asm/max.c27
-rw-r--r--PGU/OLD/asm/max.s39
-rw-r--r--PGU/OLD/asm/maximumbin0 -> 1120 bytes
-rw-r--r--PGU/OLD/asm/maximum.s14
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
new file mode 100644
index 0000000..4c7b855
--- /dev/null
+++ b/PGU/OLD/asm/maximum
Binary files differ
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