Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
3 / 3 / 1
Регистрация: 13.12.2018
Сообщений: 214

С++ и Ассемблер: можно ли в ассемблерной вставке открывать и редактировать файл?

24.12.2020, 20:33. Показов 1022. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Интересует такой вопрос: можно ли в ассемблерной вставке открывать и редактировать файл? Т.е. чисто средствами ассемблера.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.12.2020, 20:33
Ответы с готовыми решениями:

Транспонирование матрицы в ассемблерной вставке и запись в файл
Помогите разобраться с файлами На Си создать с помощью датчика случайных чисел(random) файл F1 с целочисленными матрицами 2х3. Из...

TreeView. Открывать текстовый файл внутри приложения с возможностью редактировать и сохранять
Здравствуйте , помогите пожалуйста с данным заданием: Открывать текстовый файл(txt,rtf) внутри приложения с возможностью редактировать и...

Непонятки в ассемблерной вставке
В общем, все работает, только х2 не принимает значения с минусом, просто игнорирует минус + не работает команда перехода jg, работает...

3
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
26.12.2020, 08:27
Не вижу причин, почему бы это было невозможно. Хотя на практике не проверял.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
26.12.2020, 15:40
А смысл? Всё равно придётся дёргать API операционной системы для работы с файлами.
0
3 / 3 / 1
Регистрация: 13.12.2018
Сообщений: 214
26.12.2020, 15:44  [ТС]
Это курсовой проект. Помогаю его сделать человеку на курс младше меня. По ассемблеру я слабоват, поэтому написал такой код:

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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#define _CRT_SECURE_NO_WARNINGS
 
#include <iostream>
#include <string>
#include <fstream>
#include <chrono>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "ru");
 
    char InputText[5000]; 
    char NewText[5000];
    
    string path = ""; // Переменная пути к файлу
    cout << "Введите путь к файлу: ";
    cin >> path; // Ввод пути к файлу .txt
    cout << endl;
 
    ifstream file(path); // Открываем файл для чтения
    if (!file) { // Проверка: открылся ли файл?
        cout << "Файл не открылся!" << endl;
        return -1;
    }
    
 
    string text((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>()); // Чтение всего файла .txt и сохранение в переменную text
    string addText = "";
    cout << endl << "Введите текст, который будет добавлен в файл: "; 
    cin.clear();
    cin.ignore(32767, '\n');
    getline(cin, addText); // Читаем строчку
    addText = " " + addText;
    file.close(); // Закрываем файл
 
    int strLength1 = text.length(); // Переменная длины исходного текста в файле
    int strLength2 = addText.length();  // Переменная длины нового текста.
    strcpy(InputText, text.c_str());    // Копируем text в char'ый массив InputText
    strcpy(NewText, addText.c_str()); // Копируем addText в char'ый массив NewText
 
    auto begin = chrono::steady_clock::now();
    __asm {
 
        mov ebx, 0                      // Очищаем ebx. Этот регистр отвечает за сдвиг для NewText
        mov ecx, strLength2             // В есх кладём длину новой строки
        cmp ecx, 0                      // Проверяем, пустая ли строчка с новым текстом
        je emptyStr                     // Если да - то переходим к метке emptyStr
 
        loop1:                          // Иначе - попадаем в цикл
 
            mov edx, strLength1         // В еdx кладём размер строки исходного текста (text)
            add edx,ebx                 // Добавляем к edx значение ebx, тем самым получим указатель на индекс конца строчки text + 1
            mov al, [NewText + ebx]     // Получаем по сдвигу ebx символ из NewText
            mov [InputText + edx], al   // Запоминаем этот символ в InputText по сдвигу edx
            inc ebx                     // Увеличиваем значение ebx на 1
            
        loop loop1                      // Если ecx = 0, то выходим из цикла, иначе переходим к метке loop1
 
        emptyStr:
    }
    auto end = chrono::steady_clock::now();
    auto elapsed_ns = chrono::duration_cast<chrono::nanoseconds>(end - begin);
    cout << "На обработку текста ушло времени(ns): " << to_string(elapsed_ns.count()) << endl;
    cout << "Памяти использованно: " << sizeof(text) + sizeof(addText) + sizeof(strLength1) + sizeof(strLength2) + sizeof(path) << " байт" << endl;
 
    ofstream fout;
    fout.open(path); // Открываем файл для записи
 
    cout << "\nВывод \n";
    for (size_t i = 0; i < strLength1 + strLength2; i++) {
        cout << InputText[i];
        fout << InputText[i];
    }
    fout.close(); // Закрываем файл
    return 0;
}
Сразу извиняюсь за подобные "некрасивые" комментарии к коду.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.12.2020, 15:44
Помогаю со студенческими работами здесь

Jump в ассемблерной вставке
Использую хак во внешнее приложение. static const DWORD func_hack_Ret = 0x45C5D9; // адрес возврата в исходное приложение static...

Ошибки в ассемблерной вставке
в 24 и 25 строке ругается, что недопустимое число операторов #include &quot;iostream&quot; #include &quot;windows.h&quot; #include...

Прерывания в ассемблерной вставке
Здравствуйте. В программу, написанную на С++, нужно добавить ассемблерную вставку, поддерживающую прерывания (int 21h например). Каким...

Очищение памяти в ассемблерной вставке
/* Выделить из строки подстроку указанной длины, начиная с заданной позиции. */ #include &lt;stdio.h&gt; #include...

Вывод массива в ассемблерной вставке
Добрый вечер. Каким образом можно массив из 10 чисел с которыми я поработал в ассемблере передать обратно в С++. Как передать одну...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru