Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.52/21: Рейтинг темы: голосов - 21, средняя оценка - 4.52
1 / 1 / 0
Регистрация: 18.08.2014
Сообщений: 54

Как увидеть часть своего С++ кода на ассемблере?

10.10.2016, 12:14. Показов 5059. Ответов 39
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть код на С++, но...
Но программа "огромна" и работает "медленно".

Хочется улучшить... Например,
1. вместо байтов использовать полубайты избегая операций разделения/сборки
2. вместо некоторых "целых" использовать биты
3. ...
Но как увидеть "интересные" куски своего же С++ код на asm, чтобы понять как минимум:
- 1. как там называются мои переменные и адреса их хранения (для последующих их обработок группами, вместо кучи индивидуальных)
- 2. чем различаются некоторые мои подпрограммы. Стоит ли их сливать/разделять
- 3. ...
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.10.2016, 12:14
Ответы с готовыми решениями:

Как можно увидеть написанный код VS в виде кода ассемблера?
Добрый день! Как можно увидеть написанный код VS в виде ассемблера?

Как вытащить часть кода из кода страницы?
Знаю, что можно через json как-то. Вот например есть код страницы, на нем есть несколько одинаковых блоков. Нужно вытащить определенный...

Как узнать имя компьютера (своего, чужого) из кода на VB?
Как узнать имя компьтера(своего,чужого) из кода на VB ??? Спасиба

39
1 / 1 / 0
Регистрация: 18.08.2014
Сообщений: 54
10.10.2016, 15:30  [ТС]
Студворк — интернет-сервис помощи студентам
Печально...
А (битовые массивы) в ассемблере? (Но конечно, чтобы компилятор не загнулся от них)?

И всётаки главный вопрос: могу ли я в своём старинном С++ Builder 6:
- увидеть ассемблерный эквивалент "интересного" для меня участка кода?
- при случае, исправить его
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
10.10.2016, 15:32
Цитата Сообщение от ZaRus1 Посмотреть сообщение
увидеть ассемблерный эквивалент "интересного" для меня участка кода?
сказал же уже
Цитата Сообщение от ValeryS Посмотреть сообщение
ставим точку останова
запускаем в режиме отладки
когда программа остановится в отладчике на нужной строчке, открываем окно дизасемблерного листинга и смотрим
по мне, так это самый простейший путь
0
 Аватар для ture
553 / 361 / 206
Регистрация: 27.11.2014
Сообщений: 1,049
10.10.2016, 15:33
ZaRus1, бери vs community, если на виндах. Кидай свой код сюда, и если больно много то услышишь рекомендации о том, как не надо делать. С битами бестолку возиться, если у тебя не упакованные данные. Минимальная адресация к байту (значит переход к битам просто добавит возни с масками, если не подвернется красивая идея). Компилятор оптимизирован на int, так что все летит в регистры e[abcd]x. Если много структур/классов, то вспомни о выравнивание (чтоб дыр не было. так типо меньше напряга с памятью). Но скорее всего стрыктуры и классы передаются по значению, а не по ссылке. Если фортран, то наверно с алгоритмами проблем нет, ну разве что есть "волшебные ускорители", которые прям до ассемблера оптимизированы в с++. Скоко говоришь тебе лет?!
0
 Аватар для BOGG ART
592 / 459 / 147
Регистрация: 09.12.2013
Сообщений: 2,385
Записей в блоге: 2
10.10.2016, 15:36
Не нужно исправлять компилятор, он делает так как лучше, согласно настройкам, по умолчанию вроде оптимизация на скорость.

Может не заметил, но вы вроде так и не ответили на это:
Цитата Сообщение от GbaLog- Посмотреть сообщение
Так Вы говорите об оптимизации скорости выполнения программы, или всё-таки об оптимизации по памяти?
Добавлено через 1 минуту
Иногда из-за маленького фрагмента/функции кажется что всё слишком долго, но не нужно лезть в ассемблер и что-то править ему - надо в коде C++ найти что именно "тормозит".
Можно добавить измрение скорость выполнения отдельных фрагментов, выводить в лог сколько что делалось. Или натравить на проект профайлер.
0
1 / 1 / 0
Регистрация: 18.08.2014
Сообщений: 54
10.10.2016, 16:05  [ТС]
ValeryS
ставим точку останова
запускаем в режиме отладки
когда программа остановится в отладчике на нужной строчке, открываем окно дизасемблерного листинга и смотрим
по мне, так это самый простейший путь
Согласен, но как это сделать?
Как открыть окно дизасемблерного листинга? (Извините за мою безграмотность.)
Думаю, что после этого многие мои вопросы "умрут" сами собой.

BOGG ART
Может не заметил, но вы вроде так и не ответили на это:
Так Вы говорите об оптимизации скорости выполнения программы, или всё-таки об оптимизации по памяти?
Иногда из-за маленького фрагмента/функции кажется что всё слишком долго, но не нужно лезть в ассемблер и что-то править ему - надо в коде C++ найти что именно "тормозит".
Можно добавить измрение скорость выполнения отдельных фрагментов, выводить в лог сколько что делалось. Или натравить на проект профайлер.
Отвечаю. Я пока не знаю, что для меня важнее. Я пока знаю, что мне "не нравится" и подозреваю почему. Программа, которую я делаю, работает пока с небольшими объёмами данных и в режиме интерпретатора, а не компилятора.

Извините, что такое:
- лог (хотя и без него я вижу, что долго, а что быстро)
- профайлер (хотя думаю, что он мне пока не нужен)?

К сожалению, я хоть и далеко не начинающий, но ... отстало-вымирающий (ещё раз... Я - пенсионер, что вероятно хуже = бесперспективнее...)
0
 Аватар для BOGG ART
592 / 459 / 147
Регистрация: 09.12.2013
Сообщений: 2,385
Записей в блоге: 2
10.10.2016, 16:19
Лог - в большинстве случаев окошко с текстом или текстовый файл, содержащий список сообщений/событий. Позволяет не гадать/подозревать, а точно знать что когда как сколько кто куда ...

Профайлер - инструмент для поиска какой участок кода тормозит весь процесс: Википедия.

Если памяти хватает с запасом - то не надо принудительно уменьшать int до байта, ничего не даст. А что вы хоть делаете-то?
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
10.10.2016, 16:46
Цитата Сообщение от ZaRus1 Посмотреть сообщение
Builder 6
Цитата Сообщение от ZaRus1 Посмотреть сообщение
Согласен, но как это сделать?
тут, уж извини, я не помощник
Вот был бы VS я бы подсказал а с булдером никогда не работал
попробуй поспрошать в соответствующей ветке https://www.cyberforum.ru/cpp-builder/
типа "отладчик в Builder 6"
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
10.10.2016, 16:49
Я привел выше скрин для С++Builder XE3
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
10.10.2016, 16:54
Avazart, так твой пример генерит листинг всего файла. Я правильно понял?
а ТСу достаточно одного маленького участка
засим вопрос, можно ли включить в отладчике дизасемблер?
типа такого одно окно код Си второе дизасемблируемый листинг
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
10.10.2016, 16:58
Цитата Сообщение от ValeryS Посмотреть сообщение
Avazart, так твой пример генерит листинг всего файла. Я правильно понял?
а ТСу достаточно одного маленького участка
засим вопрос, можно ли включить в отладчике дизасемблер?
типа такого одно окно код Си второе дизасемблируемый листинг
Ну да всего файла, а в чем проблема найти интересующий кусок кода в этом листинге? Там же комментарии среда оставляет.

Цитата Сообщение от ValeryS Посмотреть сообщение
можно ли включить в отладчике дизасемблер?
типа такого одно окно код Си второе дизасемблируемый листинг
Можно включить, но я этим не пользуюсь... все же это для отладки.
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
10.10.2016, 17:02
Цитата Сообщение от Avazart Посмотреть сообщение
все же это для отладки.
а я пользуюсь
статические листинги нафиг не кому не нужны,нужно узреть процесс в динамике, а это и есть отладка
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
10.10.2016, 17:04
Ну мне не нужен асм код.
Если отлаживаю то мне достаточно посмотреть только на вызовы ф-ций.

С++ Код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
#include "Experimental/Format.h"
 
int main()
{
  using namespace std;
  using namespace Bicycle;
 
    string s1= format("%0, %1, %2, %0")% "s" % 15 % 20.667;
    string s2=
            format("%0, %1, %2, %0").arg("s")
                              .arg(15,0,16) // hex
                              .arg(20.667,10,'s',2,'0'); //scientific
 
 
 
  cout<<s1<<endl<<s2<<endl;
 
  getchar();
  return 0;
}
Миниатюры
Как увидеть часть своего С++ кода на ассемблере?  
1
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
10.10.2016, 17:11
Лучший ответ Сообщение было отмечено ZaRus1 как решение

Решение

Цитата Сообщение от ZaRus1 Посмотреть сообщение
Как открыть окно дизасемблерного листинга?
Ctrl-Alt-C в режиме отладки.
Точку останова ставят двойным кликом на полоске слева от ввода кода. См. скриншот.

Только мало что это даст. Лучше прислушаться к советам выше. Низкоуровневая оптимизация на современных компьютерах дело нетривиальное и не всегда очевидное. Компилятор обычно это делает много лучше среднестатистического программиста, т.к. компилятор "знает" особенности современной архитектуры процессоров, а вот средний программист - нет. Программист же должен сосредоточиться на алгоритме, это будет в десятки раз выгоднее (и по памяти и по скорости, в целом), чем колупать биты.
Миниатюры
Как увидеть часть своего С++ кода на ассемблере?  
3
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
10.10.2016, 17:15
Ну и использование asm вставок вероятно увеличит платформозависмость кода.
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
10.10.2016, 17:15
Цитата Сообщение от Avazart Посмотреть сообщение
Если отлаживаю то мне достаточно посмотреть только на вызовы ф-ций.
как бы полностью согласен
Но было у меня один раз давным-давно, уже не помню деталей,программа рушилась после одной функции, но не всегда,
оказывается я соглашения о вызовах нарушил, то ли Сишный вызов вместо паскалевского, то ли наоборот
ну и ассемблерный листинг сразу дал ответ, когда я увидел
Assembler
1
ret 4;
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
10.10.2016, 17:17
Ну по моему в глядя на С++ код найти ошибку легче чем на asm по крайней мере более вероятнее.
0
1 / 1 / 0
Регистрация: 18.08.2014
Сообщений: 54
10.10.2016, 17:21  [ТС]
DrOffset Очень, очень признателен Вам.
Ctrl-Alt-C - это то, что мне было нужно.

Остались пара "тривиальных" вопросов, которые кажется, можно задать компу. Можно ли:
1. Вырезать кусок и заменить им оператор
2. Исправить кусок и предложить его компилятору.

Ещё раз, огромное Вам спасибо.
0
 Аватар для ture
553 / 361 / 206
Регистрация: 27.11.2014
Сообщений: 1,049
10.10.2016, 17:25
ZaRus1,
C++
1
2
3
__asm{
....
}
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
10.10.2016, 17:34
Цитата Сообщение от ZaRus1 Посмотреть сообщение
Вырезать кусок и заменить им оператор
Вырезать кусок асмокода?
Можно сделать ассемблерную вставку в коде на С++. В справке Builder есть пример, если поискать там ключевое слово _asm.

Цитата Сообщение от ZaRus1 Посмотреть сообщение
Исправить кусок и предложить его компилятору.
Можно заменить какой-то кусок кода на С++ с помощью ассемблерной вставки.

Однако, я еще раз предупрежу: это не решит проблему. Чтобы этим пользоваться, нужно четко знать и как работает компилятор (как он генерирует код) и как работает процессор. Так что, если что, я не несу никакой ответственности за какие-либо неудачи в этом деле.
0
1 / 1 / 0
Регистрация: 18.08.2014
Сообщений: 54
10.10.2016, 17:35  [ТС]
Уважаемые администраторы, если Вас не затруднит, то (для возможных последующих читателей) скорректируйте мой 1й пост (я этого не могу) добавив строчку:

Да, можно!
Для этого на точке останова нужно набрать Ctrl-Alt-C (и увидите столько, сколько захотите).

Большое Вам всем спасибо. И всего Вам наилучшего.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.10.2016, 17:35

Как отключить часть кода
Добрый день! Подскажите пожалуйста как закрыть часть программы: xnew = .x + .vx * Dt + 0.5 * .ax * Dt * Dt ynew = .y + .vy * Dt + 0.5 *...

Не понимаю как работает часть кода
Привет! Есть код using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace...

Объяснить как работает часть кода
Нужна помощь, объяснить как работает часть кода, а именно добавление элементов в двусвязный кольцевой список void List::Add(int x) { ...

Как вырезать часть из кода страницы?
Вот сам код: &lt;div class=&quot;scont&quot;&gt; &lt;div id=&quot;news-id-15014&quot; style=&quot;display:inline;&quot;&gt;&lt;div align=&quot;center&quot;&gt;&lt;!--TBegin--&gt;&lt;a...

Как вынести часть кода в процедуру?
Вот код программы, как выделенное вынести в процедуру? program privet; label 1; var a,b,i:integer; begin i:=0; a:=500; ...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru