Как посмотреть код ассемблера в Visual Studio 2012?
Есть код программы на C++. Как посмотреть коды ассемблера для этой программы в MS Visual Studio 2012?
Добавлено через 3 часа 15 минут
Нашёл. Когда запускаешь трассировку программы, нажать ПКМ и выбрать пункт меню Go To Disassembly.
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Как открыть проект созданный в Visual Studio 2012 в Visual Studio 2008?
Нашел здесь же тему открытия Visual Studio 2012 в Visual Studio 2010 там написано так. Открыть.
Как проект на visual studio 2012 открыть на visual studio 2008
Программа(курсовая) создана на 2012, надо показать и чтобы работала на 2008. Подскажите пожалуйста.
Код в Visual Studio 2012
Студия при выборе пустого приложения выдает вот такой код: (function () < "use strict"; .
Код не работает в visual studio 2012
Незнаю почему но этот код не работает в visual studio 2012, как исправить, но дома 2017 версия и.
Регистрация: 07.10.2015
Сообщений: 37
Здравствуйте.
Я все-таки никак не могу найти, как посмотреть код ассемблера, правда в VS 2013.
Можете подсказать, пожалуйста?
3434 / 2813 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
Сделать точку останова в коде (курсор на левый край окна с текстом кода, щёлкнуть левой кнопкой мыши). Запустить отладку, после остановки, в контекстном меню выбрать: «К дизассемблированному коду». Или во вкладке «Отладка», Окна — Дизассемблированный код. Так в 10-й студии. В 12-й должно быть что-то похожее.
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Работа с указателями — код не работает в Visual Studio 2012
Нужно помощь, дан код программы с указателями. Когда пишу код в Visual 2012, то при выводе на экран.
Стоит ли переходить на Visual Studio 2013 Express c Visual Studio 2012 Ultimate
Слишком дорого стоят полные версии. Какие значимые функции теряются при переходе на версию Express ?
Не работает отладка кода в Visual Studio pro 2012+qt visual studio add-in 1.2.1
Здравствуйте, скажите пожалуйста в чем проблема, запускаю этот код (F5) в Visual Studio #include.
Просмотр кода дизассемблирования в отладчике Visual Studio (C#, C++, Visual Basic, F#)
Область применения:
Visual Studio Visual Studio для Mac
Visual Studio Code ![]()
В окне Дизассемблированный код отображается код сборки, соответствующий инструкциям, созданным компилятором. При отладке управляемого кода эти инструкции ассемблера соответствуют присущему данному объекту коду, созданному компилятором JIT, а не промежуточному языку (MSIL), созданному компилятором Visual Studio.
Чтобы воспользоваться всеми возможностями окна Дизассемблированный код, изучите основы программирования на языке ассемблера. Справочные материалы для наборов инструкций Intel находятся в 2-м томе руководства по архитектуре. Этот материал обычно относится к наборам инструкций AMD, а также.
Эта возможность доступна, только если включена отладка на уровне адреса. Она недоступна для отладки скриптов и SQL.
В дополнение к инструкциям ассемблера в окне Дизассемблированный код могут отображаться следующие сведения:
- Адреса в памяти, где располагается каждая из инструкций. Для собственных приложений это фактические адреса в памяти. Для кода на Visual Basic или C# это смещение относительно начала функции.
- Исходный код, из которого получается код сборки.
- Байты кода, то есть байтовое представление реальных инструкций компьютера или языка MSIL.
- Символьные имена для адресов памяти.
- Номера строк, соответствующие исходному коду.
Инструкции на языке ассемблера состоят из мнемоник, представляющих собой сокращения имен инструкций, и символов, которые обозначают переменные, регистры и константы. Каждую инструкцию машинного кода представляет одна мнемоника ассемблера, за которой следует один или несколько необязательных символов.
Код на ассемблере активно использует регистры процессора, а при использовании управляемого кода — регистры среды выполнения. Вы можете использовать окно Дизассемблированный код в сочетании с окном Регистры, которое позволяет изучить содержимое регистров.
Чтобы просмотреть инструкции машинного кода в необработанной числовой форме, а не на языке ассемблера, используйте окно Память или выберите Байты кода в контекстном меню в окне Дизассемблированный код.
Использование окна дизассемблирования
Чтобы включить окно Дизассемблированный код, выберите в разделе Сервис>Параметры>Отладка параметр Включить отладку на уровне адреса.
Чтобы открыть окно Дизассемблированный код во время отладки, выберите Windows>Дизассемблированный код или нажмите сочетание клавиш ALT+8.
В зависимости от установок или выпуска сервера доступные диалоговые окна и команды меню могут отличаться от описанных в справке. Чтобы изменить параметры, выберите Импорт и экспорт параметров в меню Сервис . Дополнительные сведения см. в разделе Сброс параметров.
Чтобы включить или отключить вывод дополнительных сведений, щелкните правой кнопкой в окне Дизассемблированный код и установите или снимите в контекстном меню соответствующие флажки.
Желтая стрелка, расположенная в левом поле, отмечает текущую точку выполнения. Для собственного кода точка выполнения соответствует счетчику команд ЦП. В этом расположении отображается следующая инструкция, которая будет выполнена в программе.
Перемещение вверх или вниз в области памяти
При просмотре содержимого памяти в окне Память или Дизассемблированный код для перемещения вверх и вниз по области памяти можно использовать вертикальную полосу прокрутки.
- Для перемещения на страницу вниз (к старшему адресу памяти) щелкните вертикальную полосу прокрутки ниже того места, где находится бегунок.
- Для перемещения на страницу вверх (к младшему адресу памяти) щелкните вертикальную полосу прокрутки выше того места, где находится бегунок. Обратите внимание, что вертикальная полоса прокрутки работает не в стандартном режиме. Современные персональные компьютеры имеют огромное адресное пространство, поэтому в нем достаточно легко заблудиться, перетаскивая бегунок полосы прокрутки в произвольное расположение. По этой причине бегунок «подпружинен» и всегда остается в центре полосы прокрутки. В приложениях машинного кода можно постранично перемещаться вверх и вниз, однако нельзя свободно использовать полосу прокрутки. В управляемых приложениях дизассемблирование ограничивается одной функцией и прокруткой можно пользоваться в обычном режиме. Обратите внимание, что старшие адреса отображаются в нижней части окна. Для просмотра старших адресов следует перемещаться вниз, а не вверх.
Перемещение вверх или вниз одной инструкции
- Щелкните стрелку, расположенную над или под вертикальной полосой прокрутки.
См. также
- Просмотр данных в отладчике
- Практическое руководство. Использование окна регистров
Создание проекта на языке ассемблера в Microsoft Visual Studio Express 2010
Создание проекта консольного или оконного Windows-приложения не отличается от рассмотренного для языков программирования Си и C++.
После того, как в Visual Studio появилось окно проекта (в левой части появившегося окна отображается Обозреватель решений), для добавления нового файла программы в проект выбираем по правой кнопке мыши на папке Файлы исходного кода меню Добавить->Создать элемент.
В появившемся окне выбираем Файл C++ (.cpp), задаем имя файла и вручную добавляем к нему расширение asm. Нажимаем кнопку Добавить. 
В появившемся окне набираем текст программы. В качестве примера можно использовать следующий текст:
.686P
.MODEL FLAT, STDCALL
.STACK 4096
.DATA
MB_OK EQU 0
STR1 DB «Моя первая программа»,0
STR2 DB «Привет всем!»,0
HW DD ?
EXTERN MessageBoxA@16:NEAR
.CODE
START:
PUSH MB_OK
PUSH OFFSET STR1
PUSH OFFSET STR2
PUSH HW
CALL MessageBoxA@16
RET
END START

Далее необходимо сообщить среде разработки, что данный файл является программой на языке ассемблера, и для корректного включения его в проект требуется использовать Microsoft Macro Assembler. Для этого выбираем для проекта (по правой клавише мыши) опцию Настройки построения.


В появившемся окне ставим галочку для masm (Microsoft Macro Assembler) и нажимаем OK.
Теперь нужно проверить, что для файла на языке ассемблера установился соответствующий инструмент сборки. По правой кнопке мыши для файла с расширением .asm выбираем опцию Свойства.

В появившемся окне для выбранного файла отмечаем инструмент сборки Microsoft Macro Assembler.

Для построения проекта выбираем меню Отладка->Построить решение.

В случае успешного построения в нижней части окна отображается Построение: успешно 1.

Для запуска приложения выбираем меню Отладка->Начать отладку.


Результат выполнения программы:
Изменить тип приложения с консольного на оконное

Чтобы убрать консоль (поменять тип приложения с консольного на оконное, или наоборот) необходимо обратиться к меню Свойства проекта, вызванного по правой кнопке мыши.
В появившемся окне выбрать раздел Компоновщик->Система, и в разделе Подсистема поменять тип с Консоль на Windows (или наоборот).


Повторная сборка и запуск программы на выполнения выдадут следующий результат (консоли нет):
Подсветка синтаксиса языка ассемблера
Для того, чтобы включить подсветку синтаксиса языка ассемблера в Microsoft Visual Studio Express 2010 необходимо загрузить файл usertype и распаковать его в папку
C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE
Для подключения подсветки синтаксиса выбираем меню Сервис->Параметры

В появившемся окне выбрать Текстовый редактор->Расширение файла и вручную добавляем расширение asm. Нажимаем кнопку Добавить, затем — OK.

После перезапуска Microsoft Visual Studio Express 2010 подсветка синтаксиса языка ассемблера будет активна.
Комментариев к записи: 23
Ассемблер для Windows используя Visual Studio
Многие из нас изучали ассемблер в университете, но почти всегда это ограничивалось простыми алгоритмами под DOS. При разработке программ для Windows может возникнуть необходимость написать часть кода на ассемблер, в этой статье я хочу рассказать вам, как использовать ассемблер в ваших программах под Visual Studio 2005.

Создание проекта
В статье мы рассмотрим как вызывать ассемблер из С++ кода и обратно, передавать данные, а также использовать отладчик встроенный в Visual Studio 2005 для отладки кода на ассемблер.
Для начала нам нужно создать проект. Включаем Visual Studio, выбираем File > New > Project. В Visual Studio нет языка ассемблер в окне выбора типа проекта, поэтому создаем С++ Win32 проект. В окне настроек нового проекта выбираем «Empty Project».

По умолчанию Visual Studio не распознает файлы с кодом на ассемблер. Для того чтобы включить поддержку ассемблер нам необходимо настроить в проекте условия сборки указав какой программой необходимо компилировать файлы *.asm. Для этого выбираем пункт меню «Custom Build Rules. ».

В открывшемся окне мы можем указать специальные правила компиляции для различных файлов, Visual Studio 2005 уже имеет готовое правило для файлов *.asm, нам необходимо лишь включить его, установив напротив правила «Microsoft Macro Assembler» галочку.

Добавление исходного кода
Перейдем к написанию исходного кода нашего проекта. Начнем с добавления исходного кода на c++. Добавим новый файл в папку Source Files. В качестве Template выбираем C++ File и вводим желаемое имя файла, например main.cpp. Напишем функцию, которая будет считывать имя введенное пользователем, оформив это в виде функции readName() которая будет возвращать ссылку на считанное имя. Мы получим примерно следующее содержимое файла:
#include void main () < printf("Hello, what is your name?\n"); >void* readName()
Теперь, когда мы знаем имя пользователя мы можем вывести приветствие, его будет выводить функция sayHello() которую мы напишем на ассемблер, чтобы использовать эту функцию сначала мы должны указать что она будет определена в другом файле, для этого добавим блок к main.cpp:
extern «C»
Этот блок говорит компилятору, что функция sayHello() будет объявлена в другом файле и будет иметь правила вызова «C». Компилятор C++ искажает имена функций так, что указание правил вызова обязательно. Кроме того мы хотим использовать функцию readName() из функции sayHello(), для этого необходимо добавить extern «C» перед определением функции readName(), это позволит вызывать эту функцию из других файлов используя правила вызова «C».
Пришло время добавить код на ассемблер, для этого добавим в Source Folder новый файл. Выбираем тип Text File (.txt) и в поле название заменяем .txt на .asm, назовем наш файл hello.asm. Объявим функцию sayHello() и укажем внешние функции, которые мы хотим использовать. Получим следующий код:
.686 .MODEL FLAT, C .STACK .DATA helloFormat BYTE "Hello %s!",10,13,0 .CODE readName PROTO C printf PROTO arg1:Ptr Byte, printlist: VARARG sayHello PROC invoke readName invoke printf, ADDR helloFormat, eax ret sayHello ENDP END
Теперь мы можем запустить проект, для этого просто выбираем Debug > Start Without Debugging или нажимаем комбинацию Ctrl-F5. Если все сделано верно, вы увидите окно программы:

Немного усложним задачу, попробуем написать на ассемблер функцию принимающую параметр и возвращающую значение. Для примера напишем функцию calcSumm() которая будет принимать целое число и возвращать сумму его цифр. Изменим наш код на С++ добавив в него информацию о функции calcSumm, ввод числа и собственно вызов функции. Добавим функцию в файл hello.asm, возвращаемое значение помещается в eax, параметры объявляются после ключевого слова PROC. Все параметры можно использовать в коде процедуры, они автоматически извлекутся из стека. Также в процедурах можно использовать локальные переменные. Вы не можете использовать эти переменные вне процедуры. Они сохранены в стеке и удаляются при возврате из процедуры:
.686 .MODEL FLAT, C .STACK .DATA helloFormat BYTE "Hello %s!",10,13,0 .CODE readName PROTO C printf PROTO arg1:Ptr Byte, printlist: VARARG sayHello PROC invoke readName invoke printf, ADDR helloFormat, eax ret sayHello ENDP calcSumm PROC a:DWORD xor esi, esi mov eax, a mov bx, 10 @div: xor edx, edx div bx add esi, edx cmp ax, 0 jne @div mov eax, esi ret calcSumm ENDP END
Запустив проект мы увидим следующий результат выполнения:

Отладка
Конечно в данной задаче нет ничего сложного и она вовсе не требует использования ассемблер. Более интересным будет рассмотреть, а что же нам дает Visual Studio для разработки на ассемблер. Попробуем включить режим отладки и установим точку остановки в hello.asm, запустим проект, мы увидим следующее:

Окно Disassembly (Debug > Windows > Disassembly) показываем команды ассемблер для данного объектного файла. Код который мы написали на С++ показывается черным цветом. Disassembled code показывается серым после соответствующего ему кода на C++/ассемблер. Окно Disassembly позволяет отлаживать код и осуществлять stepping по нему.
Окно регистров (Debug > Windows > Registers) позволяет посмотреть значение регистров.
Окно памяти (Debug > Windows > Memory) позволяет посмотреть дамп памяти, слева мы видим шестнадцатеричные адрес, справа шеснадцатеричные значения соответствующих ячеек памяти, можно перемещаться, вводя адрес в соответствующее поле в верху окна.
