C++问题。汇编代码asm

来源:百度知道 编辑:UC知道 时间:2024/06/21 22:09:35
有这样一段代码。

void main()
{
volatile int var=1;
int temp=var;
printf("var=%d\n",var);
_asm
{
mov dword ptr [ebp-4],10h
}
int ret=var;
printf("var=%d\n",ret);
}

mov dword ptr [ebp-4],10h
这句是什么意思??
还有asm前面的_这个横杆是什么用的??

顺便问下里面的
volatile 这个关键字是什么意思啊、?

好把我说。
—asm 就是嵌入汇编命令。汇编就是更加低沉的程序。
一般都是c++编译成汇编符号 在把汇编符号到2进制文件
mov dword ptr [ebp-4],10h

--------------------
根据对计算机程序堆栈的约定。

volatile int var=1; 先定义了1个变量。int大小是2。
int temp=var;
这样堆栈顶距离var变量为4
一般约定mov ebp,esp 这样ebp也是堆栈顶。注意堆栈先向上生长的。所以是
ebp-4 。其他的都是语法了。
mov dword ptr [ebp-4],10h
就是把10h直接给了[ebp-4] 在我们编译器编译的时候[ebp-4]的位置其实就是var的位置。。所以 其实就是对var=10h
但是这样写的问题那是特定的条件,也许换个编译器什么程序就完全不一样了。

没看错的话前面应该是两个_

__asm意思就是声明下面的语句块是用汇编语言编写..

mov dword ptr [ebp-4],10h
意思就是把10h(16进制)放入ebp(栈顶指针)-4中,其中-4是为了留出两个字节的位置,用于带出返回参数..dword ptr是把栈中的word强制转换成dword(double word)

volatile是用来修饰被不同线程访问和修改的变量

ebp是一个寄存器 寄存器的值减4得到的地址所对应的内存中的值加上ptr为目标寄存器的地址。
这句指令的意思是把10h赋值给目标内存区域,目标区域的大小为4字节。
横杠就是语法规则
volatile加不加无所谓是禁止编译器对这个值做优化。

http://hi.baidu.com/tclzs/blog/item/