@@ -11,7 +11,6 @@ segment readable writable
11
11
result: times 10 db 0 ;empty string for printing the result later
12
12
db 10 , 0
13
13
buf: rb 10000 ;buffer
14
- nums: rd 1000 ;array for the numbers in int form
15
14
curr: rb 16 ;buffer for current number
16
15
17
16
segment readable executable
35
34
xor ecx , ecx ;saved chars (result)
36
35
mov r8d , 10 ;for /mod 10
37
36
mov r10d , 1000 ;for /mod 1000
38
- xor r9d , r9d ;index in nums
37
+ xor r9d , r9d ;index for nums
39
38
40
39
readnext:
41
40
cmp r9d , 1000 ;1000 numbers done?
@@ -44,6 +43,7 @@ readnext:
44
43
mov [ curr ], rax
45
44
mov [ curr + 8 ], rax
46
45
xor esi , esi ;reset index for curr
46
+ xor r11d , r11d
47
47
48
48
readloop:
49
49
mov al , [ buf + edi ] ;get char
@@ -62,18 +62,18 @@ getnum:
62
62
mov eax , [ val + 4 * eax ] ;convert to int value
63
63
cmp eax , ebx ;is value < last value
64
64
jl subtract ;if yes, subtract it
65
- add [ nums + 4 * r9d ], eax ;else add it
65
+ add r11d , eax ;else add it
66
66
jmp nextval
67
67
68
68
subtract:
69
- sub [ nums + 4 * r9d ] , eax
69
+ sub r11d , eax
70
70
71
71
nextval:
72
72
mov ebx , eax ;update last value
73
73
xor eax , eax ;clear eax
74
74
test esi , esi ;repeat if index > 0
75
75
jnz getnum
76
- mov eax , [ nums + 4 * r9d ] ;current number in eax
76
+ mov eax , r11d ;current number in eax
77
77
xor ebx , ebx ;for opt length
78
78
xor edx , edx ;get 1000s
79
79
div r10d
0 commit comments