读书人

C内联汇编有关问题,想不通

发布时间: 2013-11-25 13:22:27 作者: rapoo

C内联汇编问题,想不通


#include <stdio.h>
int main()
{
long a;
_asm{
pop eax
mov eax,2322
mov a,dword ptr eax[222h]
push eax
}
return 1;
}
汇编 c asm
[解决办法]
其实电脑开机后物理内存的每个字节都是可读写的,区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页,一页通常为4KB。
#include <stdio.h>
int main()
{
long a;
_asm{
pop eax
mov eax,0x40001000
mov a,dword ptr eax[222h]
push eax
}
return 1;
}

[解决办法]
引用:
push,pop写反了,谢谢。

++
并且 eax 如果,不是有用的,就不必保护了,因为 eax 通常会用来传递返回值,
只有调用函数之前,保护有用。

函数的代码中 ,不必在开头保护,结束恢复。

例如这段代码,就没有必要保护 eax

读书人网 >C++

热点推荐