Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
0 / 0 / 0
Регистрация: 25.11.2013
Сообщений: 8
1

Реализовать функцию strstr на ассемблере, и подключить эту функцию в проект MVS2008

17.01.2014, 20:56. Показов 2811. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нужно реализовать функцию strstr на ассемблере, и подключить эту функцию в проет MVS2008.

Код функции:
Кликните здесь для просмотра всего текста
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
.386
extern _strstr:near
.model flat
.code
 
;strstr
_my_strstr@8 proc near
 
    push ebp            ;Пролог
    mov ebp,esp
    
    TEXT1 equ [ebp+8]
    TEXT2 equ [ebp+12]
    
        XOR CH, CH      ;Обнуление старшего байта счетчика
 
        PUSH 0
        
        PUSH TEXT1
        CALL _strstr
        MOV ECX, EAX
        POP EAX
 
        ;MOV EAX, 0
 
        JCXZ    FOUND       ;Пустая строка является частью любых строк
        CLD         ;Установка флага направления по возрастанию
 
        MOV EDI, TEXT1  ;Адрес основной строки в источник
 
        NEXT:   MOV ESI, TEXT2  ;Адрес подстроки в приемник
        LODSB                   ;Загрузка первого байта в AL из приемника DS:[SI]
        REPNE   SCASB           ;Сравнение символов в AL и источнике ES:[DI]
        JNE FOUND               ;Если первого символа из TEXT2 нет в строке
        MOV EBX, ECX                ;Сохраняем состояние счетчика не просмотренных байтов
        
        DEC ECX                 ;Количество не просмотренных байтов на 1 меньше
        JCXZ    FOUND           ;Если байтов больше нет, то мы нашли подстроку из 1 байта
        MOV EDX, EDI                ;Сохраняем состояния указателя
        REPE    CMPSB           ;Сравниваем строки далее по длине подстроки QNT2-1
        MOV ECX, EBX                ;Восстанавливаем значение счетчика непросмотренных байтов
        MOV EDI, EDX                ;Восстанавливаем значение указателя
        LOOPNE  NEXT            ;Цикл продолжаем если имеются еще не просмотренные байты
 
 
                    
 
 
FOUND:  POP EAX
 
    
 
    mov esp,ebp         ;Эпилог
    pop ebp
    ret 8
    
    
_my_strstr@8 endp
 
public _my_strstr@8
end


Код основной программы:
Кликните здесь для просмотра всего текста
C++
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
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <conio.h>
#include <string.h>
 
//Описание внешних функций
extern "C"
{
    int __stdcall my_strstr(char* str1, char* str2);
}
 
using namespace std;
 
void main(void)
{
    int len;
    char TEXT1[30]="";  
    char TEXT2[30]="";
 
    cout<<"Vvedite stroky1: ";
    cin>>TEXT1;
 
    cout<<"Vvedite stroky2: ";
    cin>>TEXT2;
 
    len=my_strstr(TEXT1, TEXT2);
 
    cout<<"----------------------------------\n";
    cout<<len;
 
    _getch();
}


Проект компилируется, ввожу данные и происходит ошибка:

Реализовать функцию strstr на ассемблере, и подключить эту функцию в проект MVS2008


В чем ошибки и как исправить?

 Комментарий администратора 
Загружайте изображения и файлы на форум и прикрепляйте к сообщению.
https://www.cyberforum.ru/abou... post594251
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.01.2014, 20:56
Ответы с готовыми решениями:

Реализовать функцию на ассемблере, которая проверяет кластер с заданным номером
Если точнее Реализовать функцию, которая проверяет, находится ли кластер с заданным номером в...

Реализовать на ассемблере функцию для работы с числами половинной точности
Реализовать на ассемблере функцию для работы с так называемыми числами половинной точности (формат...

Написать функцию Факториал и программу, которая будет использовать эту функцию
Суть программы: Нужно написать функцию Факториал и программу.ю которая будет использовать эту...

Как правильно передать вектор в функцию и вызвать эту функцию?
Здравствуйте, объясните как исправить ошибку. Возникает после for(), выдается, что размер polygon =...

1
Клюг
7674 / 3189 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
17.01.2014, 21:45 2
Цитата Сообщение от andrei3shin Посмотреть сообщение
PUSH 0
PUSH TEXT1
CALL _strstr
MOV ECX, EAX
POP EAX
Если это вычисление длины строки, то проще будет invoke crt_strlen, TEXT .
И да, в начало АСМ-файла вставьте:
Assembler
1
2
3
4
5
6
7
8
    .model flat, stdcall    
    option casemap :none
    include \masm32\include\windows.inc
    include \masm32\include\masm32.inc
    include \masm32\include\msvcrt.inc
    include \masm32\macros\macros.asm
    includelib \masm32\lib\masm32.lib
    includelib \masm32\lib\msvcrt.lib
0
17.01.2014, 21:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.01.2014, 21:45
Помогаю со студенческими работами здесь

Написать функцию Faktorial и программу, использующую эту функцию для вывода таблицы факториалов
Написать функцию Faktorial и программу, использующую эту функцию для вывода таблицы факториалов. ...

Составить функцию Faktorial и программу, использующую эту функцию для вывода таблицы факториалов
17. Составить функцию Faktorial и программу, использующую эту функцию для вывода таблицы...

Написать функцию “Фибоначчи” и программу, использующую эту функцию
10. Написать функцию “Фибоначчи” и программу, использующую эту функцию(Числа Фибоначчи – это...

Составить функцию, определяющую, является ли ее целый аргумент простым числом. Использовать эту функцию для п
Составить функцию, определяющую, является ли ее целый аргумент простым числом. Использовать эту...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru