Когда вы используете компилятор 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