Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
MariaDB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
4508fbb5
Commit
4508fbb5
authored
Mar 05, 2002
by
monty@tik.mysql.fi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Use portable comments in assembler files
parent
cb3499b7
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
222 additions
and
208 deletions
+222
-208
Docs/manual.texi
Docs/manual.texi
+20
-4
strings/longlong2str-x86.s
strings/longlong2str-x86.s
+14
-15
strings/strings-x86.s
strings/strings-x86.s
+188
-189
No files found.
Docs/manual.texi
View file @
4508fbb5
...
@@ -566,7 +566,8 @@ a commercial memory leakage detector.
...
@@ -566,7 +566,8 @@ a commercial memory leakage detector.
@item
@item
Works on many different platforms. @xref{Which OS}.
Works on many different platforms. @xref{Which OS}.
@item
@item
Uses GNU Automake, Autoconf (Ver 2.52 or newer), and Libtool for portability.
Uses GNU Automake (1.4), Autoconf (Ver 2.52 or newer), and Libtool for
portability.
@item
@item
APIs for C, C++, Eiffel, Java, Perl, PHP, Python and Tcl. @xref{Clients}.
APIs for C, C++, Eiffel, Java, Perl, PHP, Python and Tcl. @xref{Clients}.
@item
@item
...
@@ -7015,11 +7016,10 @@ The initial download of the source tree may take a while, depending on the
...
@@ -7015,11 +7016,10 @@ The initial download of the source tree may take a while, depending on the
speed of your connection; be patient.
speed of your connection; be patient.
@item
@item
You will need GNU @code{autoconf 2.
13
}, @code{automake 1.4},
You will need GNU @code{autoconf 2.
52
}, @code{automake 1.4},
@code{libtool}, and @code{m4} to run the next set of commands.
@code{libtool}, and @code{m4} to run the next set of commands.
If you are using the 3.23 tree the new versions of @code{autoconf}
@code{automake} (1.5) doesn't yet work.
(2.52) and @code{automake} (1.5) will not work.
If you get some strange error during this stage, check that you really
If you get some strange error during this stage, check that you really
have @code{libtool} installed!
have @code{libtool} installed!
...
@@ -13707,6 +13707,13 @@ tell @code{mysql} to read its input from the file:
...
@@ -13707,6 +13707,13 @@ tell @code{mysql} to read its input from the file:
shell> mysql < batch-file
shell> mysql < batch-file
@end example
@end example
If you are running @code{mysql} under windows and have some special
characters in the file that causes problems, you can do:
@example
dos> mysql -e "source batch-file"
@end example
If you need to specify connection parameters on the command line, the
If you need to specify connection parameters on the command line, the
command might look like this:
command might look like this:
...
@@ -13718,6 +13725,9 @@ Enter password: ********
...
@@ -13718,6 +13725,9 @@ Enter password: ********
When you use @code{mysql} this way, you are creating a script file, then
When you use @code{mysql} this way, you are creating a script file, then
executing the script.
executing the script.
If you want the script to continue even if you have errors, you should
use the @code{--force} command line option.
Why use a script? Here are a few reasons:
Why use a script? Here are a few reasons:
@itemize @bullet
@itemize @bullet
...
@@ -13791,6 +13801,12 @@ If you want to get the interactive output format in batch mode, use
...
@@ -13791,6 +13801,12 @@ If you want to get the interactive output format in batch mode, use
@code{mysql -t}. To echo to the output the commands that are executed, use
@code{mysql -t}. To echo to the output the commands that are executed, use
@code{mysql -vvv}.
@code{mysql -vvv}.
You can also use scripts in the @code{mysql} command line prompt by
using the @code{source} command:
@example
mysql> source filename
@end example
@node Twin, Apache, Batch mode, Tutorial
@node Twin, Apache, Batch mode, Tutorial
@section Queries from Twin Project
@section Queries from Twin Project
strings/longlong2str-x86.s
View file @
4508fbb5
/*
Copyright
(
C
)
2000
MySQL
AB
&
MySQL
Finland
AB
&
TCX
DataKonsult
AB
#
Copyright
(
C
)
2000
MySQL
AB
#
This
program
is
free
software
; you can redistribute it and/or modify
This
program
is
free
software
; you can redistribute it and/or modify
#
it
under
the
terms
of
the
GNU
General
Public
License
as
published
by
it
under
the
terms
of
the
GNU
General
Public
License
as
published
by
#
the
Free
Software
Foundation
; either version 2 of the License, or
the
Free
Software
Foundation
; either version 2 of the License, or
#
(
at
your
option
)
any
later
version
.
(
at
your
option
)
any
later
version
.
#
#
This
program
is
distributed
in
the
hope
that
it
will
be
useful
,
This
program
is
distributed
in
the
hope
that
it
will
be
useful
,
#
but
WITHOUT
ANY
WARRANTY
; without even the implied warranty of
but
WITHOUT
ANY
WARRANTY
; without even the implied warranty of
#
MERCHANTABILITY
or
FITNESS
FOR
A
PARTICULAR
PURPOSE
.
See
the
MERCHANTABILITY
or
FITNESS
FOR
A
PARTICULAR
PURPOSE
.
See
the
#
GNU
General
Public
License
for
more
details
.
GNU
General
Public
License
for
more
details
.
#
#
You
should
have
received
a
copy
of
the
GNU
General
Public
License
You
should
have
received
a
copy
of
the
GNU
General
Public
License
#
along
with
this
program
; if not, write to the Free Software
along
with
this
program
; if not, write to the Free Software
#
Foundation
,
Inc
.
,
59
Temple
Place
,
Suite
330
,
Boston
,
MA
02111
-
1307
USA
Foundation
,
Inc
.
,
59
Temple
Place
,
Suite
330
,
Boston
,
MA
02111
-
1307
USA
*/
#
Optimized
longlong2str
function
for
Intel
80
x86
(
gcc
/
gas
syntax
)
#
Optimized
longlong2str
function
for
Intel
80
x86
(
gcc
/
gas
syntax
)
#
Some
set
sequences
are
optimized
for
pentuimpro
II
#
Some
set
sequences
are
optimized
for
pentuimpro
II
...
...
strings/strings-x86.s
View file @
4508fbb5
/*
Copyright
(
C
)
2000
MySQL
AB
&
MySQL
Finland
AB
&
TCX
DataKonsult
AB
#
Copyright
(
C
)
2000
MySQL
AB
#
This
program
is
free
software
; you can redistribute it and/or modify
This
program
is
free
software
; you can redistribute it and/or modify
#
it
under
the
terms
of
the
GNU
General
Public
License
as
published
by
it
under
the
terms
of
the
GNU
General
Public
License
as
published
by
#
the
Free
Software
Foundation
; either version 2 of the License, or
the
Free
Software
Foundation
; either version 2 of the License, or
#
(
at
your
option
)
any
later
version
.
(
at
your
option
)
any
later
version
.
#
#
This
program
is
distributed
in
the
hope
that
it
will
be
useful
,
This
program
is
distributed
in
the
hope
that
it
will
be
useful
,
#
but
WITHOUT
ANY
WARRANTY
; without even the implied warranty of
but
WITHOUT
ANY
WARRANTY
; without even the implied warranty of
#
MERCHANTABILITY
or
FITNESS
FOR
A
PARTICULAR
PURPOSE
.
See
the
MERCHANTABILITY
or
FITNESS
FOR
A
PARTICULAR
PURPOSE
.
See
the
#
GNU
General
Public
License
for
more
details
.
GNU
General
Public
License
for
more
details
.
#
#
You
should
have
received
a
copy
of
the
GNU
General
Public
License
You
should
have
received
a
copy
of
the
GNU
General
Public
License
#
along
with
this
program
; if not, write to the Free Software
along
with
this
program
; if not, write to the Free Software
#
Foundation
,
Inc
.
,
59
Temple
Place
,
Suite
330
,
Boston
,
MA
02111
-
1307
USA
Foundation
,
Inc
.
,
59
Temple
Place
,
Suite
330
,
Boston
,
MA
02111
-
1307
USA
*/
#
Optimized
string
functions
Intel
80
x86
(
gcc
/
gas
syntax
)
/*
Optimized
string
functions
Intel
80
x86
(
gcc
/
gas
syntax
)
*/
.
file
"strings.s"
.
file
"strings.s"
.
version
"1.00"
.
version
"1.00"
.
text
.
text
/
*
Move
a
alligned
,
not
overlapped
,
by
(
long
)
divided
memory
area
*/
#
Move
a
alligned
,
not
overlapped
,
by
(
long
)
divided
memory
area
/
*
Args
:
to
,
from
,
length
*/
#
Args
:
to
,
from
,
length
.
globl
bmove_allign
.
globl
bmove_allign
.
type
bmove_allign
,
@
function
.
type
bmove_allign
,
@
function
bmove_allign
:
bmove_allign
:
movl
%
edi
,%
edx
movl
%
edi
,%
edx
movl
%
esi
,%
eax
movl
%
esi
,%
eax
movl
4
(%
esp
),%
edi
/*
to
*/
movl
4
(%
esp
),%
edi
#
to
movl
8
(%
esp
),%
esi
/*
from
*/
movl
8
(%
esp
),%
esi
#
from
movl
12
(%
esp
),%
ecx
/*
length
*/
movl
12
(%
esp
),%
ecx
#
length
addw
$
3
,%
cx
/*
fix
if
not
divisible
with
long
*/
addw
$
3
,%
cx
#
fix
if
not
divisible
with
long
shrw
$
2
,%
cx
shrw
$
2
,%
cx
rep
rep
movsl
movsl
...
@@ -42,198 +41,198 @@ bmove_allign:
...
@@ -42,198 +41,198 @@ bmove_allign:
.
end
:
.
end
:
.
size
bmove_allign
,
.
end
-
bmove_allign
.
size
bmove_allign
,
.
end
-
bmove_allign
/
*
Move
a
string
from
higher
to
lower
*/
#
Move
a
string
from
higher
to
lower
/
*
Arg
from
+
1
,
to
+
1
,
length
*/
#
Arg
from
+
1
,
to
+
1
,
length
.
globl
bmove_upp
.
globl
bmove_upp
.
type
bmove_upp
,
@
function
.
type
bmove_upp
,
@
function
bmove_upp
:
bmove_upp
:
std
/*
Work
downward
*/
std
#
Work
downward
movl
%
edi
,%
edx
movl
%
edi
,%
edx
movl
%
esi
,%
eax
movl
%
esi
,%
eax
movl
4
(%
esp
),%
edi
/*
p1
*/
movl
4
(%
esp
),%
edi
#
p1
movl
8
(%
esp
),%
esi
/*
p2
*/
movl
8
(%
esp
),%
esi
#
p2
movl
12
(%
esp
),%
ecx
/*
length
*/
movl
12
(%
esp
),%
ecx
#
length
decl
%
edi
/*
Don
't move last arg */
decl
%
edi
#
Don
't move last arg
decl
%
esi
decl
%
esi
rep
rep
movsb
/*
One
byte
a
time
because
overlap
*/
movsb
#
One
byte
a
time
because
overlap
cld
/*
C
library
wants
cld
*/
cld
#
C
library
wants
cld
movl
%
eax
,%
esi
movl
%
eax
,%
esi
movl
%
edx
,%
edi
movl
%
edx
,%
edi
ret
ret
.
bmove_upp_end
:
.
bmove_upp_end
:
.
size
bmove_upp
,
.
bmove_upp_end
-
bmove_upp
.
size
bmove_upp
,
.
bmove_upp_end
-
bmove_upp
/
*
Append
fillchars
to
string
*/
#
Append
fillchars
to
string
/
*
Args
:
dest
,
len
,
fill
*/
#
Args
:
dest
,
len
,
fill
.
globl
strappend
.
globl
strappend
.
type
strappend
,
@
function
.
type
strappend
,
@
function
strappend
:
strappend
:
pushl
%
edi
pushl
%
edi
movl
8
(%
esp
),%
edi
/*
Memory
pointer
*/
movl
8
(%
esp
),%
edi
#
Memory
pointer
movl
12
(%
esp
),%
ecx
/*
Length
*/
movl
12
(%
esp
),%
ecx
#
Length
clrl
%
eax
/*
Find
end
of
string
*/
clrl
%
eax
#
Find
end
of
string
repne
repne
scasb
scasb
jnz
sa_99
/*
String
to
long
,
shorten
it
*/
jnz
sa_99
#
String
to
long
,
shorten
it
movzb
16
(%
esp
),%
eax
/*
Fillchar
*/
movzb
16
(%
esp
),%
eax
#
Fillchar
decl
%
edi
/*
Point
at
end
null
*/
decl
%
edi
#
Point
at
end
null
incl
%
ecx
/*
rep
made
one
dec
for
null
-
char
*/
incl
%
ecx
#
rep
made
one
dec
for
null
-
char
movb
%
al
,%
ah
/*
(
2
)
Set
up
a
32
bit
pattern
.
*/
movb
%
al
,%
ah
#
(
2
)
Set
up
a
32
bit
pattern
.
movw
%
ax
,%
dx
/*
(
2
)
*/
movw
%
ax
,%
dx
#
(
2
)
shll
$
16
,%
eax
/*
(
3
)
*/
shll
$
16
,%
eax
#
(
3
)
movw
%
dx
,%
ax
/*
(
2
)
%
eax
has
the
32
bit
pattern
.
*/
movw
%
dx
,%
ax
#
(
2
)
%
eax
has
the
32
bit
pattern
.
movl
%
ecx
,%
edx
/*
(
2
)
Save
the
count
of
bytes
.
*/
movl
%
ecx
,%
edx
#
(
2
)
Save
the
count
of
bytes
.
shrl
$
2
,%
ecx
/*
(
2
)
Number
of
dwords
.
*/
shrl
$
2
,%
ecx
#
(
2
)
Number
of
dwords
.
rep
rep
stosl
/*
(
5
+
5
n
)
*/
stosl
#
(
5
+
5
n
)
movb
$
3
,%
cl
/*
(
2
)
*/
movb
$
3
,%
cl
#
(
2
)
and
%
edx
,%
ecx
/*
(
2
)
Fill
in
the
odd
bytes
*/
and
%
edx
,%
ecx
#
(
2
)
Fill
in
the
odd
bytes
rep
rep
stosb
/*
Move
last
bytes
if
any
*/
stosb
#
Move
last
bytes
if
any
sa_99
:
movb
$
0
,(%
edi
)
/*
End
of
string
*/
sa_99
:
movb
$
0
,(%
edi
)
#
End
of
string
popl
%
edi
popl
%
edi
ret
ret
.
strappend_end
:
.
strappend_end
:
.
size
strappend
,
.
strappend_end
-
strappend
.
size
strappend
,
.
strappend_end
-
strappend
/
*
Find
if
string
contains
any
char
in
another
string
*/
#
Find
if
string
contains
any
char
in
another
string
/
*
Arg
:
str
,
set
*/
#
Arg
:
str
,
set
/
*
Ret
:
Pointer
to
first
found
char
in
str
*/
#
Ret
:
Pointer
to
first
found
char
in
str
.
globl
strcont
.
globl
strcont
.
type
strcont
,
@
function
.
type
strcont
,
@
function
strcont
:
strcont
:
movl
%
edi
,%
edx
movl
%
edi
,%
edx
pushl
%
esi
pushl
%
esi
movl
8
(%
esp
),%
esi
/*
str
*/
movl
8
(%
esp
),%
esi
#
str
movl
12
(%
esp
),%
ecx
/*
set
*/
movl
12
(%
esp
),%
ecx
#
set
clrb
%
ah
/*
For
endtest
*/
clrb
%
ah
#
For
endtest
jmp
sc_60
jmp
sc_60
sc_10
:
scasb
sc_10
:
scasb
jz
sc_fo
/*
Found
char
*/
jz
sc_fo
#
Found
char
sc_20
:
cmp
(%
edi
),%
ah
/*
Test
if
null
*/
sc_20
:
cmp
(%
edi
),%
ah
#
Test
if
null
jnz
sc_10
/*
Not
end
of
set
yet
*/
jnz
sc_10
#
Not
end
of
set
yet
incl
%
esi
/*
Next
char
in
str
*/
incl
%
esi
#
Next
char
in
str
sc_60
:
movl
%
ecx
,%
edi
/*
%
edi
=
Set
*/
sc_60
:
movl
%
ecx
,%
edi
#
%
edi
=
Set
movb
(%
esi
),%
al
/*
Test
if
this
char
exist
*/
movb
(%
esi
),%
al
#
Test
if
this
char
exist
andb
%
al
,%
al
andb
%
al
,%
al
jnz
sc_20
/*
Not
end
of
string
*/
jnz
sc_20
#
Not
end
of
string
clrl
%
esi
/*
Return
Null
*/
clrl
%
esi
#
Return
Null
sc_fo
:
movl
%
esi
,%
eax
/*
Char
found
here
*/
sc_fo
:
movl
%
esi
,%
eax
#
Char
found
here
movl
%
edx
,%
edi
/*
Restore
*/
movl
%
edx
,%
edi
#
Restore
popl
%
esi
popl
%
esi
ret
ret
.
strcont_end
:
.
strcont_end
:
.
size
strcont
,
.
strcont_end
-
strcont
.
size
strcont
,
.
strcont_end
-
strcont
/
*
Find
end
of
string
*/
#
Find
end
of
string
/
*
Arg
:
str
*/
#
Arg
:
str
/
*
ret
:
Pointer
to
end
null
*/
#
ret
:
Pointer
to
end
null
.
globl
strend
.
globl
strend
.
type
strend
,
@
function
.
type
strend
,
@
function
strend
:
strend
:
movl
%
edi
,%
edx
/*
Save
*/
movl
%
edi
,%
edx
#
Save
movl
4
(%
esp
),%
edi
/*
str
*/
movl
4
(%
esp
),%
edi
#
str
clrl
%
eax
/*
Find
end
of
string
*/
clrl
%
eax
#
Find
end
of
string
movl
%
eax
,%
ecx
movl
%
eax
,%
ecx
decl
%
ecx
/*
ECX
=
-
1
*/
decl
%
ecx
#
ECX
=
-
1
repne
repne
scasb
scasb
movl
%
edi
,%
eax
movl
%
edi
,%
eax
decl
%
eax
/*
End
of
string
*/
decl
%
eax
#
End
of
string
movl
%
edx
,%
edi
/*
Restore
*/
movl
%
edx
,%
edi
#
Restore
ret
ret
.
strend_end
:
.
strend_end
:
.
size
strend
,
.
strend_end
-
strend
.
size
strend
,
.
strend_end
-
strend
/
*
Make
a
string
with
len
fill
-
chars
and
endnull
*/
#
Make
a
string
with
len
fill
-
chars
and
endnull
/
*
Args
:
dest
,
len
,
fill
*/
#
Args
:
dest
,
len
,
fill
/
*
Ret
:
dest
+
len
*/
#
Ret
:
dest
+
len
.
globl
strfill
.
globl
strfill
.
type
strfill
,
@
function
.
type
strfill
,
@
function
strfill
:
strfill
:
pushl
%
edi
pushl
%
edi
movl
8
(%
esp
),%
edi
/*
Memory
pointer
*/
movl
8
(%
esp
),%
edi
#
Memory
pointer
movl
12
(%
esp
),%
ecx
/*
Length
*/
movl
12
(%
esp
),%
ecx
#
Length
movzb
16
(%
esp
),%
eax
/*
Fill
*/
movzb
16
(%
esp
),%
eax
#
Fill
movb
%
al
,%
ah
/*
(
2
)
Set
up
a
32
bit
pattern
*/
movb
%
al
,%
ah
#
(
2
)
Set
up
a
32
bit
pattern
movw
%
ax
,%
dx
/*
(
2
)
*/
movw
%
ax
,%
dx
#
(
2
)
shll
$
16
,%
eax
/*
(
3
)
*/
shll
$
16
,%
eax
#
(
3
)
movw
%
dx
,%
ax
/*
(
2
)
%
eax
has
the
32
bit
pattern
.
*/
movw
%
dx
,%
ax
#
(
2
)
%
eax
has
the
32
bit
pattern
.
movl
%
ecx
,%
edx
/*
(
2
)
Save
the
count
of
bytes
.
*/
movl
%
ecx
,%
edx
#
(
2
)
Save
the
count
of
bytes
.
shrl
$
2
,%
ecx
/*
(
2
)
Number
of
dwords
.
*/
shrl
$
2
,%
ecx
#
(
2
)
Number
of
dwords
.
rep
rep
stosl
/*
(
5
+
5
n
)
*/
stosl
#
(
5
+
5
n
)
movb
$
3
,%
cl
/*
(
2
)
*/
movb
$
3
,%
cl
#
(
2
)
and
%
edx
,%
ecx
/*
(
2
)
Fill
in
the
odd
bytes
*/
and
%
edx
,%
ecx
#
(
2
)
Fill
in
the
odd
bytes
rep
rep
stosb
/*
Move
last
bytes
if
any
*/
stosb
#
Move
last
bytes
if
any
movb
%
cl
,(%
edi
)
/*
End
NULL
*/
movb
%
cl
,(%
edi
)
#
End
NULL
movl
%
edi
,%
eax
/*
End
i
%
eax
*/
movl
%
edi
,%
eax
#
End
i
%
eax
popl
%
edi
popl
%
edi
ret
ret
.
strfill_end
:
.
strfill_end
:
.
size
strfill
,
.
strfill_end
-
strfill
.
size
strfill
,
.
strfill_end
-
strfill
/
*
Find
a
char
in
or
end
of
a
string
*/
#
Find
a
char
in
or
end
of
a
string
/
*
Arg
:
str
,
char
*/
#
Arg
:
str
,
char
/
*
Ret
:
pointer
to
found
char
or
NullS
*/
#
Ret
:
pointer
to
found
char
or
NullS
.
globl
strcend
.
globl
strcend
.
type
strcend
,
@
function
.
type
strcend
,
@
function
strcend
:
strcend
:
movl
%
edi
,%
edx
movl
%
edi
,%
edx
movl
4
(%
esp
),%
edi
/*
str
*/
movl
4
(%
esp
),%
edi
#
str
movb
8
(%
esp
),%
ah
/*
search
*/
movb
8
(%
esp
),%
ah
#
search
clrb
%
al
/*
for
scasb
to
find
end
*/
clrb
%
al
#
for
scasb
to
find
end
se_10
:
cmpb
(%
edi
),%
ah
se_10
:
cmpb
(%
edi
),%
ah
jz
se_20
/*
Found
char
*/
jz
se_20
#
Found
char
scasb
scasb
jnz
se_10
/*
Not
end
*/
jnz
se_10
#
Not
end
dec
%
edi
/*
Not
found
,
point
at
end
of
string
*/
dec
%
edi
#
Not
found
,
point
at
end
of
string
se_20
:
movl
%
edi
,%
eax
se_20
:
movl
%
edi
,%
eax
movl
%
edx
,%
edi
/*
Restore
*/
movl
%
edx
,%
edi
#
Restore
ret
ret
.
strcend_end
:
.
strcend_end
:
.
size
strcend
,
.
strcend_end
-
strcend
.
size
strcend
,
.
strcend_end
-
strcend
/
*
Test
if
string
has
a
given
suffix
*/
#
Test
if
string
has
a
given
suffix
.
globl
is_prefix
.
globl
is_prefix
.
type
is_prefix
,
@
function
.
type
is_prefix
,
@
function
is_prefix
:
is_prefix
:
movl
%
edi
,%
edx
/*
Save
%
edi
*/
movl
%
edi
,%
edx
#
Save
%
edi
pushl
%
esi
/*
and
%
esi
*/
pushl
%
esi
#
and
%
esi
movl
12
(%
esp
),%
esi
/*
get
suffix
*/
movl
12
(%
esp
),%
esi
#
get
suffix
movl
8
(%
esp
),%
edi
/*
s1
*/
movl
8
(%
esp
),%
edi
#
s1
movl
$
1
,%
eax
/*
Ok
and
zero
-
test
*/
movl
$
1
,%
eax
#
Ok
and
zero
-
test
ip_10
:
cmpb
(%
esi
),%
ah
ip_10
:
cmpb
(%
esi
),%
ah
jz
suf_ok
/*
End
of
string
/
found
suffix
*/
jz
suf_ok
#
End
of
string
/
found
suffix
cmpsb
/*
Compare
strings
*/
cmpsb
#
Compare
strings
jz
ip_10
/*
Same
,
possible
prefix
*/
jz
ip_10
#
Same
,
possible
prefix
xor
%
eax
,%
eax
/*
Not
suffix
*/
xor
%
eax
,%
eax
#
Not
suffix
suf_ok
:
popl
%
esi
suf_ok
:
popl
%
esi
movl
%
edx
,%
edi
movl
%
edx
,%
edi
ret
ret
.
is_prefix_end
:
.
is_prefix_end
:
.
size
is_prefix
,
.
is_prefix_end
-
is_prefix
.
size
is_prefix
,
.
is_prefix_end
-
is_prefix
/
*
Find
a
substring
in
string
*/
#
Find
a
substring
in
string
/
*
Arg
:
str
,
search
*/
#
Arg
:
str
,
search
.
globl
strstr
.
globl
strstr
.
type
strstr
,
@
function
.
type
strstr
,
@
function
...
@@ -241,31 +240,31 @@ suf_ok: popl %esi
...
@@ -241,31 +240,31 @@ suf_ok: popl %esi
strstr
:
strstr
:
pushl
%
edi
pushl
%
edi
pushl
%
esi
pushl
%
esi
movl
12
(%
esp
),%
esi
/*
str
*/
movl
12
(%
esp
),%
esi
#
str
movl
16
(%
esp
),%
edi
/*
search
*/
movl
16
(%
esp
),%
edi
#
search
movl
%
edi
,%
ecx
movl
%
edi
,%
ecx
incl
%
ecx
/*
%
ecx
=
search
+
1
*/
incl
%
ecx
#
%
ecx
=
search
+
1
movb
(%
edi
),%
ah
/*
%
ah
=
First
char
in
search
*/
movb
(%
edi
),%
ah
#
%
ah
=
First
char
in
search
jmp
sf_10
jmp
sf_10
sf_00
:
movl
%
edx
,%
esi
/*
si
=
Current
str
-
pos
*/
sf_00
:
movl
%
edx
,%
esi
#
si
=
Current
str
-
pos
sf_10
:
movb
(%
esi
),%
al
/*
Test
if
this
char
exist
*/
sf_10
:
movb
(%
esi
),%
al
#
Test
if
this
char
exist
andb
%
al
,%
al
andb
%
al
,%
al
jz
sf_90
/*
End
of
string
,
didn
't find search */
jz
sf_90
#
End
of
string
,
didn
't find search
incl
%
esi
incl
%
esi
cmpb
%
al
,%
ah
cmpb
%
al
,%
ah
jnz
sf_10
/*
Didn
't find first char, continue */
jnz
sf_10
#
Didn
't find first char, continue
movl
%
esi
,%
edx
/*
Save
str
-
pos
in
%
edx
*/
movl
%
esi
,%
edx
#
Save
str
-
pos
in
%
edx
movl
%
ecx
,%
edi
movl
%
ecx
,%
edi
sf_20
:
cmpb
$
0
,(%
edi
)
sf_20
:
cmpb
$
0
,(%
edi
)
jz
sf_fo
/*
Found
substring
*/
jz
sf_fo
#
Found
substring
cmpsb
cmpsb
jz
sf_20
/*
Char
ok
*/
jz
sf_20
#
Char
ok
jmp
sf_00
/*
Next
str
-
pos
*/
jmp
sf_00
#
Next
str
-
pos
sf_90
:
movl
$
1
,%
edx
/*
Return
Null
*/
sf_90
:
movl
$
1
,%
edx
#
Return
Null
sf_fo
:
movl
%
edx
,%
eax
/*
Char
found
here
*/
sf_fo
:
movl
%
edx
,%
eax
#
Char
found
here
decl
%
eax
/*
Pointed
one
after
*/
decl
%
eax
#
Pointed
one
after
popl
%
esi
popl
%
esi
popl
%
edi
popl
%
edi
ret
ret
...
@@ -273,8 +272,8 @@ sf_fo: movl %edx,%eax /* Char found here */
...
@@ -273,8 +272,8 @@ sf_fo: movl %edx,%eax /* Char found here */
.
size
strstr
,
.
strstr_end
-
strstr
.
size
strstr
,
.
strstr_end
-
strstr
/
*
Find
a
substring
in
string
,
return
index
*/
#
Find
a
substring
in
string
,
return
index
/
*
Arg
:
str
,
search
*/
#
Arg
:
str
,
search
.
globl
strinstr
.
globl
strinstr
.
type
strinstr
,
@
function
.
type
strinstr
,
@
function
...
@@ -282,22 +281,22 @@ sf_fo: movl %edx,%eax /* Char found here */
...
@@ -282,22 +281,22 @@ sf_fo: movl %edx,%eax /* Char found here */
strinstr
:
strinstr
:
pushl
%
ebp
pushl
%
ebp
movl
%
esp
,%
ebp
movl
%
esp
,%
ebp
pushl
12
(%
ebp
)
/*
search
*/
pushl
12
(%
ebp
)
#
search
pushl
8
(%
ebp
)
/*
str
*/
pushl
8
(%
ebp
)
#
str
call
strstr
call
strstr
add
$
8
,%
esp
add
$
8
,%
esp
or
%
eax
,%
eax
or
%
eax
,%
eax
jz
si_99
/*
Not
found
,
return
NULL
*/
jz
si_99
#
Not
found
,
return
NULL
sub
8
(%
ebp
),%
eax
/*
Pos
from
start
*/
sub
8
(%
ebp
),%
eax
#
Pos
from
start
inc
%
eax
/*
And
first
pos
=
1
*/
inc
%
eax
#
And
first
pos
=
1
si_99
:
popl
%
ebp
si_99
:
popl
%
ebp
ret
ret
.
strinstr_end
:
.
strinstr_end
:
.
size
strinstr
,
.
strinstr_end
-
strinstr
.
size
strinstr
,
.
strinstr_end
-
strinstr
/
*
Make
a
string
of
len
length
from
another
string
*/
#
Make
a
string
of
len
length
from
another
string
/
*
Arg
:
dst
,
src
,
length
*/
#
Arg
:
dst
,
src
,
length
/
*
ret
:
end
of
dst
*/
#
ret
:
end
of
dst
.
globl
strmake
.
globl
strmake
.
type
strmake
,
@
function
.
type
strmake
,
@
function
...
@@ -305,48 +304,48 @@ si_99: popl %ebp
...
@@ -305,48 +304,48 @@ si_99: popl %ebp
strmake
:
strmake
:
pushl
%
edi
pushl
%
edi
pushl
%
esi
pushl
%
esi
movl
12
(%
esp
),%
edi
/*
dst
*/
movl
12
(%
esp
),%
edi
#
dst
movl
16
(%
esp
),%
esi
/*
src
*/
movl
16
(%
esp
),%
esi
#
src
movl
20
(%
esp
),%
ecx
/*
Length
of
memory
-
area
*/
movl
20
(%
esp
),%
ecx
#
Length
of
memory
-
area
clrb
%
al
/*
For
test
of
end
-
null
*/
clrb
%
al
#
For
test
of
end
-
null
jecxz
sm_90
/*
Nothing
to
move
,
put
zero
at
end
.
*/
jecxz
sm_90
#
Nothing
to
move
,
put
zero
at
end
.
sm_10
:
cmpb
(%
esi
),%
al
/*
Next
char
to
move
*/
sm_10
:
cmpb
(%
esi
),%
al
#
Next
char
to
move
movsb
/*
move
arg
*/
movsb
#
move
arg
jz
sm_99
/*
last
char
,
we
are
ready
*/
jz
sm_99
#
last
char
,
we
are
ready
loop
sm_10
/*
Continue
moving
*/
loop
sm_10
#
Continue
moving
sm_90
:
movb
%
al
,(%
edi
)
/*
Set
end
pos
*/
sm_90
:
movb
%
al
,(%
edi
)
#
Set
end
pos
incl
%
edi
/*
Fix
that
di
points
at
end
null
*/
incl
%
edi
#
Fix
that
di
points
at
end
null
sm_99
:
decl
%
edi
/*
di
points
now
at
end
null
*/
sm_99
:
decl
%
edi
#
di
points
now
at
end
null
movl
%
edi
,%
eax
/*
Ret
value
.
p
$
*/
movl
%
edi
,%
eax
#
Ret
value
.
p
$
popl
%
esi
popl
%
esi
popl
%
edi
popl
%
edi
ret
ret
.
strmake_end
:
.
strmake_end
:
.
size
strmake
,
.
strmake_end
-
strmake
.
size
strmake
,
.
strmake_end
-
strmake
/
*
Move
a
string
with
max
len
chars
*/
#
Move
a
string
with
max
len
chars
/
*
arg
:
dst
,
src
,
len
*/
#
arg
:
dst
,
src
,
len
/
*
ret
:
pos
to
first
null
or
dst
+
len
*/
#
ret
:
pos
to
first
null
or
dst
+
len
.
globl
strnmov
.
globl
strnmov
.
type
strnmov
,
@
function
.
type
strnmov
,
@
function
strnmov
:
strnmov
:
pushl
%
edi
pushl
%
edi
pushl
%
esi
pushl
%
esi
movl
12
(%
esp
),%
edi
/*
dst
*/
movl
12
(%
esp
),%
edi
#
dst
movl
16
(%
esp
),%
esi
/*
src
*/
movl
16
(%
esp
),%
esi
#
src
movl
20
(%
esp
),%
ecx
/*
Length
of
memory
-
area
*/
movl
20
(%
esp
),%
ecx
#
Length
of
memory
-
area
jecxz
snm_99
/*
Nothing
to
do
*/
jecxz
snm_99
#
Nothing
to
do
clrb
%
al
/*
For
test
of
end
-
null
*/
clrb
%
al
#
For
test
of
end
-
null
snm_10
:
cmpb
(%
esi
),%
al
/*
Next
char
to
move
*/
snm_10
:
cmpb
(%
esi
),%
al
#
Next
char
to
move
movsb
/*
move
arg
*/
movsb
#
move
arg
jz
snm_20
/*
last
char
,
fill
with
null
*/
jz
snm_20
#
last
char
,
fill
with
null
loop
snm_10
/*
Continue
moving
*/
loop
snm_10
#
Continue
moving
incl
%
edi
/*
Point
two
after
last
*/
incl
%
edi
#
Point
two
after
last
snm_20
:
decl
%
edi
/*
Point
at
first
null
(
or
last
+
1
)
*/
snm_20
:
decl
%
edi
#
Point
at
first
null
(
or
last
+
1
)
snm_99
:
movl
%
edi
,%
eax
/*
Pointer
at
last
char
*/
snm_99
:
movl
%
edi
,%
eax
#
Pointer
at
last
char
popl
%
esi
popl
%
esi
popl
%
edi
popl
%
edi
ret
ret
...
@@ -357,17 +356,17 @@ snm_99: movl %edi,%eax /* Pointer at last char */
...
@@ -357,17 +356,17 @@ snm_99: movl %edi,%eax /* Pointer at last char */
.
globl
strmov
.
globl
strmov
.
type
strmov
,
@
function
.
type
strmov
,
@
function
strmov
:
strmov
:
movl
%
esi
,%
ecx
/*
Save
old
%
esi
and
%
edi
*/
movl
%
esi
,%
ecx
#
Save
old
%
esi
and
%
edi
movl
%
edi
,%
edx
movl
%
edi
,%
edx
movl
8
(%
esp
),%
esi
/*
get
source
pointer
(
s2
)
*/
movl
8
(%
esp
),%
esi
#
get
source
pointer
(
s2
)
movl
4
(%
esp
),%
edi
/*
%
edi
->
s1
*/
movl
4
(%
esp
),%
edi
#
%
edi
->
s1
smo_10
:
movb
(%
esi
),%
al
smo_10
:
movb
(%
esi
),%
al
movsb
/*
move
arg
*/
movsb
#
move
arg
andb
%
al
,%
al
andb
%
al
,%
al
jnz
smo_10
/*
Not
last
*/
jnz
smo_10
#
Not
last
movl
%
edi
,%
eax
movl
%
edi
,%
eax
dec
%
eax
dec
%
eax
movl
%
ecx
,%
esi
/*
Restore
*/
movl
%
ecx
,%
esi
#
Restore
movl
%
edx
,%
edi
movl
%
edx
,%
edi
ret
ret
.
strmov_end
:
.
strmov_end
:
...
@@ -376,29 +375,29 @@ smo_10: movb (%esi),%al
...
@@ -376,29 +375,29 @@ smo_10: movb (%esi),%al
.
globl
strxmov
.
globl
strxmov
.
type
strxmov
,
@
function
.
type
strxmov
,
@
function
strxmov
:
strxmov
:
movl
%
ebx
,%
edx
/*
Save
%
ebx
,
%
esi
and
%
edi
*/
movl
%
ebx
,%
edx
#
Save
%
ebx
,
%
esi
and
%
edi
mov
%
esi
,%
ecx
mov
%
esi
,%
ecx
push
%
edi
push
%
edi
leal
8
(%
esp
),%
ebx
/*
Get
destination
*/
leal
8
(%
esp
),%
ebx
#
Get
destination
movl
(%
ebx
),%
edi
movl
(%
ebx
),%
edi
xorb
%
al
,%
al
xorb
%
al
,%
al
jmp
next_str
/*
Handle
source
ebx
+
4
*/
jmp
next_str
#
Handle
source
ebx
+
4
start_str
:
start_str
:
movsb
movsb
cmpb
-
1
(%
edi
),%
al
cmpb
-
1
(%
edi
),%
al
jne
start_str
jne
start_str
decl
%
edi
/*
Don
't copy last null */
decl
%
edi
#
Don
't copy last null
next_str
:
next_str
:
addl
$
4
,%
ebx
addl
$
4
,%
ebx
movl
(%
ebx
),%
esi
movl
(%
ebx
),%
esi
orl
%
esi
,%
esi
orl
%
esi
,%
esi
jne
start_str
jne
start_str
movb
%
al
,
0
(%
edi
)
/*
Force
last
to
ASCII
0
*/
movb
%
al
,
0
(%
edi
)
#
Force
last
to
ASCII
0
movl
%
edi
,%
eax
/*
Return
ptr
to
ASCII
0
*/
movl
%
edi
,%
eax
#
Return
ptr
to
ASCII
0
pop
%
edi
/*
Restore
registers
*/
pop
%
edi
#
Restore
registers
movl
%
ecx
,%
esi
movl
%
ecx
,%
esi
movl
%
edx
,%
ebx
movl
%
edx
,%
ebx
ret
ret
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment