You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
143 lines
2.3 KiB
143 lines
2.3 KiB
/*
|
|
* Copyright 2002-2019 Intel Corporation.
|
|
*
|
|
* This software is provided to you as Sample Source Code as defined in the accompanying
|
|
* End User License Agreement for the Intel(R) Software Development Products ("Agreement")
|
|
* section 1.L.
|
|
*
|
|
* This software and the related documents are provided as is, with no express or implied
|
|
* warranties, other than those that are expressly stated in the License.
|
|
*/
|
|
|
|
.globl main
|
|
.type main, function
|
|
main:
|
|
push %ecx
|
|
push %esi
|
|
push %edi
|
|
|
|
fnop
|
|
|
|
# copy instring to outstring, counting up
|
|
mov $1, %edx
|
|
cld
|
|
movl $2, %ecx
|
|
mov $instring, %esi
|
|
mov $outstring, %edi
|
|
rep movsb
|
|
|
|
cld
|
|
mov $2, %edx
|
|
movl $2, %ecx
|
|
mov $instring, %esi
|
|
mov $outstring, %edi
|
|
rep movsw
|
|
|
|
cld
|
|
mov $3, %edx
|
|
movl $2, %ecx
|
|
mov $instring, %esi
|
|
mov $outstring, %edi
|
|
rep movsl
|
|
|
|
# copy instring to outstring, counting down
|
|
mov $5, %edx
|
|
std
|
|
movl $2, %ecx
|
|
mov $instring+16-1, %esi
|
|
mov $outstring+16-1, %edi
|
|
rep movsb
|
|
|
|
mov $6, %edx
|
|
std
|
|
movl $2, %ecx
|
|
mov $instring+16-2, %esi
|
|
mov $outstring+16-2, %edi
|
|
rep movsw
|
|
|
|
mov $7, %edx
|
|
std
|
|
movl $2, %ecx
|
|
mov $instring+16-4, %esi
|
|
mov $outstring+16-4, %edi
|
|
rep movsl
|
|
|
|
|
|
# store 'ab' 3 times, moving forward
|
|
mov $9, %edx
|
|
cld
|
|
movl $0x6261, %eax
|
|
movl $3, %ecx
|
|
mov $outstring, %edi
|
|
rep stosw
|
|
|
|
# store 'cd' 3 times, moving backwards
|
|
mov $10, %edx
|
|
std
|
|
movl $0x6463, %eax
|
|
movl $3, %ecx
|
|
mov $outstring + 16 - 2, %edi
|
|
rep stosw
|
|
|
|
# load 2 times, moving backwards
|
|
mov $11, %edx
|
|
std
|
|
movl $2, %ecx
|
|
mov $instring + 16 - 4, %esi
|
|
rep lodsl
|
|
|
|
# Find 'ab' in instring
|
|
mov $12, %edx
|
|
cld
|
|
movl $0x6261, %eax
|
|
movl $16, %ecx
|
|
mov $instring, %edi
|
|
repne scasw
|
|
|
|
# Find first bytes not '01' in instring
|
|
mov $13, %edx
|
|
cld
|
|
movl $0x3130, %eax
|
|
movl $16, %ecx
|
|
mov $instring, %edi
|
|
repe scasw
|
|
|
|
# Find first mismatch in instring1 and instring2
|
|
mov $14, %edx
|
|
cld
|
|
movl $16, %ecx
|
|
mov $instring, %esi
|
|
mov $instring2, %edi
|
|
repe cmpsb
|
|
|
|
# Find first match in instring1 and instring2
|
|
mov $15, %edx
|
|
cld
|
|
movl $16, %ecx
|
|
mov $instring, %esi
|
|
mov $instring2, %edi
|
|
repne cmpsb
|
|
|
|
# A test with a zero count
|
|
mov $16, %edx
|
|
cld
|
|
movl $0, %ecx
|
|
mov $instring, %esi
|
|
mov $instring2, %edi
|
|
repne cmpsb
|
|
|
|
mov $0, %eax
|
|
|
|
pop %edi
|
|
pop %esi
|
|
pop %ecx
|
|
ret
|
|
|
|
.data
|
|
instring:
|
|
.ascii "0123456789abcdef"
|
|
instring2:
|
|
.ascii "0123456x89abcdef"
|
|
outstring:
|
|
.ascii "0123456789abcdef"
|