汇编语言----指令系统整理总结二
引摘于: http://abada.bokee.com/viewdiary.12686733.html35、带进位的循环左移 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 程序员之路 楼主35之前的有么也弄上来吧 支持!!!!!!!!1
页:
[1]