-
Notifications
You must be signed in to change notification settings - Fork 0
/
assignment12.asm
152 lines (108 loc) · 1.37 KB
/
assignment12.asm
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
%macro print 2
mov rax,1
mov rdi,1
mov rsi,%1
mov rdx,%2
syscall
%endmacro
section .data
array dd 100.02,104.02,701.45,150.87,542.86
dot db '.'
dotlen equ $-dot
mmsg db "Mean:"
mlen equ $-mmsg
vmsg db 10,"Variance:"
vlen equ $-vmsg
smsg db 10,"Standard Deviation:"
slen equ $-smsg
newline db 10
section .bss
mean resd 1
variance resd 1
n resd 1
h resd 1
buffer resd 8
answer resb 4
section .text
global _start
_start:
finit
fldz
mov rcx,05
mov rsi,array
l1:
fadd dword[rsi]
add rsi,04H
loop l1
mov dword[n],05
fidiv dword[n]
fst dword[mean]
print mmsg,mlen
print newline,1
call display
mov dword[variance],0H
mov rcx,05
mov rsi,array
l5:
fld dword[rsi]
fsub dword[mean]
fst st1
fmul st1
fadd dword[variance]
fstp dword[variance]
add rsi,04H
loop l5
fld dword[variance]
fidiv dword[n]
fst dword[variance]
print vmsg,vlen
print newline,1
call display
fld dword[variance]
fsqrt
print smsg,slen
print newline,1
call display
jmp exit
display:
mov dword[h],100
fimul dword[h]
fbstp [buffer]
mov rcx,9
mov rsi,buffer+9
l2:
mov bl,byte[rsi]
push rsi
push rcx
call h2a
pop rcx
pop rsi
dec rsi
loop l2
print dot,dotlen
mov rsi,buffer
mov bl,byte[rsi]
call h2a
ret
h2a:
xor rax,rax
mov rcx,02
mov rsi,answer
l4:
rol bl,04
mov al,bl
and al,0FH
cmp al,09H
jbe l3
add al,07H
l3:
add al,30H
mov byte[rsi],al
inc rsi
loop l4
print answer,2
ret
exit:
mov rax,60
mov rdi,0
syscall