-
Notifications
You must be signed in to change notification settings - Fork 16
/
xm.asm
117 lines (70 loc) · 1023 Bytes
/
xm.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
segment .data
fmt: db "string: %d",10,0
token_: db "%c" ,0
array_print: db "%d "
segment .bss
var1: resq 100
var2: resq 1
size_array: resq 1000
n: resq 8
segment .text
extern printf
extern scanf
extern gets
global main
main:
push RBP
mov rax,0
mov rbx,0
mov rcx,0
mov rdx,0
;mov rsi,0
mov rdi, var1
call gets
mov rdi,token_
mov rsi, var2
call scanf
;mov rdi,fmt
;mov rsi,[var2]
;call printf
XOR r15,r15
mov RCX, var1
XOR r8,r8
XOR r9,r9
mov RBX,size_array
;mov rdi,fmt
;mov rsi,RCX
;call printf
string_check:
mov RDX,0
mov dl,[RCX]
add RCX,1
cmp RDX,0
je print_level
cmp RDX, [var2]
je size
add r8,1
jmp string_check
size:
mov [RBX+r9],r8
XOR r8,r8
add r9,8
jmp string_check
print_level:
mov [RBX+r9],r8
mov RBX,0
add r9,8
start: mov RDI,array_print
mov RSI, [size_array+RBX]
push RBX
push r9
mov RAX,0
call printf
pop r9
pop RBX
add RBX,8
cmp RBX,r9
jne start
Exit:
pop RBP
ret