Working version

This commit is contained in:
Benoit T 2024-12-12 20:46:29 +01:00
parent 90e6d2807d
commit 05b0ebf886
1 changed files with 151 additions and 6 deletions

157
main.asm
View File

@ -15,6 +15,12 @@ fd_str: db "file descriptor", 0
close_str: db "close", 0 close_str: db "close", 0
content_str: db "Content: '%s'", 10, 0 content_str: db "Content: '%s'", 10, 0
nbr_str: db "number", 0 nbr_str: db "number", 0
ecx_str: db "ecx", 0
pecx_str: db "pecx", 0
a_str: db "a", 0
b_str: db "b", 0
d_str: db "d", 0
exitcode: dw 0 exitcode: dw 0
@ -95,6 +101,74 @@ readval:
;; end of readval1 ;; end of readval1
popmin:
push rbp
mov rbp, rsp
sub rsp, 22H
;; 8H, 0 -> min value address
;; 12H, 8H -> min value
;; 14H, 12H -> loop counter
;; 22H, 14H : current address
;; rdi: list effective address
mov qword [rbp-8H], rdi
mov qword [rbp-22H], rdi ; current address
mov esi, [rdi]
mov dword [rbp-12H], esi
mov ecx, 1000
minloop:
mov word [rbp-14H], cx
;; lea rdi, [pecx_str]
;; mov esi, ecx
;; call printvalue
mov r9, qword [rbp-22H]
mov edi, [r9] ; current value
mov esi, dword [rbp-12H] ; min value
cmp esi, 0
je updatemin
cmp edi, 0
je next ; skip zeroes
cmp edi, esi
jle updatemin
jmp next
updatemin:
mov r9, qword [rbp-22H]
mov dword [rbp-12H], edi
mov qword [rbp-8H], r9
next:
mov r9, qword [rbp-22H]
add r9, 4H
mov qword [rbp-22H], r9
mov cx, [rbp-14H]
cmp cx, 2
jne d
jmp d
d:
dec cx
jnz minloop
mov rax, qword [rbp-8H]
mov dword [rax], 0H
mov eax, dword [rbp-12H]
mov rsp, rbp
pop rbp
ret
_start: _start:
push rbp push rbp
mov rbp, rsp mov rbp, rsp
@ -129,7 +203,7 @@ _start:
mov word [rbp-14H], 0H ; line number mov word [rbp-14H], 0H ; line number
mov cx, [nb_lines] ; number of lines mov cx, [nb_lines] ; number of lines
loop: loop0:
mov [rbp-19H], cx ; store loop counter mov [rbp-19H], cx ; store loop counter
;; read the 1st value ;; read the 1st value
@ -143,7 +217,7 @@ loop:
;; calculate list position ;; calculate list position
xor rax, rax xor rax, rax
mov ax, word [rbp-14H] mov ax, word [rbp-14H]
mov bx, 2H mov bx, 4H
mul bx mul bx
;; 14H -> 12H : line counter ;; 14H -> 12H : line counter
mov rbx, 2000H mov rbx, 2000H
@ -184,15 +258,17 @@ loop:
mov cx, [rbp-19H] ; restore loop counter mov cx, [rbp-19H] ; restore loop counter
dec cx dec cx
jnz loop jnz loop0
;; print values ;; PRINT VALUES
mov word [rbp-14H], 0 ; line number mov word [rbp-14H], 0 ; line number
xor ecx, ecx xor ecx, ecx
mov ecx, 2024 ; There are 24 dword between address 1060H and 1000H mov ecx, 2024 ; There are 24 dword between address 1060H and 1000H
.loop: jmp skip
.loop1:
mov [rbp-19H], cx ; store loop counter mov [rbp-19H], cx ; store loop counter
;; calculate list 1 position ;; calculate list 1 position
@ -213,7 +289,76 @@ loop:
inc word [rbp-14H] inc word [rbp-14H]
mov cx, [rbp-19H] mov cx, [rbp-19H]
loop .loop loop .loop1
skip:
mov ecx, 1000
sumloop:
mov word [rbp-19H], cx
;; 50H - 46H : min1
;; 46H - 42H : min2
;; 42H - 34H : sum
;; lea rdi, [ecxnext_str]
;; mov esi, ecx
;; call printvalue
lea rdi, [rbp-2000H]
call popmin
mov dword [rbp-50H], eax
;; lea rdi, [a_str]
;; mov esi, eax
;; call printvalue
lea rdi, [rbp-1000H]
call popmin
mov dword [rbp-46H], eax
;; lea rdi, [b_str]
;; mov esi, eax
;; call printvalue
xor rax, rax
mov eax, dword [rbp-50H]
mov ebx, dword [rbp-46H]
cmp eax, ebx
jge a
jmp b
a:
sub eax, ebx
jmp sum
b:
sub ebx, eax
mov eax, ebx
jmp sum
sum:
mov rbx, qword [rbp-42H]
add rbx, rax
mov qword [rbp-42H], rbx
;; lea rdi, [d_str]
;; mov rsi, rax
;; call printvalue
mov cx, word [rbp-19H]
dec cx
cmp cx, 0
jnz sumloop
mov rax, qword [rbp-42H]
;; print sys_close result
lea rdi, [nbr_str]
mov rsi, rax
call printvalue
close_file: close_file: