您当前的位置: 首页 > 

插件开发

暂无认证

  • 1浏览

    0关注

    492博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

汇编语言-中括号-mov指令-cmp指令-lea指令

插件开发 发布时间:2022-10-03 09:34:44 ,浏览量:1

文章目录
    • 1.汇编语言中"[]"的用法
    • 2.mov指令中用到"[]"
    • 3.cmp指令中用到"[]"
    • 4.lea指令
    • 5.test指令
其实"[]"相当于指针,里面的内容是地址而不是数值,即使里面放的是寄存器也一样。在[]内的东东不管是立即数还是寄存器还是表达式, 都相当于高级语言中的变量, 也就是一个地址。真正的操作数是该地址上存放的内容。

1.汇编语言中"[]"的用法

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

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

2.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。

3.cmp指令中用到"[]"

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

4.lea指令

一个比较特别的指令是lea, 意思是"装入有效地址"(Load Effective Address), 它的操作数就是地址,所以lea eax,[edx-02],就是把 edx 中的值减去2再送入eax, 而不是把由[edx-02]指明的内存地址上的值放到eax. 其结果是[eax]和[ebx-02]都表示同一个地址。

lea di, [bp-22] ----把bp-22的有效值(=内存地址)给di
5.test指令

test指令中用到"[]" 1–test byte ptr [bx+08FD] –将位于内存地址bx+08FD处的byte大小的值逻辑与,判断运算结果是否为00

关注
打赏
1665481431
查看更多评论
立即登录/注册

微信扫码登录

0.0362s