-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdate.asm
More file actions
223 lines (153 loc) · 7.91 KB
/
date.asm
File metadata and controls
223 lines (153 loc) · 7.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
;//////////////////////////////////////////////////////////////////////////////////////////////////
;// [ DATE ]
;//////////////////////////////////////////////////////////////////////////////////////////////////
DATE: push rbp ; create the stack frame
mov rbp, rsp
sub rsp, cDATEq ; size for local variable
;/////////////////////////////////////////////////////////////////
mov rax, SYS_TIME
xor rdi, rdi
syscall
mov qword [rbp - pTIMESTAMP], rax
xor rdx, rdx
mov rbx, 60
div rbx
mov qword [rbp - pSECOND], rdx
xor rdx, rdx
mov rbx, 60
div rbx
mov qword [rbp - pMINUTE], rdx
xor rdx, rdx
mov rbx, 24
div rbx
inc rdx
mov qword [rbp - pHOUR], rdx
;//////////////////////////////////////////////////
mov rax, qword [rbp - pTIMESTAMP]
sub rax, LEAPOCH
mov qword [rbp - pTEMPSEC], rax
xor rdx, rdx
mov rbx, 86400
div rbx
mov qword [rbp - pTEMPDAY], rax
mov qword [rbp - pREMSEC], rdx
cmp qword [rbp - pREMSEC], 0x00
jg DATE2
add qword [rbp - pREMSEC], 86400
dec qword [rbp - pTEMPDAY]
;///////////////////////////////////////////////
DATE2: mov rax, qword [rbp - pTEMPDAY]
add rax, 0x03
xor rdx, rdx
mov rbx, 0x07
div rbx
mov qword [rbp - pWEEKDAY], rdx
cmp rdx, 0x00
jg DATE3
add qword [rbp - pWEEKDAY], 0x07
;///////////////////////////////////////////////
DATE3: mov rax, qword [rbp - pTEMPDAY]
xor rdx, rdx
mov rbx, DAYS_PER_400Y
div rbx
mov qword [rbp - pCYCLES_QC], rax
mov qword [rbp - pREMDAY], rdx
cmp rdx, 0x00
jg DATE4
add qword [rbp - pREMDAY], DAYS_PER_400Y
dec qword [rbp - pCYCLES_QC]
;///////////////////////////////////////////////
DATE4: xor rdx, rdx
mov rax, qword [rbp - pREMDAY]
mov rbx, DAYS_PER_100Y
div rbx
mov qword [rbp - pCYCLES_C], rax
cmp rax, 0x04
jne DATE5
dec qword [rbp - pCYCLES_C]
DATE5: mov rdx, DAYS_PER_100Y
mul rdx
sub qword [rbp - pREMDAY], rax
;///////////////////////////////////////////////
xor rdx, rdx
mov rax, qword [rbp - pREMDAY]
mov rbx, DAYS_PER_4Y
div rbx
mov qword [rbp - pCYCLES_Q], rax
cmp rax, 0x19
jne DATE6
dec qword [rbp - pCYCLES_Q]
DATE6: mov rdx, DAYS_PER_4Y
mul rdx
sub qword [rbp - pREMDAY], rax
;///////////////////////////////////////////////
xor rdx, rdx
mov rax, qword [rbp - pREMDAY]
mov rbx, 365
div rbx
mov qword [rbp - pREMYEAR], rax
cmp rax, 0x04
jne DATE7
dec qword [rbp - pREMYEAR]
DATE7: mov rdx, 365
mul rdx
sub qword [rbp - pREMDAY], rax
;///////////////////////////////////////////////
xor r8, r8
mov rax, qword [rbp - pCYCLES_QC]
mov rdx, 400
mul rdx
add r8, rax
mov rax, qword [rbp - pCYCLES_C]
mov rdx, 100
mul rdx
add r8, rax
mov rax, qword [rbp - pCYCLES_Q]
mov rdx, 4
mul rdx
add r8, rax
add r8, qword [rbp - pREMYEAR]
add r8, 2000
mov qword [rbp - pYEAR], r8
;///////////////////////////////////////////////
xor rbx, rbx
mov rcx, qword [rbp - pREMDAY]
mov rdx, DAYS_PER_MONTH
DATE_LOOP: xor rax, rax
mov al, byte [rdx + rbx]
cmp rcx, rax
jl DATE_RDY
sub rcx, rax
inc rbx
jmp DATE_LOOP
DATE_RDY: mov rax, rcx
inc rax
mov qword [rbp - pDAY], rax
mov rax, rbx
add rax, 0x03
mov qword [rbp - pMONTH], rax
;///////////////////////////////////////////////
write NEW_LINE, 1
mov rax, qword [rbp - pDAY]
call INT_2_STR
write POINT, 1
mov rax, qword [rbp - pMONTH]
call INT_2_STR
write POINT, 1
mov rax, qword [rbp - pYEAR]
call INT_2_STR
write SPACE, 1
write SPACE, 1
mov rax, qword [rbp - pHOUR]
call INT_2_STR
write COLON, 1
mov rax, qword [rbp - pMINUTE]
call INT_2_STR
write COLON, 1
mov rax, qword [rbp - pSECOND]
call INT_2_STR
write NEW_LINE, 1
;/////////////////////////////////////////////////////////////////
mov rsp, rbp ; destroy the stack frame
pop rbp
ret