Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.71/21: Рейтинг темы: голосов - 21, средняя оценка - 4.71
21 / 9 / 6
Регистрация: 10.11.2017
Сообщений: 148

Команды для работы со строками в ассемблере

20.12.2024, 10:24. Показов 4668. Ответов 46
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Нужно решить данную задачу во встроенном ассемблере C++: Найти слова, оканчивающиеся на заданную с клавиатуры букву, и перевернуть.
Пытаюсь сделать уже вторую неделю, выходит так себе. Прикладываю код, который писал сам.
Писать на С++ можно только считывание с клавиатуры и вывод на экран, как написано в приложенном коде.
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <iostream>
#include <cstring>
using namespace std;
 
int main() {
    char ch;
    char source[30] = "send string stronge";
    char dest[30] = "                 ";
    int len1;
    short cch;
    int i = 0;
    len1 = strlen(source);
    cout << "Enter a character: ";
    cin >> ch;
    cch = int(ch);
 
    _asm {
        lea edi, source; // Загружаем адрес исходной строки в регистр edi
        mov ecx, len1; // Загружаем длину строки в регистр ecx
        mov esi, 0; // Инициализируем индекс для dest
 
    search_loop:
        mov al, byte ptr[cch]; // Загружаем считанный символ в регистр al
        repne scasb; // Ищем символ в строке
        mov ebx, edi; // Сохраняем адрес найденного символа в ebx
        dec ebx; // Переходим к найденному символу
 
        mov al, ' '; // Загружаем пробел в регистр al
        repne scasb; // Ищем пробел в строке
        dec edi; // Переходим к пробелу
 
        mov edx, edi; // Сохраняем адрес пробела в edx
        sub edx, ebx; // Вычисляем длину словаd
        dec edi; // Переходим к последнему символу слова
        mov esi, edi; // Сохраняем адрес последней буквы слова в esi
 
        lea edi, dest; // Загружаем адрес для записи в dest
 
    copy_word:
        mov  al, byte ptr[esi];
        mov[edi], al;
        dec  esi;
        inc  edi;
        dec  cx;
        jne  copy_word;
        jne search_loop;
    }
 
    cout << "source - "; // Выводим исходную строку
    for (i = 0; i < 20; i++)
        cout << source[i]; // Выводим часть исходной строки
    cout << "\n";
 
    cout << "dest - "; // Выводим строку dest
    for (i = 0; i < 20; i++)
        cout << dest[i]; // Выводим часть строки dest
 
    return 0;
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.12.2024, 10:24
Ответы с готовыми решениями:

Заменить в строке каждую точку ‘.’ на многоточие “…” , используя команды работы со строками
Нужно заменить &quot;.&quot; на &quot;...&quot; . Я уже написал код, который заменяет первую точку на многоточие, но мне нужно зациклить так, чтобы все...

Найти невозможные или ошибочные команды на Ассемблере для микроконтроллера Intel 8051
Пожалуйста, срочно нужно Найти невозможные или ошибочные команды на Ассемблере для микроконтроллера Intel 8051 JC 23H AJMP RR IE:...

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

46
 Аватар для CoderHuligan
1743 / 1008 / 257
Регистрация: 30.06.2015
Сообщений: 5,107
Записей в блоге: 56
27.12.2024, 18:57
Лучший ответ Сообщение было отмечено Женя Брянцев как решение

Решение

Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Женя Брянцев Посмотреть сообщение
но результат не выводится...
Теперь выводится)). Можно наверно оптимизировать, но и так сойдет:
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include "stdafx.h"
#include <iostream>
#include <cstring>
using namespace std;
int main(int argc, _TCHAR* argv[]){
    char cy;
    int l, r;
    char source[30] = " sends string stronges";
    cout <<  source << endl;
    cout << "Enter a character: ";
    cin >> cy;
     __asm {
         mov esi, -1;
         xor eax, eax;
OUTWORD:
         inc esi;
         mov al, source[esi];
         cmp eax, 0;
         jz End;
         cmp al, 32;
         jz outword;
         mov l, esi;
INWORD:
         inc esi;
         cmp source[esi], 32;
         jnz L2;
L5:
         dec esi;
         mov r, esi;
         mov edi, l;
         mov al, source[edi];
         mov ebx, r;
         cmp al, source[ebx];
         jnz L3;
         cmp al, cy;
         jnz L3;
L4:
         cmp edi, ebx;
         jge L3;
         mov al, source[edi];
         mov cl, source[ebx];
         mov source[edi], cl;
         mov source[ebx], al;
         inc edi;
         dec ebx;
         jmp L4;
L3:
         jmp OUTWORD;
 
L2:
         cmp source[esi], 0;
         jz L5;
         jmp INWORD;
END:
   
    }
    
    cout <<  source << endl; // Выводим исходную строку
    cin >> cy;
 
    return 0;
}
3
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6130 / 2825 / 1038
Регистрация: 01.06.2021
Сообщений: 10,296
27.12.2024, 23:55
Да ну вас с вашим ассемблером

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <string>
#include <sstream>
#include <algorithm>
 
int main()
{
    std::cout << "Enter a character: ";
    char c; (std::cin >> c).get();
    std::cout << "Enter a sentence: ";
    std::string s; std::getline(std::cin, s); std::stringstream ss(s);
    while (ss >> s)
    {
        if (std::tolower(s.back()) == std::tolower(c))
            std::reverse(s.begin(), s.end());
        std::cout << s << ' ';
    }
}
1
 Аватар для sporta1982
211 / 56 / 7
Регистрация: 05.10.2023
Сообщений: 471
28.12.2024, 03:45
Цитата Сообщение от Royal_X Посмотреть сообщение
добавлю, что не просто есть, а это один из лучших отладчиков среди всех существующих.
не хочу злить богов, но там нет перехода по 8 byte, 4 byte. в x64dbg есть эта функция...

Цитата Сообщение от Royal_X Посмотреть сообщение
Можно по шагам пробежаться не только в режиме кода, но и в режиме дизассемблера
тут так придирались, к моим словам , проблема терминологии. И еще он не может запустить процесс .exe файла, только attach.
только x32dbg и x64dbg. Если говорить о низком уровне просмотре программы, только эти отладчики.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6130 / 2825 / 1038
Регистрация: 01.06.2021
Сообщений: 10,296
28.12.2024, 10:07
sporta1982, отладчик Visual Studio лучший, когда доступен исходный код. Конечно, это не означает, что он прям подойдёт для всех случаев. Например, для отладки ядра, драйверов и пр. есть WinDbg от майкрософт. А вот упомянутый тобой "паук" хорош для реверс инженеринга, поиска уязвимостей и прочих таких штук. Когда инструменты разные, их сравнение становится сомнительным.
0
 Аватар для CoderHuligan
1743 / 1008 / 257
Регистрация: 30.06.2015
Сообщений: 5,107
Записей в блоге: 56
28.12.2024, 10:28
Отладчик в vs очень удобный. Даже в асм вставках показывает содержимое регистров, что очень хорошо.
1
 Аватар для sporta1982
211 / 56 / 7
Регистрация: 05.10.2023
Сообщений: 471
28.12.2024, 10:38
вы на название флагов посмотрите...
0
 Аватар для CoderHuligan
1743 / 1008 / 257
Регистрация: 30.06.2015
Сообщений: 5,107
Записей в блоге: 56
28.12.2024, 11:49
Цитата Сообщение от sporta1982 Посмотреть сообщение
вы на название флагов посмотрите...
OV = 0 UP = 0 EI = 1 PL = 0 ZR = 0 AC = 0 PE = 1 CY = 0
Это вот об этих флагах? Ну, это уже традиция, так обозначать.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.12.2024, 11:49
Помогаю со студенческими работами здесь

Команды в ассемблере
Здравствуйте. Начал изучение ассемблера. Появились некоторые вопросы по описанию команд: №1. xchg ax,di Мнемоника: XCHG ax,r16 КОП:...

Подскажите команды для работы с БД
Добрый день.Подскажите пожалуйста команды для БД.Вернее как производить чтение,запись,редактирование БД.Или дайте ссылку где можно...

Команды для работы с XML
Уважаемые Soft'о'делы! Пожалуйста помогите. Какими командами &quot;вытаскивать&quot; и &quot;втаскивать&quot; данные из/в XML документ(а). В интернете...

AT команды для работы в интернете
Здравствуйте. Подскажите пожалуйста последовательность AT команд для подключения устройства(quectel m80) к интернету(скажем через...

Класс для работы со строками
Всем привет,может кто-то помочь решить? Cоздать класс для работы со строчками. Максимальная длина последовательности – 254. Первый...


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

Или воспользуйтесь поиском по форуму:
47
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru