Использовать Visual C++ Environment и ключевое слово Asm в качестве альтернативы для Assembler IDE?

Просто прочитал в книге по С++, что вы можете буквально добавить ассемблер в С++, просто используя ключевое слово asm.

Означает ли это, что если бы кто-то захотел использовать Visual Studio для написания ассемблера, я мог бы просто создать основной метод С++, а затем поместить в него ассемблер и выполнить его как программу на С++? Компилятор просто запустит встроенный в ассемблер C++, как если бы это была только программа на ассемблере?

Мой вопрос возникает из-за отсутствия достойной IDE для ассемблера.


person user997112    schedule 16.04.2012    source источник
comment
msdn.microsoft.com/en-us/ библиотека/45yd4tzz%28v=VS.80%29.aspx   -  person Hans Passant    schedule 16.04.2012
comment
Хорошо, поменяйте asm в моем вопросе на __asm.   -  person user997112    schedule 16.04.2012


Ответы (1)


Когда вы используете компилятор C++, он добавит в вашу программу дополнительный код, которого нет в int main(). Если вы когда-нибудь декомпилируете простую программу hello world, вы заметите, что она начинает выполнение задолго до int main(), вызывая несколько функций, таких как _set_app_type и _getmainargs, а затем, в конце концов, вызывает ваш int main(). Наиболее интересным для вас, вероятно, будет вызов _getmainargs, так как он получает аргументы командной строки для вашей программы. Если бы вы скомпилировали свою сборку с помощью ассемблера, такого как NASM, FASM или даже GAS, он не стал бы вызывать _getmainargs и другие, поэтому вам, как программисту, пришлось бы реализовывать свой собственный способ получения аргументов командной строки, что может быть сложно для новички.

Пока вы указываете свой __asm с ключевым словом volatile, компилятор не должен возиться с вашим ассемблерным кодом, и он будет работать (этот конкретный код), как если бы это была «программа на ассемблере».

Если вы ищете IDE для сборки, могу сказать, что я пошел по тому же пути. Я использую FASM, отличную маленькую IDE, но есть плагины для Eclipse и даже Visual Studio, хотя я не могу сказать, что у меня был хороший опыт работы с ними.

Изменить: я хотел бы добавить, что если вы изучаете сборку, вам, вероятно, лучше изучать ее с помощью ассемблера. Обычное использование ассемблера используется, когда C++ или более высокий язык не может быть, поэтому, если вы становитесь зависимым от компилятора C++ и встроенного синтаксиса ассемблера, это может вызвать путаницу при попытке написать необработанный ассемблер.

person user99545    schedule 16.04.2012
comment
@Misha Если вы используете ключевое слово volatile, этого не должно быть. Ключевое слово означает оставить это в покое. В некоторых компиляторах вам может потребоваться указать флаг компилятора, например -force-volatile или что-то в этом роде, чтобы вы могли проверить свой компилятор. - person user99545; 16.04.2012
comment
Может ли кто-нибудь объяснить разницу между FASM, NASM и MASM? Один Intel, другой AMD... и т.д.? - person mezamorphic; 16.04.2012
comment
@ user1107474 - звучит как хороший вопрос о переполнении стека. - person Ferruccio; 16.04.2012
comment
Возможно, такой вопрос? С чего начать изучение сборки — IDE, примеры - person Bo Persson; 16.04.2012