From 90ba93a163339cbb3f58ea8bff434efd32c8ddca Mon Sep 17 00:00:00 2001 From: Fuwn Date: Sat, 19 Nov 2022 14:40:34 -0800 Subject: feat: xmm register double sub --- .idea/.gitignore | 8 ++++ .idea/codeStyles/codeStyleConfig.xml | 5 ++ .idea/dictionaries | 6 +++ .idea/discord.xml | 7 +++ .idea/ellipse2.iml | 8 ++++ .idea/misc.xml | 8 ++++ .idea/modules.xml | 8 ++++ .idea/vcs.xml | 6 +++ ellipse2 | Bin 9016 -> 17224 bytes ellipse2.asm | 88 +++++++++++++++++++++++++++-------- ellipse2.o | Bin 960 -> 1984 bytes 11 files changed, 124 insertions(+), 20 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/codeStyles/codeStyleConfig.xml create mode 100644 .idea/dictionaries create mode 100644 .idea/discord.xml create mode 100644 .idea/ellipse2.iml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml mode change 100755 => 100644 ellipse2 diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 0000000..a55e7a1 --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/dictionaries b/.idea/dictionaries new file mode 100644 index 0000000..16b5600 --- /dev/null +++ b/.idea/dictionaries @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/discord.xml b/.idea/discord.xml new file mode 100644 index 0000000..d8e9561 --- /dev/null +++ b/.idea/discord.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/.idea/ellipse2.iml b/.idea/ellipse2.iml new file mode 100644 index 0000000..bc2cd87 --- /dev/null +++ b/.idea/ellipse2.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..461b022 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..5172627 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/ellipse2 b/ellipse2 old mode 100755 new mode 100644 index e0e90e3..528816e Binary files a/ellipse2 and b/ellipse2 differ diff --git a/ellipse2.asm b/ellipse2.asm index c58f544..1f16360 100644 --- a/ellipse2.asm +++ b/ellipse2.asm @@ -1,31 +1,67 @@ -global _start +extern printf +extern puts + +global main struc ellipse - major: resd 1 - minor: resd 1 - area: resd 1 - circumference: resd 1 - eccentricity: resd 1 + .major: resq 1 + .minor: resq 1 + .area: resq 1 + .circumference: resq 1 + .eccentricity: resq 1 endstruc section .data +pi: dq 3.14 +bottom: dq 0 +format: db "number: %d", 10, 0 ; g +usage_error_message: db "usage: ellipse major minor", 10, 0 e: istruc ellipse - at major, dd 0 - at minor, dd 0 - at area, dd 0 - at circumference, dd 0 - at eccentricity, dd 0 + at ellipse.major, dq 0 + at ellipse.minor, dq 0 + at ellipse.area, dq 0 + at ellipse.circumference, dq 0 + at ellipse.eccentricity, dq 0 iend +.size: dd $ - e + +;section .rodata ; noexec nowrite align=4 +;pi: dq 3.141592653589793238462 -section .rodata noexec nowrite align=4 -pi: dd 3.141592653589793238462 +section .bss section .text -_start: - finit +main: + ; if (argv != 3) + cmp rdi, 3 + jne usage_error + + mov r12, rsi ; argv + + ; major = argv[1] + mov rdi, [r12 + 8] + mov qword [e + ellipse.major], rdi - mov ebx, 100 + ; major = argv[2] + mov rdi, [r12 + 16] + mov qword [e + ellipse.minor], rdi + + ; area = pi * major * minor +; movss xmm0, [e + ellipse.major] +; movss xmm1, [e + ellipse.minor] +; addss xmm0, xmm1 +; mov qword [e + ellipse.area], xmm3 + +; cvtsi2sd xmm0, [e + ellipse.major] +; cvtsi2sd xmm1, [e + ellipse.minor] +; addsd xmm0, xmm1 + sub rsp, 8 + movq xmm0, qword [e + ellipse.major] + mov rdi, format + mov rax, 1 + call printf + add rsp, 8 ; .repeat: lea edi, [rbx + 0] @@ -33,9 +69,9 @@ _start: ; dec ebx ; jge .repeat - xor edi, edi - mov eax, 231 - syscall + xor edi, edi + mov eax, 231 ; 0x60 + syscall ; mov rax, 60 ; mov rdi, 0 @@ -69,6 +105,18 @@ print_uint32: lea edx, [rsp + 16 + 1] sub edx, esi syscall - + add rsp, 24 ret + + jmp done + +usage_error: + mov rdi, usage_error_message + call puts + +done: + mov rax, 60 + mov rdi, 0 + + syscall diff --git a/ellipse2.o b/ellipse2.o index d18df67..0f313fe 100644 Binary files a/ellipse2.o and b/ellipse2.o differ -- cgit v1.2.3