mov dword ptr [ebp-4], 10h

srt266 2009-06-08 10:47:42
__asm
{
mov dword ptr [ebp-4], 10h
}

今天看到这段代码,从来没有在C++中使用过汇编,也没搜到让我明白的答案;
请各位大虾给兄弟指点一下,谢谢!
...全文
2111 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
sbxurui 2011-05-05
  • 打赏
  • 举报
回复
[ebp-4]是不是指向nA应该和系统有关吧(大端还是小端)?
H2SO2H2SO2 2009-06-09
  • 打赏
  • 举报
回复
将10h赋给[ebp-4]这个地址
mymtom 2009-06-09
  • 打赏
  • 举报
回复
一看ebp就明白了了。
nicky_zs 2009-06-09
  • 打赏
  • 举报
回复
依次类推,你函数中的第二句:
int nB = 12323;
应该是这个样子:
mov dword ptr [ebp-8], 3023h
nicky_zs 2009-06-09
  • 打赏
  • 举报
回复 1
那就对了。 你给的那句汇编,对应的正好就是 int nA = 0x10; 这句。

mov dword ptr [ebp-4], 10h

mov 是指令,意思是把数据从“源地址”移动到“目的地址”;
10h 就是“源地址”,只不过这里用了一个常数而不是地址
dword ptr [ebp-4] 就是“目的地址”。其中,ebp你可以理解为一个指针,ebp-4则是向下4的偏移处(刚好就是nA的地址)。dword ptr意思是把刚才那个偏移处解释为双字指针,即指向4个字节的内存空间的指针。
lori227 2009-06-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 nicky_zs 的回复:]
大概说来,就是把16赋给当前函数体中定义的第一个整形变量。 要讨论详细的情况就把代码贴全。
[/Quote]


void func ()
{
int nA = 0x10;//就是这句了
int nB = 12323;

//......
}

nicky_zs 2009-06-08
  • 打赏
  • 举报
回复
大概说来,就是把16赋给当前函数体中定义的第一个整形变量。 要讨论详细的情况就把代码贴全。
lingyin55 2009-06-08
  • 打赏
  • 举报
回复
mov dword ptr [ebp-4],10h 也是把2<<3算出来了,为16(10h),放入内存
brookmill 2009-06-08
  • 打赏
  • 举报
回复
把0x10赋值给某个4字节整型的局部变量
易语言汇编替换字节集源码mov eax, dword ptr [ebp 08h]mov eax, dword ptr [eax]                取出ebp 08h地址(eax值加8后才是真实地址)add eax, 07h                            eax的值为: ebp 08h真实地址减去1( 08H是真实地址,此时 07H),少1是修正后边加替换位置超出的1字节add eax, dword ptr [ebp 0Ch]            ebp 0Ch结合ebp 08h确定替换位置,并存放到通用寄存器eaxmov edi, eax                            eax作为内存指针存放于寄存器edi------------------------------------------------------------------------------------------------------------------------------------------mov eax, dword ptr [ebp 10h]            计算ebp 10h字节集指针mov eax, dword ptr [eax]                计算ebp 10h字节集指针add eax, 08h                            计算ebp 10h字节集指针mov esi, eax                            ebp 10h字节集指针存放于esi------------------------------------------------------------------------------------------------------------------------------------------mov ecx, dword ptr [ebp 10h]            计算ebp 10h字节集长度mov ecx, dword ptr [ecx]                计算ebp 10h字节集长度mov ecx, dword ptr [ecx 04h]            ebp 10h字节集长度值存放到计数存储器ecxrep movsb                               重复操作,重复次数为ecx值,也就是用作替换的字节集长度值
易语言汇编替换字节集源码 mov eax, dword ptr [ebp+08h] mov eax, dword ptr [eax]                取出ebp+08h地址(eax值加8后才是真实地址) add eax, 07h                            eax的值为: ebp+08h真实地址减去1(+08H是真实地址,此时+07H),少1是修正后边加替换位置超出的1字节 add eax, dword ptr [ebp+0Ch]            ebp+0Ch结合ebp+08h确定替换位置,并存放到通用寄存器eax mov edi, eax                            eax作为内存指针存放于寄存器edi ------------------------------------------------------------------------------------------------------------------------------------------ mov eax, dword ptr [ebp+10h]            计算ebp+10h字节集指针 mov eax, dword ptr [eax]                计算ebp+10h字节集指针 add eax, 08h                            计算ebp+10h字节集指针 mov esi, eax                            ebp+10h字节集指针存放于esi ------------------------------------------------------------------------------------------------------------------------------------------ mov ecx, dword ptr [ebp+10h]            计算ebp+10h字节集长度 mov ecx, dword ptr [ecx]                计算ebp+10h字节集长度 mov ecx, dword ptr [ecx+04h]            ebp+10h字节集长度值存放到计数存储器ecx rep movsb                               重复操作,重复次数为ecx值,也就是用作替换的字节集长度值

65,176

社区成员

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

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