现在的位置: 首页 > 综合 > 正文

举例说明在汇编语言中,”[]”的用法

2018年01月24日 ⁄ 综合 ⁄ 共 2049字 ⁄ 字号 评论关闭

内容:举例说明在汇编语言中,"[]"的用法

  "[]"的用法在"常见问题"已经有所说明,引用如下:

  1、push dword ptr [024c1100] 压栈024c1100值的双字

  2、cmp eax,[ebp+14] eax-ebp+14的有效值,不保留值,主要看标志位

  3、cmp byte ptr [eax],46 字节型eax-46,看标志位

  4、lea eax,[edx-02] 把edx-02的有效值(一个地址值)给eax

  5、mov ecx,[edx+08] edx+8值作为地址,此地址所指向的值给ecx

  我再补充几例我遇到的情况,参考了一些资料,以及我个人的理解.

  -------------------------------------------------------------------------------

  mov指令中用到"[]"

  1--mov [edi], eax ----把eax的值(dword)赋给位于内存地址edi处的值

  2--mov [bp-02], dx ---把dx的值(word)赋给位于内存地址bp-02处的值

  3--mov esi,[BP+14] ---把位于内存地址BP+14的dword大小的值移入esi寄存器

  4--mov eax, dword ptr [ebp-04]---把位于内存地址ebp-04的dword大小的值移入eax寄存器

  5--mov eax, dword ptr[0000003Ah]--把位于内存地址3A的dword大小的值放入eax寄存器

  6--mov cl, byte ptr [34h]--把位于内存地址34的byte大小的值放入cl寄存器

  7--mov dx, word ptr [3Eh]--把位于内存地址3E的word大小的值放入dx寄存器

  8--mov eax,[00403045h] --从内存地址403045读取一个32位的值

  9--mov al, byte ptr [eax+ecx]--把位于内存地址eax+ecx的byte大小的值放入al寄存器

  综括号"[]"用来从括号间的内存地址处取值,没有括号就只是这个值,寄存器和内存地址也可以.

  10--mov cx,[eax]--把位于内存地址eax的word大小的值移入cx寄存器

  在mov cx, [eax]中,处理器会先查看eax装有什么值(=内存地址),然后在那个内存地址中有什么值,并把这个word(16位,因为目标-cx-是个16位寄存器)移入cx。

  -------------------------------------------------------------------------------

  cmp指令中用到"[]"

  1--cmp dword ptr [ebp-04], 00000007--把位于内存地址ebp-04的dword大小的值与00000007比较

  2--cmp byte ptr [si], 00 --把位于内存地址si的byte大小的值与00比较

  -------------------------------------------------------------------------------

  lea指令中用到"[]"

  1--lea di, [bp-22] ----把bp-22的有效值(=内存地址)给di

  -------------------------------------------------------------------------------

  test指令中用到"[]"

  1--test byte ptr [bx+08FD]

  --将位于内存地址bx+08FD处的byte大小的值逻辑与,判断运算结果是否为00

  理解上难免有偏差,请指正!

  基本上有以下几种情况:

  1、"[]"内放立即数

  mov eax,dword ptr [00403000h]

  即把内存地址为403000的双字数据放入eax,为直接寻址。

  2、"[]"内放寄存器

  mov eax,dword ptr [ebx]

  即把ebx中的地址所指的内容放入eax中,为寄存器间接寻址。

  mov eax,dword ptr [eax+edi]

  即把eax中的数值加上edi中的数值所的结果作为内存地址,其指向的内容放入eax中,等价于mov eax,dword ptr [eax][edi],也为寄存器间接寻址。

  3、"[]"内放寄存器加立即数

  mov eax,dword ptr [ebx+0ch]

  即把ebx加0ch的结果作为内存地址,其指向的内容放入eax中,为寄存器相对寻址。

  同样可等价于mov eax,dword ptr 0ch[ebx]。

  4、"[]"内放寄存器乘以立即数

  mov eax,dword ptr [edi*4]

  即把edi内的地址乘四所得的新地址指向的内容放入eax中,为寄存器比例寻址。

  以上是我的理解,如有错误之处还望高手批评指正。

抱歉!评论已关闭.