Я потратил много времени, пытаясь решить эту проблему, и я не понимаю, почему это не работает. Описание проблемы находится в комментариях ниже:Регистрация ESI вызывает ошибку RunTime-Check Failure # 0
.386 .MODEL FLAT, STDCALL OPTION CASEMAP:NONE .NOLIST .NOCREF INCLUDE \masm32\include\windows.inc .LIST .CODE DllEntry PROC hInstDLL:HINSTANCE, reason:DWORD, reserved1:DWORD mov eax, TRUE ret DllEntry ENDP caesarAsm proc string: DWORD, key: DWORD, stringLength : DWORD mov esi, 1 ; I cannot use this register, mov esi, (anything) causes Crash: ; Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention mov eax, string ret caesarAsm endp END DllEntry
Я искал «целый» Интернет, я обнаружил, что проблема связана со стеком, но ни одна операция на штабеля не помог мне решить. Я использую Microsoft Visual Studio 2012
https://en.wikipedia.org/wiki/X86_calling_conventions#Register_preservation –