Форум программистов, компьютерный форум CyberForum.ru

Напишите свои аналоги функций strlen(), strcpy(), strcmp() и сравните с библиотечными. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Есть ли C++ нативный способ быстро обнулить массив (аналог bzero)? + ещё 2 вопроса http://www.cyberforum.ru/cpp-beginners/thread38637.html
Второй вопрос - если конструктор обнаружил условия, препятствующие созданию объекта, есть ли способ "не создавать" объект и не использовать потом дестуктор? Третий - стоит ли использовать динамические переменны внутри локальной области видимости(создать и удалить перед выходом из этой области) Спасибо
C++ функция разбивает файл на биты.... Написать функцию,разбивающую файл на биты и записывающую последовательно эти биты с интервалом в 24 байт в другой файл. В случае нехватки длины 2-го файла вывести предупреждение сообщение и прекратить работу. http://www.cyberforum.ru/cpp-beginners/thread38636.html
C++ Сохранение изображения
Моя программа похожа на PAINT только под DOS в Borland C 3.1. Как мне сохранять рисунки которые я рисую?
Изобразить движение по спирали C++
Помогите зделать движение по спирали(на рисунку). Я так понимаю надо двигатса по елипсу и смещать центр, но не знаю как это зделать.
C++ Двумерные массивы (+символьные) http://www.cyberforum.ru/cpp-beginners/thread38625.html
Вот 5 задач... необходимо помочь братишке... сам я в С++ не особо силен... Сильно прошу вас помочь мне... За оказанную услугу готов оказать услугу написания сайта) очень жду помощи... 1) Дан двумерный массив целых чисел. а) Сформировать одномерный массив, каждый элемент которого ра- вен наибольшему по модулю элементу соответствующего столбца двумерного массива. б) Сформировать...
C++ Минимизация функции методом наименьших квадратов У кого есть исходники реализации метода наименьших квадратов на С++, если есть применение её для оценки какой нибудь функции. подробнее

Показать сообщение отдельно
Somebody
2775 / 1589 / 142
Регистрация: 03.12.2007
Сообщений: 4,162
Завершенные тесты: 1
14.04.2011, 16:50     Напишите свои аналоги функций strlen(), strcpy(), strcmp() и сравните с библиотечными.
Assembler
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
;**************************  strlen32.asm  **********************************
; Author:           Agner Fog
; Date created:     2008-07-06
; Last modified:    2008-07-06
; Syntax:           MASM/ML 6.x, 32 bit
; Operating system: Windows, Linux, BSD or Mac, 32-bit x86
; Instruction set:  80386
; Description:
; Standard strlen function:
; size_t strlen(const char *str);
; Finds the length of a zero-terminated string of bytes, optimized for speed.
; Uses 32-bit registers to check four bytes at a time, all memory reads aligned.
;
; Alternatives:
; In 64-bit systems or when SSE2 is available, use strlenSSE2.asm
; More versions are available in www.agner.org/optimize/asmlib.zip
;
; The latest version of this file is available at:
; www.agner.org/optimize/asmexamples.zip
; Copyright (c) 2008 GNU General Public License www.gnu.org/copyleft/gpl.html
;******************************************************************************
.386
.model flat
 
.code
 
_strlen PROC    NEAR
; extern "C" int strlen (const char * s);
; Works in all 32-bit systems 
; In Linux, remove the underscore from the function name.
 
        push    ebx
        mov     ecx, [esp+8]           ; get pointer to string
        mov     eax, ecx               ; copy pointer
        and     ecx, 3                 ; lower 2 bits of address, check alignment
        jz      L2                     ; string is aligned by 4. Go to loop
        and     eax, -4                ; align pointer by 4
        mov     ebx, [eax]             ; read from nearest preceding boundary
        shl     ecx, 3                 ; mul by 8 = displacement in bits
        mov     edx, -1
        shl     edx, cl                ; make byte mask
        not     edx                    ; mask = 0FFH for false bytes
        or      ebx, edx               ; mask out false bytes
 
        ; check first four bytes for zero
        lea     ecx, [ebx-01010101H]   ; subtract 1 from each byte
        not     ebx                    ; invert all bytes
        and     ecx, ebx               ; and these two
        and     ecx, 80808080H         ; test all sign bits
        jnz     L3                     ; zero-byte found
        
        ; Main loop, read 4 bytes aligned
L1:     add     eax, 4                 ; increment pointer by 4
L2:     mov     ebx, [eax]             ; read 4 bytes of string
        lea     ecx, [ebx-01010101H]   ; subtract 1 from each byte
        not     ebx                    ; invert all bytes
        and     ecx, ebx               ; and these two
        and     ecx, 80808080H         ; test all sign bits
        jz      L1                     ; no zero bytes, continue loop
        
L3:     bsf     ecx, ecx               ; find right-most 1-bit
        shr     ecx, 3                 ; divide by 8 = byte index
        sub     eax, [esp+8]           ; subtract start address
        add     eax, ecx               ; add index to byte
        pop     ebx
        ret
_strlen ENDP
 
END
 
Текущее время: 07:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru