易语言教程_易语言源码_易语言视频教程_易语言论坛

 找回密码
 点击注册

Vip新手入门区
新手学习指南  学员作品展示 Vip课程总纲  Vip绝密课程系列

Vip相关下载区
Vip模块下载   Vip模块绑定   Vip模块例子 魔鬼插件下载  魔鬼插件例子  教程工具下载

Vip论坛服务区
教程问题提问区   模块问题提问区 技术交流区   魔鬼插件建议   忘记密码找回

VIP会员办理QQ: 8643245   
【请先加好友,然后到好友列表双击联系客服,办理VIP会员。】
【基础篇】易语言辅助入门基础教程
VIP模块办理QQ: 7189694 办理正版魔鬼作坊VIP模块 【基础篇】OD与CE入门基础教程
办理【终身VIP会员】“秒杀价” 仅需 RMB278.00元… 【基础篇】零基础绝密汇编语言入门课程 (共26课已完成)…
办理VIP详情…猛击这里查看详情 【基础篇】VIP辅助入门基础教程-新手必学 已发布10课 ……
VIP教程免费试看章节…猛击下载 【第1款】制作“辅助挂”教程目录查看(共107+16_x64下更新课已完成)…
亲爱的VIP学员,请到此写下你学习的感受与发布作品截图… 【第2款】制作“任务挂”教程目录查看(共77+1_x64下更新课已完成)…
卍解吧!不用bp send类封包断点找CALL的各种通杀思路 【第3款】驱动过保护技术课程(共38课已完成)…
【绝密教程】VIP绝密教程系列---注意:随时会更新! 【第4款】VIP邪恶二叉树辅助课程 (共31+17_x64下更新课已完成)…
【精品第13款】3D射击游戏与页游透视 智辅课程 已完成17课… 【第5款】零基础易语言按键辅助教程 (30课已完成)…
【精品第14款】变态功能辅助是如何炼成的 已完成36课… 【第6款】从零开始学习封包辅助技术教程(20课已完成) …
【精品第15款】DNF商业变态辅助的修炼之路 已完成27课… 【第7款】大杀特杀分析来源与CALL吸血鬼课程 (56课已完成)
【精品第16款】中控台多线程多开自动化商业辅助课程 已完成66课… 【第8款】完全零基础网页辅助课程(40课已完成)
【全新精品第17款】检测原理与过游戏内存检测技术课程 已发布9课… 【第9款】自动登录与操控LUA技术课程 (共46+8_x64下更新课已完成)…
【全新精品第18款】手游全自动化任务脚本辅助课程 已发布25课…… 【第10款】网页辅助封包脱机进阶课程 已完成30课…
【全新精品第19款】D3D方框骨骼透视与自瞄辅助课程进阶篇 已发布34课…… 【第11款】VC++ Lua脚本辅助课程 已完成112课…
【全新精品第20款】 X64模拟器吃鸡游戏方框透视自瞄辅助课程 发布中... 【第12款】网游脱机封包智辅课程 已完成35课…
查看: 2456|回复: 0

游戏辅助工具开发教程-从入门到精通之A2_6篇

[复制链接]

33

主题

12

回帖

56

积分

编程入门

Rank: 1

魔鬼币
7621
发表于 2010-11-17 10:46:46 | 显示全部楼层 |阅读模式
作者:Figo

本节承接上节继续讲汇编中的指令。

一、标志位操作指令

1、进位CF标志操作指令
清零标志位CLC:CF<-0
置位标志位STC:CF<-1
标志位取反CMC:CF<-NOT CF
2、方向位DF操作指令
清零方向位CLD:DF<-0
置位方向位STD:DF<-1
3、中断允许位IF操作指令
清零CLI:IF<-0
置位STI:IF<-1
4、取标志位操作指令
LAHF:AH<-EFlags低8位
SAHF:EFlags低八位<-AH
5、标志位堆栈操作指令
PUSHF/PUSHFD:16bit/32bit标志位进栈
POPF/POPFD:16bit/32bit标志位出栈

二、算术运算指令
1、加法指令
1)、普通加法指令ADD
ADD  reg/mem,reg/mem/imm
受影响标志位:AF/CF/OF/PF/SF/ZF
2)、带进位的加法ADC
ADC  reg/mem,reg/mem/imm
受影响标志位:AF/CF/OF/PF/SF/ZF
该指令和1)中唯一不同的是除了执行1)中加法外还要加上CF。
3)、加1指令INC
INC  reg/mem
受影响标志位:AF/OF/PF/SF/ZF
4)、交换加法指令XADD
XADD  reg/mem,reg
该指令首先交换两个操作数的值,然再做加法,相当于以下两条指令:
XCHG  reg/mem,reg
ADD  reg.mem,reg
2、减法指令[和加法指令相反]
1)、普通减法SUB
2)、带借位的减法SBB
除了1)中减法还有减去CF
3)、减1指令DEC
4)、求补指令NEG
NEG  reg/mem
受影响标志位:AF/CF/OF/PF/SF/ZF
执行结果:操作数=0-操作数
3、乘法指令
分为带符号乘法和无符号乘法,区别在于:数据的最高位是作为符号还是数值参与运算。
1)、无符号乘法MUL
MUL  reg/mem
受影响标志位:CF/OF
我们知道乘法要有乘数和被乘数,指令中只有一个操作数,所以我们必须知道第二个操作数在哪里。Intel处理的方式是,被乘数提前存在EAX中,然后与给出的乘数相乘,结果放在规定的寄存器中:

乘数位数 隐含的被乘数 乘积存放位置[高-低] 举例
8 AL AX MUL  CL
16 AX DX-AX NUL  CX
32 EAX EDX-EAX MUL  ECX

2)、有符号乘法IMUL
IMUL  reg/mem
受影响标志位:CF/OF
其操作数都作为有符号数相乘。
4、除法指令
1)无符号除法
DIV  reg/mem
不影响标志位
被除数默认存放规则如下:

除数位数 隐含的被除数 商 余数
8 AX AL AH
16 DX-AX AX DX
32 EDX-EAX EAX EDX

2)有符号除法
IDIV  reg/mem
受影响标志位:AF/CF/OF/PF/SF/ZF

三、逻辑运算指令
1、逻辑与AND指令
AND  reg/mem,reg/mem/imm
受影响的标志位:CF(0)/OF(0)/SF/PF/ZF
执行过程:源操作数和目的操作数进行逻辑与运算,结果存放在目的操作数。
2、逻辑或OR指令
OR  reg/mem,reg/mem/imm
受影响的标志位:CF(0)/OF(0)/SF/PF/ZF
执行过程:源操作数和目的操作数进行逻辑或运算,结果存放在目的操作数。
3、逻辑非NOT指令
NOT  reg/mem
受影响的标志位:无
执行过程:把操作数按位取反。
4、逻辑异与XOR指令
XOR  reg/mem,reg/mem/imm
受影响的标志位:CF(0)/OF(0)/SF/PF/ZF
执行过程:源操作数和目的操作数进行逻辑异与运算,结果存放在目的操作数。
异或就是两数相同则结果为0,反之为1。
5、测试指令TEST
TEST  reg/mem,reg/mem/imm
受影响的标志位:SF/PF/ZF
test类似and指令,但只是逻辑与进行测试,根据结果修改标志位,却不改变操作数的值。

四、跳转指令
1、无条件跳转指令
JUMP  reg/mem/imm
执行结果是跳转到指定地址,然后继续执行代码。按照Intel指令手册上的说法,jump一共有4中不同的跳法,这比起跳大神的神棍的跳法可少多了:
1)、Near Jump
这种跳法为啥叫near呢,因为它跳来跳去都是在一个代码段跳,所以又称作段内转移。这就好比你遛狗,总是不出你的县城,这就叫near遛:)
2)、Short Jump
Short Jump是Near Jump的一种,但是比Near还有Near,它跳转的范围是[-128,127]。这时候你可能只是在你的村子溜溜狗而已,太Short了。
3)、Far Jump
一看Far就是那么有气势,此时跳转的范围已经扩大到其他段,你连其他段都能跳,本段当然更可以了,但是要注意,此时你可以跳转到的目标代码的特权级别必须和当前代码相同:如果你是用户权限,你跳转到系统权限的代码就会出错。这时候你已经厌倦在小县城遛狗了,终于,你鼓起勇气,决定去丈母娘的县城遛狗╮(╯_╰)╭。
4)、Task Switch
这个跳转一下就从你当前任务的代码到别的任务里面执行代码了,可以说是跳的最远的。
2、条件跳转指令
顾名思义,得依据条件来跳转,在这里,条件指的是标志寄存器的一个或多个标志位,如果满足条件就跳转否则继续执行跳转指令下面的代码。在介绍指令的时候,首先说下助记符中字母的含义:
E:Equal[相等]
A:Above[大于]
B:Below[小于]
G:Greater Than[大于]
L:Less Than[小于]
N:Not[不]
条件跳转大体上分为2类:
直接标志位测试

助记符 测试条件 跳转条件
JC CF=1 有进位
JNC CF=0 无进位
JZ/JE ZF=1 为0或相等
JNZ/JNE ZF=0 不为0或不等
JS SF=1 负数
JNS SF=0 正数
JO OF=1 溢出
JNO OF=0 无溢出
JP/JPE PF=1 偶数
JNP/JPO PF=0 奇数

间接标志位测试

类别 助记符 测试条件 跳转条件
无符号数 JA/JNBE
JAE/JNB
JB/JNAE
JBE/JNA
CF=0且ZF=0
CF=0
CF=1
CF=1或ZF=1
大于/大于等于
大于等于
小于/小于等于
小于等于

有符号数 JG/JNLE
JGE/JNL
JL/JNGE
JLE/JNG
ZF=0且SF=OF
SF=OF
SF!=OF
SF!=OF或ZF=1
大于/大于等于
大于等于
小于/小于等于
小于等于


以上是根据Intel指令手册(3-542 vol.2A)整理,有些教材的跳转条件是错误的。

五、其他指令
本教程不可能把所有指令都介绍完整,有些指令需要在实践的过程中自己查阅手册,学习一门技能从来都不是一蹴而就的。
1、nop指令
nop是空指令,就是占位,除此没有任何作用。
2、call指令
call  reg/mem/imm
call指令执行的过程是,首先把当前EIP或CS加EIP压入堆栈,然后跳转到call后操作数指定地址执行代码。手册里介绍了四种跳转,这里只讲下Near Call和Far Call。前者call呼叫的函数在同一代码段,此时只需把EIP压栈即可;而后者call呼叫的是不同段,需要把当前段的选择子和EIP均压入栈。
3、ret/retn/retf
ret  reg/mem/imm[可选]
retn是近返回;retf是远返回。

至此汇编语言的基本内容就介绍完了。
您需要登录后才可以回帖 登录 | 点击注册

本版积分规则

魔鬼作坊|易语言教程|易语言源码|易语言论坛|易语言视频教程| 论坛导航|免责申明|手机版||网站地图
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表魔鬼作坊立场!
任何人不得以任何方式翻录、盗版或出售本站视频,一经发现我们将追究其相关责任!
我们一直在努力成为最好的编程论坛!
Copyright© 2010-2019 All Right Reserved.
快速回复 返回顶部 返回列表