汇编中的方括号[]怎么用?

st291 2009-11-28 07:33:39
mov edx,[10];
段地址在ds中 偏移是方括号中的10

lea edx,[eax*2];
这个执行后edx=eax*2;

有的是方括号涉及到段地址什么的!有的直接拿方括号中的值来操作!还有没其他的用处?
到底怎么区分啊? 我有点糊涂...
...全文
2073 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zenny_chen 2009-11-28
  • 打赏
  • 举报
回复
上面纠正一下,
转移是一个8、16或32位的立即数。
zenny_chen 2009-11-28
  • 打赏
  • 举报
回复
基于Intel i386架构体系的ISA中,LEA指令用于获取一个存储地址的偏移量,其全称为:Load Effective Address。而存储器访问计算公式为:
有效地址 = 基地址 + (索引 * 刻度因子) + 转移

其中,基地址必须是一个通用寄存器;索引也是一个通用寄存器;刻度因子只能是2,4或8的立即数;而转移是一个8、16或32的立即数。
比如:

mov ebx, 0100H
mov edx, 20
lea eax, ebx[edx * 8 + 32]

在C/C++中,相当于:

register int edx = 20;
register char *ebx = (char*)0x0100;
register char *eax = ebx + (edx * 8) + 32;
zenny_chen 2009-11-28
  • 打赏
  • 举报
回复
Intel汇编指令集中,方括号[ ]对应于C/C++中的解引用。
比如:

mov esi, 0100H
mov eax, [esi]

相当于:

register int *esi = (int*)0x0100;
register int eax = *esi;

arong1234 2009-11-28
  • 打赏
  • 举报
回复
[]总是表示地址吧,lea指令特殊,它就是取一个表达式的地址,因此你得到eax*2
helpstudy 2009-11-28
  • 打赏
  • 举报
回复
mov edx,[10];这条语句是将偏移地址为10(段地址是DS)中的内容给edx,而lea edx,[eax*2];语句是将存放edx*2的内存单元的偏移地址赋给edx

65,187

社区成员

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

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