|

楼主 |
发表于 2011-3-28 09:46:28
|
显示全部楼层
本帖最后由 h2995527 于 2011-3-28 11:34 编辑
回复 2# 小甲鱼
经过我20多个小时的琢磨
我会了
在数据段定义 X db ? {意思 在数据段定义一个未初始化变量的字节空间。一般定义局部变量,如果生成EXE文件的话。不占用内存空间。但运行EXE文件,使用此变量时。占用空间。结束后,释放内存空间}
mov eax,offset x
offset在编译器指令,是编译器运行时直接被 编译作 x的地址
例如: x地址为 21000b
指令:mov eax,offset x 编译后 debug查看就是 mov eax, 21000b
则 mov eax ,x
把这条指令 反汇编后,
会发现 变成了 mov eax,byte ptr [x]
指令:mov eax, word ptr [x],进行反汇编后是:mov eax, word ptr [x],
【以上都是在 数据段定义 X db ?】
【以下都是在数据段定义 X dw ?】
指令:mov eax,X在进行反汇编后是: mov eax, word ptr [X]
。
第二个:
or eax,eax指令与 or al,01001000是不同的》
or eax,eax指令是32位指令。此指令。不做实际运算。只影响标志位CF。一般用作查看 是否为真指令 。CF为1即为真,为0即为假。后面一般跟跳转指令。
[它不改变eax的值,但会修改标志位,所以后面常跟jz、js、jp等判断eax是否为0]
or al,01001000指令是16位指令。此指令参与运算 al=al or 01001000B。 一般用作某位 置 1!!
以上我我自己总结!!:lol |
|