|  | 
 
 
 楼主|
发表于 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
 | 
 |