-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path02.BlockTransfer_NonOverlapped.asm
212 lines (156 loc) · 2.09 KB
/
02.BlockTransfer_NonOverlapped.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
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
%macro println 2
mov rax,01h
mov rdi,01h
mov rsi,%1
mov rdx,%2
syscall
%endmacro
section .data
msg0 db 10,'How many elements : '
len0 equ $-msg0
msg1 db 10,'Enter the array elements :'
len1 equ $-msg1
msg2 db 10,'Before transfer : '
len2 equ $-msg2
msg3 db 10,'Src is : '
len3 equ $-msg3
msg4 db 10,'Dest is : '
len4 equ $-msg4
msg5 db 10,'After transfer : '
len5 equ $-msg5
space db ' '
section .bss
src resb 25
dest resb 25
cnt resb 1
display resb 2
accept resb 3
section .text
global _start
_start:
println msg0,len0
call acceptNo
mov [cnt],bl
println msg1,len1
mov cl,[cnt]
mov rsi,src
movNext:
push rcx
push rsi
call acceptNo
pop rsi
pop rcx
mov [rsi],bl
inc rsi
dec cl
jnz movNext
println msg2,len2
println msg3,len3
mov cl,[cnt]
mov rsi,src
dispNext:
mov bl,[rsi]
push rcx
push rsi
call displayNo
println space,02h
pop rsi
pop rcx
inc rsi
dec cl
jnz dispNext
println msg4,len4
mov cl,[cnt]
mov rsi,dest
dispNext1:
mov bl,[rsi]
push rcx
push rsi
call displayNo
println space,02h
pop rsi
pop rcx
inc rsi
dec cl
jnz dispNext1
mov rcx,00h
mov cl,[cnt]
mov rsi,src
mov rdi,dest
cld
rep movsb
println msg5,len5
println msg3,len3
mov cl,[cnt]
mov rsi,src
dispNext2:
mov bl,[rsi]
push rcx
push rsi
call displayNo
println space,02h
pop rsi
pop rcx
inc rsi
dec cl
jnz dispNext2
println msg4,len4
mov cl,[cnt]
mov rsi,dest
dispNext3:
mov bl,[rsi]
push rcx
push rsi
call displayNo
println space,02h
pop rsi
pop rcx
inc rsi
dec cl
jnz dispNext3
mov rax,60
syscall
acceptNo:
mov rax,00h
mov rdi,00h
mov rsi,accept
mov rdx,03h
syscall
mov al,[accept]
sub al,30h
cmp al,09h
jle dontSub
sub al,07h
dontSub:
mov cl,04h
shl al,cl
mov bl,al
mov al,[accept+1]
sub al,30h
cmp al,09h
jle dontSubb
sub al,07h
dontSubb:
or bl,al
ret
displayNo:
mov al,bl
and al,0f0h
mov cl,04h
shr al,cl
add al,30h
cmp al,39h
jle dontAdd
add al,07h
dontAdd:
mov [display],al
mov al,bl
and al,0fh
add al,30h
cmp al,39h
jle dontAddd
add al,07h
dontAddd:
mov [display+1],al
println display,02h
ret