Working version
This commit is contained in:
parent
90e6d2807d
commit
05b0ebf886
157
main.asm
157
main.asm
|
|
@ -15,6 +15,12 @@ fd_str: db "file descriptor", 0
|
|||
close_str: db "close", 0
|
||||
content_str: db "Content: '%s'", 10, 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
|
||||
|
||||
|
|
@ -95,6 +101,74 @@ readval:
|
|||
;; 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:
|
||||
push rbp
|
||||
mov rbp, rsp
|
||||
|
|
@ -129,7 +203,7 @@ _start:
|
|||
mov word [rbp-14H], 0H ; line number
|
||||
|
||||
mov cx, [nb_lines] ; number of lines
|
||||
loop:
|
||||
loop0:
|
||||
mov [rbp-19H], cx ; store loop counter
|
||||
|
||||
;; read the 1st value
|
||||
|
|
@ -143,7 +217,7 @@ loop:
|
|||
;; calculate list position
|
||||
xor rax, rax
|
||||
mov ax, word [rbp-14H]
|
||||
mov bx, 2H
|
||||
mov bx, 4H
|
||||
mul bx
|
||||
;; 14H -> 12H : line counter
|
||||
mov rbx, 2000H
|
||||
|
|
@ -184,15 +258,17 @@ loop:
|
|||
|
||||
mov cx, [rbp-19H] ; restore loop counter
|
||||
dec cx
|
||||
jnz loop
|
||||
jnz loop0
|
||||
|
||||
;; print values
|
||||
;; PRINT VALUES
|
||||
|
||||
mov word [rbp-14H], 0 ; line number
|
||||
xor ecx, ecx
|
||||
mov ecx, 2024 ; There are 24 dword between address 1060H and 1000H
|
||||
|
||||
.loop:
|
||||
jmp skip
|
||||
|
||||
.loop1:
|
||||
mov [rbp-19H], cx ; store loop counter
|
||||
|
||||
;; calculate list 1 position
|
||||
|
|
@ -213,7 +289,76 @@ loop:
|
|||
inc word [rbp-14H]
|
||||
|
||||
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:
|
||||
|
|
|
|||
Loading…
Reference in New Issue