__asm是什么意思呢!

x519d072 2010-11-25 01:52:35
#include "stdafx.h"

void main()
{
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);
}
中的__asm
{
mov dword ptr [ebp-4], 10h
}表示什么意思呢!
...全文
2243 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
haogeai123 2010-11-25
  • 打赏
  • 举报
回复
嵌入汇编代码用的
facilbe 2010-11-25
  • 打赏
  • 举报
回复
嵌入汇编语言
zourong0412 2010-11-25
  • 打赏
  • 举报
回复
纯属过来学习的...强大啊...我第一眼竟然看成了ACM...
maoxing63570 2010-11-25
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 gules 的回复:]
引用 8 楼 szgrape 的回复:
是汇编语言啊

可是咋就没人解释下那句话在C里是什么意思哦


楼主要了解这句的意思,需要了解函数调用时的栈桢结构,ebp寄存器即为当前被调用函数的栈空间的基址,栈空间的增长是从高地址向低地址变化,主要用于保存函数内的局部变量与临时变量,按定义顺序从ebp地址开始向下增长,因此
mov dword ptr [ebp-4], 10h
相当于为函……
[/Quote]
你把printf("var=%d\n",var);注释起来看下,看下最后打印的var的值为多少
maoxing63570 2010-11-25
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 gules 的回复:]
引用 8 楼 szgrape 的回复:
是汇编语言啊

可是咋就没人解释下那句话在C里是什么意思哦


楼主要了解这句的意思,需要了解函数调用时的栈桢结构,ebp寄存器即为当前被调用函数的栈空间的基址,栈空间的增长是从高地址向低地址变化,主要用于保存函数内的局部变量与临时变量,按定义顺序从ebp地址开始向下增长,因此
mov dword ptr [ebp-4], 10h
相当于为函……
[/Quote]
说着真的很简单,你自己直接看下汇编去,看下是不是你说的这么简单
gules 2010-11-25
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 szgrape 的回复:]
是汇编语言啊

可是咋就没人解释下那句话在C里是什么意思哦
[/Quote]

楼主要了解这句的意思,需要了解函数调用时的栈桢结构,ebp寄存器即为当前被调用函数的栈空间的基址,栈空间的增长是从高地址向低地址变化,主要用于保存函数内的局部变量与临时变量,按定义顺序从ebp地址开始向下增长,因此
mov dword ptr [ebp-4], 10h
相当于为函数内的var整型变量赋值为10h(十进制为16)。
赵4老师 2010-11-25
  • 打赏
  • 举报
回复
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编。)
龙哥依旧 2010-11-25
  • 打赏
  • 举报
回复
Microsoft Specific

The __asm keyword invokes the inline assembler and can appear wherever a C or C++ statement is legal. It cannot appear by itself. It must be followed by an assembly instruction, a group of instructions enclosed in braces, or, at the very least, an empty pair of braces. The term "__asm block" here refers to any instruction or group of instructions, whether or not in braces.

Note:
Visual C++ support for the Standard C++ asm keyword is limited to the fact that the compiler will not generate an error on the keyword. However, an asm block will not generate any meaningful code. Use __asm instead of asm.

maoxing63570 2010-11-25
  • 打赏
  • 举报
回复
看了半天汇编不知道所以然,只知道那句汇编的意思就是把10h(相当于十进制的16)存储到一个双字中,因为这里用的是dword ptr(由于在不同的计算机中一个双字的位数是不固定的,我这里假设双字是32位,也就是恰好是用来保存一个整数的4字节)
KID_coder 2010-11-25
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 winton_adlsy 的回复:]
mov dword ptr [ebp-4], 10h
ebp-4是个地址,这个地址指向的内存是一个dword型变量,将0x10这个数值放到这个变量中。
恩,应该是这个意思。
[/Quote]
是这个意思~mov是传送指令 把十六进制的10(也就是十进制的16)传送给dword ptr [ebp-4]~
如果用的是vc6的话~设断点->调试->alt+8可以看到ptr [ebp-4]其实是var的地址~
也就是改变了var的值~
__asm
{
mov dword ptr [ebp-4], 10h
}是内嵌汇编~楼上都说了
winton_adlsy 2010-11-25
  • 打赏
  • 举报
回复
mov dword ptr [ebp-4], 10h
ebp-4是个地址,这个地址指向的内存是一个dword型变量,将0x10这个数值放到这个变量中。
恩,应该是这个意思。
s393102639 2010-11-25
  • 打赏
  • 举报
回复
以下 {}内的语句是 汇编语句
szgrape 2010-11-25
  • 打赏
  • 举报
回复
是汇编语言啊

可是咋就没人解释下那句话在C里是什么意思哦

luciferisnotsatan 2010-11-25
  • 打赏
  • 举报
回复
嵌入汇编
liutengfeigo 2010-11-25
  • 打赏
  • 举报
回复
汇编。
tracyjk 2010-11-25
  • 打赏
  • 举报
回复
进来学习下
Metrosexual 2010-11-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 csuxiaowu 的回复:]
嵌入汇编
[/Quote]
+1
gules 2010-11-25
  • 打赏
  • 举报
回复
内嵌汇编
proorck6 2010-11-25
  • 打赏
  • 举报
回复
嵌入汇编
Csuxiaowu 2010-11-25
  • 打赏
  • 举报
回复
嵌入汇编

64,670

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧