吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5765|回复: 3
收起左侧

[其他转载] 汇编语言----指令系统整理总结二

[复制链接]
yuku8 发表于 2009-10-1 20:46
引摘于: http://abada.bokee.com/viewdiary.12686733.html

35、带进位的循环左移 RCL (rotate left through carry)

指令的汇编格式:RCL dst,cnt
指令的基本功能:RCL 对由dst指定的寄存器或存储器操作数,连同进位标志CF左循环移动,m所指定的次数,每左移一次,把操作数的最高位移入CF,而CF中原有内容移入操作数的最低位。
指定支持的寻址方式:目的操作数dst可以是除立即数外的任何寻址方式。移动次数(或位数)cnt=1时,1可以直接写在指令中,cnt〉1时,cnt必须放入CL寄存器中。
指令对标志位的影响:CF=移入的数值。
                      OF=1 当cnt=1时,移动后最高位的值未发生变化。
                      OF=0 当cnt=1时,移动后最高位的值发生变化。
                      SF、ZF、PF标志位不受影响。

36、带进位的循环右移 RCR (rotate right through carry)

指令的汇编格式:RCR dst,cnt
指令的基本功能:RCR 对由dst指定的寄存器或存储器操作数,连同进位标志CF右循环移动,m所指定的次数,每右移一次,把操作数的最高低位移入CF,而CF中原有内容移入操作数的最高位。
指令支持的寻址方式:目的操作数dst可以是除立即数外的任何寻址方式。移动次数(或位数)cnt=1时,1可以直接写入指令中,cnt〉1时,cnt必须放入CL寄存器中。
指令对标志位的影响:CF=移入的数值。
                      OF=1 当cnt=1时,操作数最高位的值未发生变化。
                      OF=0 当cnt=1时,操作数最高位的值发生变化。
                      SF、ZF、PF标志位不受影响。
[串处理指令]

一、设置方向标志指令

37、DF置零 CLD (clear direction flag)
      DF置一 STD (set direction flag)

指令的汇编格式:CLD
                  STD
指令的基本功能:CLD     DF=0
                  STD     DF=1
二、串处理指令

38、串传送 MOVSB / MOVSW (move string byte/word)

指令的汇编格式:MOVSB
                  MOVSW
指令的基本功能:(ES:DI)<-(DS:SI)
                  (SI)<-(SI)+/-1(字节)或+/-2(字)
                  (DI)<-(DI)+/-1(字节)或+/-2(字)
指令对条件码的影响:不影响条件码。
指令的特殊要求:源串必须在数据段中,目的串必须在附加段中,串处理指令隐含的寻址方式是SI和DI寄存器的间接寻址方式。源串允许使用段跨越前缀来指定段。

39、存串 STOSB / STOSW (stroe from string byte/word)

指令的汇编格式:STOSB
                  STOSW
指令的基本功能:(ES:DI)<-(AL)或(AX)
                  (DI)<-(DI)+/-1(字节)或+/-2(字)
指令对条件码的影响:不影响条件码。
指令的特殊要求:源串必须在数据段中,目的串必须在附加段中,串处理指令隐含的寻址方式是SI和DI寄存器的间接寻址方式。源串允许使用段跨越前缀来指定段。

40、取串LODSB / LODSW (load from string byte/word)

指令的汇编格式:LODSB
                  LODSW
指令的基本功能:(AL)或(AX)<-(DS:SI)
                  (SI)<-(SI)+/-1(字节)或+/-2(字)
指令对条件码的影响:不影响条件码。
指令的特殊要求:源串必须在数据段中,目的串必须在附加段中,串处理指令隐含的寻址方式是SI和DI寄存器的间接寻址方式。源串允许使用段跨越前缀来指定段。

41、串比较 CMPSB / CMPSW (compare string byte/word)

指令的汇编格式:CMPSB
                 CMPSW
指令的基本功能:(DS:SI)-(ES:DI) 根据比较结果设置条件码
                 (SI)<-(SI)+/-1(字节)或+/-2(字)
                 (DI)<-(DI)+/-1(字节)或+/-2(字)
指令对条件码的影响:SF=1 减法结果为负数(符号位为1)
                     SF=0 减法结果为正数(符号位为0)
                     ZF=1 减法结果为零
                     ZF=0 减法结果不为零
                     CF=1 二进制减法运算中最高有效位向高位有借位(被减数小于减数,不够减的情况)
                     CF=0 二进制减法运算中最高有效为向高位无借位(被减数〉=减数,够减的情况)
                     OF=1 两数符号相反(正数-负数,或负数-正数),而结果符号与减数相同。
                     OF=0 同符号数相减时,或不同符号数相减,其结果符号与减数不同。

42、串扫描 SCASB / SCASW (scan string byte / word)

指令的汇编格式:SCASB
                 SCASW
指令的基本功能:(AL)<-(ES:DI)或(AX)<-(ES:DI) 根据扫描比较的结果设置条件码。
                 (DI)<-(DI)+/-1(字节)或+/-2(字)
指令对条件码的影响:SF=1 结果为负数(符号位为1)
                     SF=0 结果为正数(符号位为0)
                     ZF=1 结果为零
                     ZF=0 结果不为零
                     CF=1 二进制减法运算中最高有效位向高位有借位(被减数小于减数,不够减的情况)
                     CF=0 二进制减法运算中最高有效为向高位无借位(被减数〉=减数,够减的情况)
                     OF=1 两数符号相反(正数-负数,或负数-正数),而结果符号与减数相同。
                     OF=0 同符号数相减时,或不同符号数相减,其结果符号与减数不同。

三、串重复前缀

43、重复执行串 REP         

指令的汇编格式:REP      (CX)=重复次数
指令的基本功能:① (CX)=0时,串指令执行完毕,否则执行② ~ ④
               ② (CX)←(CX)-1
               ③ 执行串指令(MOVS或STOS)
               ④ 重复执行①

44、相等/为零时重复执行串指令 REPE/REPZ

指令的汇编格式:REPE / REPZ      (CX)=比较/扫描的次数
指令的基本功能:① (CX)=0或ZF=0时,结束执行串指令,否则继续② ~ ④
               ② (CX)←(CX)-1
               ③ 执行串指令(CMPS或SCAS)
               ④ 重复执行①

45、不等/不为零时重复执行串指令 REPNE / PEPNZ

指令的汇编格式:REPNE / PEPNZ     (CX)=比较/扫描的次数
指令的基本功能:① (CX)=0或ZF=1,结束执行串指令,否则继续② ~ ④
               ② (CX)←(CX)-1
               ③ 执行串指令(CMPS或SCAS)
               ④ 重复执行①
[控制转移指令]

一、无条件转移指令

46、短转移 JMP SHORT label (short jump)

指令的汇编格式:JMP SHORT label
指令的基本功能:(IP)<-当前(IP)+8位位移量    8位位移量是汇编程序在汇编源程序时,根据目标地址和当前IP之间的距离自动生成的。
指令对条件码的影响:对标志位无影响。

47、近转移 JMP NEAR PTR label (near jump)

指令的汇编格式:直接转移 JMP label (direct jump)
                 寄存器间接转移 JMP reg (register indirect jump)
                 存储器间接转移 JMP WORD PTR OPR (memory indirect jump)
指令的基本功能:JMP label     (IP) <- OFFSET label = (IP)当前+16位位移量
                 JMP reg       (IP) <- (reg)
                 JMP WORD PTR OPR      (IP) <- (PA+1,PA)
指令支持的寻址方式:指令中的转向地址可以是直接寻址方式、寄存器寻址方式、寄存器间接寻址方式和存储器寻址方式。
指令对条件码的影响:对标志位无影响。

48、远转移 JMP FAR PTR label (for jump)

指令的汇编格式:JMP FAR PTR label
指令的基本功能:(IP)<-label的段内偏移地址
                 (CS)<-label所在段的段地址
指令支持的寻址方式:远转移的目的地址可以使用除立即寻址方式外的任何寻址方式来表示。
指令对条件码的影响:对标志位无影响。

二、条件转移指令

指令的汇编格式及功能
根据条件码的值转移:
49、JZ(JE) OPR     ZF=1
50、JNZ(JNE) OPR   ZF=0
51、JS OPR         SF=1
52、JNS OPR        SF=0
53、JO OPR         OF=1
54、JNO OPR        OF=0
55、JP OPR         PF=1
56、JNP OPR        PF=0
57、JC OPR         CF=1
58、JNC OPR        CF=0

比较两个无符号数,根据比较的结果转移
59、JB(JNAE,JC) OPR   CF=1         被减数小于减数则转移
60、JNB(JAE,JNC) OPR CF=0         被减数大于或等于减数则转移
61、JBE(JNA) OPR      CF或ZF=1     被减数小于或等于减数则转移
62、JNBE(JA) OPR      CF或ZF=0     被减数大于减数则转移

比较两个带符号数,根据比较结果转移
63、JL/JNGE OPR       SF异或OF=1           被减数小于减数则转移   
64、JNL/JGE           SF异或OF=0           被减数不小于减数则转移
65、JLE/JNE           (SF异或OF)与ZF=1     被减数不大于减数则转移
66、JNLE/JG           (SF异或OF)与ZF=0     被减数大于减数则转移

根据CX寄存器的值转移
67、JCXZ              (CX)=0               CX内容为零 则转移

指令的特殊要求:所有条件转移指令都是短转移指令,转移的目标地址必须在当前IP地址的-128至+127字节范围之内,因此条件转移指令是2字节指令。

三、循环指令

68、循环 LOOP (loop)
指令的汇编格式:LOOP label
指令的基本功能:① (CX)←(CX)-1
          ② 若(CX)≠0,则(IP)←(IP)当前+位移量,否则循环结束。
指令的特殊要求:循环指令都是短转移格式的指令,也就是说,位移量是用8位带符号数来表示的,转向地址在相对于当前IP值的-128 ~ +127字节范围之内。

69、为零/相等时循环 LOOPZ/LOOPE (loop while nonzero or equal)
指令的汇编格式:LOOPNZ/LOOPNE label
指令的基本功能:① (CX)←(CX)-1
          ② 若ZF=1且(CX)≠0,则(IP)←(IP)当前+位移量,否则循环结束。
指令的特殊要求:循环指令都是短转移格式的指令,也就是说,位移量是用8位带符号数来表示的,转向地址在相对于当前IP值的-128 ~ +127字节范围之内。

70、不为零/不相等时循环 LOOPNZ/LOOPNE (loop while nonzero or not equal)
指令的汇编格式:LOOPNZ/LOOPNE label
指令的基本功能:① (CX)←(CX)-1
          ② 若ZF=0且(CX)≠0,则(IP)←(IP)当前+位移量,否则循环结束。
指令的特殊要求:循环指令都是短转移格式的指令,也就是说,位移量是用8位带符号数来表示的,转向地址在相对于当前IP值的-128 ~ +127字节范围之内。

四、子程序调用

71、段内直接近调用 CALL SUBROUT
指令的基本功能:(SP)<-(SP)-2
                 ((SP)+1,(sp))<-(IP)
                 (IP)<-(IP)+16位位移量
     段内间接近调用 CALL DESTIN
指令的基本功能:(SP)<-(SP)-2
                 ((SP)+1,(SP))<-(IP)
                 (IP)<-(EA)

72、段间直接调用 CALL FAR PTR SUBROUT
指令的基本功能:(SP)<-(SP)-2,((SP))<-(CS)当前
                 (SP)<-(SP)-2,((SP))<-(IP)当前
                 (IP)<-偏移地址(在指令的第2、3个字节)
                 (CS)<-段地址(在指令的第4、5个字节)

五、返回指令

73、段内返回(近返回) RET
指令的基本功能:(IP)<-((SP)+1,(SP))
                 (SP)<-(SP)+2

     段间返回(远返回) RET
指令的基本功能:(IP)<-((SP)),(SP)<-(SP)+2
                 (CS)<-((SP)),(SP)<-(SP)+2

     带立即数返回 RET N
执行操作:① 返回地址出栈(操作同段内或段间返回)
     ② 修改堆栈指针:(SP) ← (SP)+N

六、中断及中断返回指令

74、INT n 中断指令(interrupt),n为中断类型号
  执行操作:① 入栈保存FLAGS:(SP) ← (SP)-2,((SP)) ← (FLAGS)
       ② 入栈保存返回地址:(SP) ← (SP)-2,((SP)) ← (CS)
                  (SP) ← (SP)-2,((SP)) ← (IP)
       ③ 转中断处理程序:(IP) ← (n×4)
                 (CS) ← (n×4+2)

75、IRET 中断返回指令(return from interrupt)
  执行操作:① 返回地址出栈:(IP) ← ((SP)),(SP) ← (SP)+2
                (CS) ← ((SP)),(SP) ← (SP)+2
       ② FLAGS出栈:(FLAGS) ← ((SP)),(SP) ← (SP)+2

76、INTO 溢出则中断(中断类型为4)
  执行操作:若OF=1(有溢出),则:
       ① 入栈保存FLAGS:(SP) ← (SP)-2,((SP)) ← (FLAGS)
       ② 入栈保存返回地址:(SP) ← (SP)-2,((SP)) ← (CS)
                  (SP) ← (SP)-2,((SP)) ← (IP)
       ③ 转中断处理程序:(IP) ← (4×4)= (10H)
                 (CS) ← (4×4+2)= (12H)

                                                                                              完.
                                                                                         2006年9月20日 by 程序员之路

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

头像被屏蔽
languageme 发表于 2011-12-12 12:48
提示: 作者被禁止或删除 内容自动屏蔽
lxj520dyn 发表于 2011-12-12 12:51
lyw4682 发表于 2013-2-21 11:22
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-9-21 19:45

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表