轻松学汇编-初学者必读
汇编基础知识④算术运算指令,逻辑运算指令,移位指令
一. 算数运算指令
1加减法运算指令:ADD,ADC,INC,SUB,SBB,DEC,NEG,CMP
1-1.ADD(add)加法
受影响的标志位:AF、CF、OF、PF、SF和ZF
1-2.ADC(add with carry)带进位加法
将该指令执行前的CF值加至目的操作数,受影响的标志位:AF、CF、OF、PF、SF和ZF
举例:01 ADC eax,ecx
http://www.unpack.cn/attachments/month_0910/20091024_6a91045a24983f0007e1sGqUExvwXamM.jpg
http://www.unpack.cn/attachments/month_0910/20091024_7e3a13d8cf69e9d2dc31ZwV8ozq2DjEJ.jpg
1-3.INC(increment)加1
受影响的标志位:AF、OF、PF、SF和ZF,不影响CF,指令的功能是把操作数的值加1。
1-4.SUB(subtract)减法
受影响的标志位:AF、CF、OF、PF、SF和ZF
1-5.SBB(subtract withborrow)带借位减法
减去该指令执行前CF值,受影响的标志位:AF、CF、OF、PF、SF和ZF
举例:01 SBB eax,ecx
Eax=20 Ecx=10
http://www.unpack.cn/attachments/month_0910/20091024_635be8f0fff4e0301648yAMLfjEwC8E2.jpg
http://www.unpack.cn/attachments/month_0910/20091024_39963a7894331d5d0a7dEXf9qt9Gn3aR.jpg
http://www.unpack.cn/attachments/month_0910/20091024_8fb76034564460669e655wSY6J5vZsza.jpg
http://www.unpack.cn/attachments/month_0910/20091024_07417c668b3210cd79886SFzT0QViEb3.jpg
1-6.DEC(Decrement)减1
受影响的标志位:AF、OF、PF、SF和ZF,不影响CF,指令的功能是把操作数的值减去1。
1-7.NEG(Negate)求补
受影响的标志位:AF、CF、OF、PF、SF和ZF,指令的功能:操作数=0-操作数,即改变操作数的正负号
1-8.CMP(Compare)比较
2 乘除法运算指令:MUL,IMUL,DIV,IDIV
2-1.MUL(Unsigned Multiple)无符号数乘法
和 8086 功能用法一样,即指令中只给出一个操作,被乘
数已默认,如果指令给出的操作数是 32 位的话,被乘数默认为 EAX,那么乘积将存放在
EDX:EAX 中,其中 EDX 存放高 32 位,EAX 存放低 32 位,如果此时 EDX=0,即高 32
位为 0 的话,那么 OF=0,CF=0,否则被置 1。如果指令给出的操数作是16 位的话,被乘数默认为 AX 那么乘积将放在 DX:AX 中,其中 DX 中将存放高 16 位,AX 中存放低 16
位。如果指令给出的操作数是8 位的话,被乘数默认为 AL,那么乘积将放在 AX,AH 中存
放高 8 位,AL中存放低 8 位。
举例:01 mul ebx
http://www.unpack.cn/attachments/month_0910/20091024_55ac8f1d607dccfd171doaizmVMYxhJL.jpg
http://www.unpack.cn/attachments/month_0910/20091024_3b08d604caa4e35a0877NZn7RMoDVbif.jpg
2-2.IMUL(Signed Multiple)带符号数乘法
举例:01.IMUL EAX,EBX
http://www.unpack.cn/attachments/month_0910/20091024_92c034bc139af3c740f7UoMiimV7nXYV.jpg
http://www.unpack.cn/attachments/month_0910/20091024_ef1685c3899a6635bd7dRyfoPvvIQwpX.jpg
02.IMUL EAX,EBX,3
http://www.unpack.cn/attachments/month_0910/20091024_23deaa07b27130713afdgh1ttPYdV4rd.jpg
http://www.unpack.cn/attachments/month_0910/20091024_b5d8eed3094c7d861620t2PNWf1tQoTZ.jpg
2-3.DIV(Unsigned divide)无符号数除法
和 8086 一样,指令给出一个操作数,被除数已默认。如果指令中给出的操作数为 32, 那么被除数将是EDX: EAX,最终的商将存放在EAX,余数将存放在 EDX 中。如果指令给出操作数为 16 位,那么被除数为 EAX,最终得到的商放在 AX,余数放在EAX 的高16位。如果指令中给出的操作数为8 位,那么被除数是16 位,最终得到的商将放在 AL中,余数放在 AH 中。
举例:01. DIV ebx
http://www.unpack.cn/attachments/month_0910/20091024_267accab1b95a4e8c786aqwPGWuISbAm.jpg
http://www.unpack.cn/attachments/month_0910/20091024_a84f190ca4212549f41dsULDyR1gPkB1.jpg
http://www.unpack.cn/attachments/month_0910/20091024_eef1a8d96dbc21af2cb3b8UGSOdXSMJT.jpg
2-4.IDIV(Signed divide)带符号数除法
3 符号扩展指令:CBW,CWD
3-1.CBW(Convert byte to word)字节转换为字
3-2.CWD(Convert word to doubule word)字转换双字
3-3.CWDE
将AX中16位有符号的符号位扩展到EAX的高16位中,即把AX的16位有符号数扩展到32位后,送EAX
举例:01.CWDE
http://www.unpack.cn/attachments/month_0910/20091024_eeffa50bb446bd9ee8f8EGPMH7EdluVM.jpg
http://www.unpack.cn/attachments/month_0910/20091024_648c1267132c2c4d51d1rERiidTLlkfD.jpg
3-4.CDQ
将Eax中32位有符号数扩展到EDX;EAX寄存器对中,使之成为64位有符号数,即将EAX中的符号位扩展到EDX
举例:01.CDQ
http://www.unpack.cn/attachments/month_0910/20091024_67c2d6cc142f4f18b617g78QbXFYVBQo.jpg
http://www.unpack.cn/attachments/month_0910/20091024_6f2d514c967be26991795NjEEBUzgS4w.jpg
二. 逻辑运算指令
AND,OR,NOT,XOR,TEST
1.ADD(and)逻辑与
2.OR(or)逻辑或
3.NOT(not)逻辑非
4.XOR(exclusive or)异或
5.TEST(test)测试
三. 移位指令
SHL,SHR,SAL,SAR,ROL,ROR,RCL,RCR
1.SHL(shift logical left)逻辑左移
2.SHR(shift logical right)逻辑右移
3.SAL(shift arithmetic left)算数左移
4.SAR(shift arithmetic right)算数右移
说明:SAL, SHL相当于乘法;SAR,SHR 相当于除法 (2的关系)
5.ROL(Rotate left)循环左移
6.ROR(Rotate right)循环右移
7.RCL(Rotate left through cazzy)带进位算数左移
8.RCR(Rotate right thourgh cazzy)带进位循环右移
感觉图文并茂,很适合新手,所以转过来了。
谁能告诉我,我做的对吗?/:013
[ 本帖最后由 月无影 于 2009-11-10 08:41 编辑 ] 很好啊 谢谢/:good :loveliness: 这个很好,图文教程对新手来说易学.. 不错
支持你 复制下来自己看了。感谢哦 图文并茂. 收藏,学习。。 基础知识,谢谢 好东西谢谢您的分析. 初学汇编,感谢。。。。