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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
axicose
0 / 0 / 0
Регистрация: 04.12.2013
Сообщений: 25
#1

Копирование и добавление строк на С++ через процедуру ассемблера - C++

11.05.2014, 04:20. Просмотров 326. Ответов 7
Метки нет (Все метки)

здравствуйте! я рылся много в инете, но не нашел именно функций копирования и добавления строк через процедуру ассемблера на С++
DOS, не могу понять как переделать под плюсы, чтобы работало
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.05.2014, 04:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Копирование и добавление строк на С++ через процедуру ассемблера (C++):

Используя функцию копирования строк, организуйте конкатенацію и копирование строк в четвертый массив, содержащий полные имена - C++
Пожалуйста с этим заданием. Написать программу, которая описывает четыре массива. Три первых массива должны содержать имена, фамилии и...

Добавление неодинаковых строк в массив строк - C++
Здравствуйте! Возникла такая проблема, не могу понять как реализовать добавление в массив строк нодинаковых значений. Вот моя проба, знаю,...

Копирование строк - C++
Нужно сравнить две строки не учитывая пробелы. Ошибка где-то в копировании a1 в с1 #define _CRT_SECURE_NO_WARNINGS #include...

Копирование строк - C++
Всем доброго времени суток. У меня такой вопрос как можно копировать строка в строку не с заменой, а с добавлением в строку. например...

копирование строк - C++
Скопировать из файла F1 в файл F2 все строки, кроме той строки, в которой больше всего гласных букв. Ну или просто скопировать строку...

Копирование строк - C++
Добрый вечер. Столкнулся с Проблемой: надо скопировать содержимое "buff" в "hashes.pointname" . Попробовал strcpy - компилируется без...

7
newbie666
Заблокирован
11.05.2014, 05:24 #2
Цитата Сообщение от axicose Посмотреть сообщение
процедуру ассемблера на С++
DOS
причём туту DOS? :rofl:
Assembler является специфической штукой под конкретный процессор... Под x86/ x64 популярен макро ассемблер - он же MASM. По поводу копирования, ну ты определись с длинной строки и с её форматом.... Потом хреначь указатель нового динамический созданного 4-х байтового массива в EAX, потом оттуда MOV куда угодно.... Не ну на самом деле, что может быть не понятно.... Конкретный вопрос озвучь
0
Archi0
28 / 14 / 4
Регистрация: 18.07.2013
Сообщений: 169
11.05.2014, 06:38 #3
У меня есть вопрос, а что это как-то ускоряет копирование строки? подобные функции по моему итак написаны с учетом, что в регистр можно положить не один чар.
0
newbie666
Заблокирован
11.05.2014, 09:04 #4
давай сначала определимся, ты под x86 код лепишь?
0
Archi0
28 / 14 / 4
Регистрация: 18.07.2013
Сообщений: 169
11.05.2014, 10:07 #5
x86 обычно. Если в 64 bit по другому расскажи. По моему предположению при копировании строки алгоритм как в memcpy, который опять по моему предположению идет копирование кусками размером в системный платформа зависимый int. Ну потом отдельно не кратный размеру int хвост байт копируется.
0
axicose
0 / 0 / 0
Регистрация: 04.12.2013
Сообщений: 25
11.05.2014, 14:06  [ТС] #6
задание в лабе такое.. -_-
сделать подобие функций strlen, strcpy, strcmp и strcat только на ассемблере

ну вот strlen и strcpy я уже сделал

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

Добавлено через 27 минут
вот пример сравнения строк, не могу понять, почему она не работает..
вернее работает, но не так, как хотелось бы. по идее если строки равны, то вернется 1, если нет, то 0
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
33
34
35
36
37
38
39
int  strcmp_(const char*  str1, const char* str2)
{
    int  res = 1;
    __asm
    {
        push ebx
        push ecx
        push edx
        mov eax, 1
        mov ebx, str1
        mov ecx, str2 
        again:
            mov dh, [ebx]
            mov dl, [ecx]
            cmp dh, 0
            je next
            cmp dl, 0
            je next
            inc ebx
            inc ecx
            cmp dh, dl
        je again
        fl:
        mov eax, 0
        jmp last
        next:
        cmp dh, 0
        jne fl
        cmp dl, 0
        jne fl
        last:
        pop edx
        pop ecx
        pop ebx
 
        mov res, eax
    }
       return  res;
}
0
nmcf
5324 / 4644 / 1553
Регистрация: 14.04.2014
Сообщений: 18,479
11.05.2014, 15:09 #7
21 строка должна быть до инкрементов.
0
axicose
0 / 0 / 0
Регистрация: 04.12.2013
Сообщений: 25
11.05.2014, 19:41  [ТС] #8
спасибо, но на результат это особо не повлияло..
оно просто выводит мне результат в строке 24, то бишь если я там в eax помещу 1 то и выведется 1 даже если строки не равны между собой..
а что там не так, не могу понять

Добавлено через 4 часа 26 минут
как сделать функцию strcat, я не могу понять.. там внутри используется функция strcpy
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.05.2014, 19:41
Привет! Вот еще темы с ответами:

копирование строк - C++
ребят, не подкажете как скопировать строку из искомой, начиная с символа а и заканчивая символом б? #include "stdafx.h" #include...

Копирование Строк - C++
В общем, я продолжаю разборки с С(++) и у меня снова вопрос, ответ на который ув. тов. Google не дал. Гад! Задача: даны три строки,...

Копирование строк - C++
И опять столкнулся с проблемой. Описываю функцию, которая копирует k символов из строки str в строку s. Вот мой код: void...

копирование строк - C++
Как на языке Си скопировать из строки s1 в строку s2 n символов с k-ой позиции?


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

Или воспользуйтесь поиском по форуму:
8
Yandex
Объявления
11.05.2014, 19:41
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru