使用循环结构编写了一个带有汇编程序插入的简单程序:
// laba4.cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
int main()
{
int a, b, n;
cin >> n;
_asm {
mov ebx, 1;
mov ecx, n;
dec ecx;
mov ebp, 1;
mov esi, 1;
mov edi, -1;
loop_1:
mov eax, edi;
imul ebp;
mov esp, eax;
inc esi;
mov eax, ebx;
mul esi;
mov ebx, eax;
mov eax, ebp;
mul esi;
mov ebp, eax;
add ebx, esp;
neg edi;
loop loop_1;
mov a, ebx;
mov b, ebp;
}
cout << a << "/" << b;
return 0;
}
所以,当从寄存器写入变量的值时(mov a, ...; mov b, ...发生“违反写访问”错误。这里有什么问题?
至少,不要触摸寄存器,否则
ebp你esp会弄乱堆栈指针。由于变量是使用寄存器的值(无可救药地被你破坏)写入的ebp- 就像那你就胡说八道了。
我不知道你的想法有多真实,但即使在这里我也有很大的怀疑。但这是另一个问题...