Я пытаюсь немного ассемблерного кода, чтобы узнать, как он работает, но в моем первом примере я столкнулся с исключением переполнения буфера. Я использую VS2013 Express Edition, и я использую код C ++, чтобы заставить код ассемблера работать, используя внешнюю функциональность «C». Я пытался изменить некоторые параметры VS, но это не сработало. Что может быть причиной для исключения переполнения буфера, хотя это очень простое утверждение. Обычно я строю и выполняю без оператора mov.
Редактировать : Просто добавьте оператор ret для макроса и проблема решена.
Это сборочная часть:
.586
.model flat,c
.data
.code
doit proc
mov eax, 8
doit endp
end
и вот она часть c ++:
extern "C" void doit();void main()
{
doit();
}
Причина в том, что процедура ассемблера не имеет ret
заявление. Так что поведение программы не определено. 🙂