CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  其他开发语言 >  汇编语言

一条简单的指令!

楼主rainvoid()2005-07-25 15:02:50 在 其他开发语言 / 汇编语言 提问

 
  本人菜鸟!  
   
  ebx     --->   val  
  edx     --->   nval  
  eax     --->   t  
   
  int     t   =   val   +   nval;     ------>     leal   (%edx,%dbx)   ,   %eax  
   
  leal   (%edx,%dbx)   ,   %eax   ???????????     为什么会一句就完成了两个操作(add   ,   mov)???给我解释详细点呗!这是我从书上看到的,大家见笑了!  
  问题点数:40、回复次数:7Top

1 楼rainvoid()回复于 2005-07-25 15:10:21 得分 0

我的理解是(%edx,%dbx)是一个寻址操作,但怎么会是val   +   nval的地址呢?Top

2 楼rainvoid()回复于 2005-07-26 10:41:47 得分 0

再加问一个,有的代码是这样的:    
        一条mov指令就能完成的任务,却用先push,后pop来实现,为什么?我知道用左移位可以实现乘法,类似的常识性的技巧还有哪些,请推选给我一篇这样的文章,愿以100分相赠!!!  
   
  Top

3 楼mydo(侯佩|hopy|ks)回复于 2005-07-26 12:52:07 得分 3

这个...是看过不少技巧文章,但一下子要找出来,还真不太容易,这是慢慢积累的。Top

4 楼hackingtruth(尘封)回复于 2005-07-27 17:23:47 得分 3

呵呵   高手把心得贴出来让大家看看喽Top

5 楼rainvoid()回复于 2005-07-27 22:29:19 得分 0

写错了,是ebx,谁来告诉我第一个问题吧!!!Top

6 楼zara(Kyrie eleison)回复于 2005-07-28 09:52:58 得分 34

leal   (%edx,%dbx),   %eax     首先要了解   lea   指令的作用吧,   它是把经过计算的源操作数表示的内存地址赋给目的操作数寄存器.   这里的源操作数是   (%edx,   %ebx),   所表示的内存地址就是   edx+ebx   了,   所以,   整个指令的实际的结果就是   edx+ebx   ->   eax.   随着   386p   模式下寻址方式的增强,   lea   指令的另外的一个作用,   即数值计算功能,   也越来越多地得到了应用.   还是举个例子吧,   下面的这部分代码是   Windows   2000   的   shell32.dll   中由颜色计算亮度,   以选择合适的桌面文字色的计算过程:    
      (shell32   版本为   5.00.2920.0000,   下面代码的起始地址为   775B3AD6)  
  push             001  
  call             GetSysColor   ;USER32.DLL  
  mov               [esi],eax  
  mov               eax,[esi]  
  push             001  
  movzx           ecx,byte   ptr   [esi] ;   Red  
  shr               eax,010  
  movzx           eax,al ;   Blue  
  lea               ecx,[eax][ecx]*2 ;   R*2   +   B     ->   ecx  
  xor               eax,eax  
  mov               al,[esi][00001] ;   Green  
  movzx           eax,al  
  lea               eax,[eax][eax]*4 ;   G*5     ->     eax  
  add               ecx,eax ;   G*5   +   R*2   +   B     ->   ecx  
  xor               eax,eax  
  cmp               ecx,000000400  
   
  上面代码中的两次简单的相乘和累加,   都是通过   lea   指令来完成的,   而不是一般会使用到的   mul/add   指令Top

7 楼rainvoid()回复于 2005-08-01 10:24:23 得分 0

多谢支持!!!Top

相关问题

  • 一条51指令:JNB
  • 一个简单的宏伪指令的问题?
  • 高分求购!At指令集和一个简单的使用At指令的源程序。
  • 超简单的问题,这几条指令哪条执行效率高?
  • 一个简单的问题,关于 mov 指令,大家帮忙了
  • 假设某指令触发了一个中断,CS:IP入栈,转入中断处理程序,这个CS:IP是本指令还是下一条指令呢?
  • 在VC中,一条浮点乘的指令相当于多少条浮点加的指令?
  • 我知道 汇编指令与机器指令不是一一对应的关系,那么intel和amd提供的处理器手册中,是不是介绍了所有机器指令的二进制代码,比如一条汇编指令对两条机器指令(RET指令就分为段间,段内)
  • 如何向互联网固定Ip发送一条指令
  • 几条指令的理解??

关键词

  • 指令
  • 代码
  • 操作数
  • eax
  • edx
  • dbx
  • 地址
  • ebx
  • ecx
  • esi

得分解答快速导航

  • 帖主:rainvoid
  • mydo
  • hackingtruth
  • zara

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo