-
-
[分享]跳转指令大全和其他一些指令集合
-
发表于: 2018-4-25 07:05 2598
-
neg 用0减去指令中指定操作数
neg al neg dx neg word [label_a]
cbw 将寄存器AL中的有符号数扩展到整个AX
cwd 将寄存器AX中的有符号数扩展到DX:AX
idiv 有符号数除法指令(格式与div相同,除了它是专门用于计算有符号数的)
mov ax,0x0400 mov bl,0xf0 idiv bl ;执行后,AL中的内容为0xc0,即十进制数-64
jns 标号 如果符合位SF=0则转到标号处执行(相对转移指令)
js 标号 如果符号位SF=1则转到标号处执行(小队转移指令)
jo OF=1则转移
jno OF=0则转移
jc CF=1 则转移
jnc CF=0则转移
jp PF=1则转移
jnp PF=0则转移
比较结果 | 英文描述 | 指令 | 相关标志寄存器的状态 |
---|---|---|---|
等于 | Equal | je | ZF=1 |
不等于 | Not Equal | jne | ZF=0 |
大于 | Greater | jg | 适用于有符号比较,ZF=0 且 SF=OF |
大于等于 | Greater or Equal | jge | SF=OF |
不大于 | Not Greater | jng | ZF=1 或 SF!= OF |
不大于等于 | Not Greater or Equal | jnge | SF!=OF |
小于 | Less | jl | SF!=OF |
小于等于 | Less or Equal | jle | ZF=1 且SF!=OF |
不小于 | Not Less | jnl | SF=OF |
不小于等于 | Not Less or Equal | jnle | ZF=0且SF=OF |
高于 | Above | ja | CF=0 ZF=0 |
高于等于 | Above or Equal | jae | CF=0 |
不高于 | Not Above | jna | CF=1或ZF=1 |
不高于等于 | Not Above or Equal | jnae | CF=1 |
低于 | Below | jb | CF=1 |
低于等于 | Below or Equal | jbe | CF=1 或 ZF=1 |
不低于 | Not Below | jnb | CF=0 |
不低于等于 | Not Below or Equal | jnbe | CF=0 且 ZF=0 |
检验为偶 | Parity Even | jpe | PF=1 |
检验为奇 | Parity Odd | jpo | PF=0 |
jcxz 标号 当cx=0时转移
ror bx,4 循环右移指令
每向右移动一次,移出的位送入CF,也送进左边的位
rol ax,4 循环左移指令
hlt 使CPU进入低耗状态
使处理器停止执行指令,并处于停机状态,这将降低处理器消耗.处于停机状态的处理器可以被外部中断唤醒并恢复执行,而且会继续执行hlt后面的指令
not r/m8 not r/m16 按位取反
test r/m8,r8/imm8 test r/m16,r16/imm16 和and相同,只是运算结果被丢弃
bswap
指令作用是:32位寄存器内的字节次序变反。 比如:(EAX)=9668 8368H,执行指令: BSWAP EAX ,则(EAX)=6883 6896H。
cmovcc
cmovz ax,cx ;为零则传送 cmovnz eax,[0x2000] ;不为零则传送 cmove ebx,ecx ;相等则传送 cmovng cx,[0x1000] ;不大于则传送 cmovl edx,ecx ;小于则传送
sgdt m 用于将GDTR寄存器的基地址边界信息保存在指定的内存位置
movzx
带0扩展传送
movzx r16,r/m8 movzx r32,r/m8 movzx r32,r/m16
movsx
带符号扩展传送
movsx r16,r/m8 movsx r32,r/m8 movsx r32,r/m16
cmps指令 两个字符串比较
- 源字符首地址
DS:ESI 目标字符串首地址
ES:EDIDF=0 正向比较
- DF=1 反向比较
cmpsb ;字节比较 cmpsw ;字比较 cmpsd ;双字比较
针对cmps指令,应当使用repe 和 prene ,前者的意思是,若相等则重复,后者的意思是,若不相等则重复
重复前缀 | 终止条件一 | 终止条件2 |
---|---|---|
rep | (E)CX=0 | 无 |
repe | (E)CX=0 | ZF=0 |
prene | (E)CX=0 | ZF=1 |
ltr r/m16 加载任务寄存器TR
处理器用该选择子访问GDT中对应的TSS描述符,将段界限和段基地址将在到任务寄存器TR的描述符高速缓冲器部分.同时处理器将该TSS描述符中的B位置"1",也就是标志忙,但并不执行任务切换
lldt r/m16
首先检查描述符的有效性.
处理器用该选择子访问GDT中对应的LDT描述符,将段界限和段基地址加载到LDTR的描述符高速缓存器部分.CS,SS,DS,ES,FS和GS寄存器不受该指令影响
arpl r/m16,r16
比较两个选择子的RPL字段,处理器检查目的操作数的RPL字段,如果它在数值上少于
源操作数的RPL字段,则设置ZF标志,并增加目的操作数RPL字段的值,使之和源操作数RPL字段值相同.否则,ZF
标志清0.
bts(Bit Test and Set) 测试位串中的某比特,用该比特的值设置EFLAGS寄存器的CF位,然后将该比特置1
bts r/m16,r16 bts r/m32,r32
如果目的操作数是通用寄存器,那么,指定的位串就是该寄存器的内容.在
这种情况下,根据操作数的长度,处理器先求得源操作数处于16或者32的余数
并把它作为要测试的比特索引.然后从位串中取出该比特,传送的EFLAGS寄存器的CF位.
最后,将该比特置位如果目的操作数是一个内存地址,那么它给出的微创在内存中的起始地址
源操作数是指在内存中的位.然后取出该位,传送到EFLAGS寄存器CF位.最后,将原处的该比特置位
指令 | 英文名称 | 基本功能 |
---|---|---|
bts | Bit Test and Set | 将指定位置的比特传送到CF标志位,然后将其置位 |
btr | Bit Test and Reset | 将指定位置的比特传送到CF标志位,然后将其复位(清0) |
btc | Bit Test and Complement | 将指定位置的比特传送到CF标志位,然后将其取反 |
bt | Bit Test | 将指定位置的比特传送到CF标志位 |
- ZF标志位不受影响.对CF,SF,AF和ZF的影响未定义
bound(Check Array Index Against Bounds)
用于检查数组的索引是否在边界之内
格式
bound r16,m16 bound r32,m32
具有两个参数: 目的操作数是寄存器,包含了数组索引;源操作数必须指向内存位置,在那里包含了两个成对出现的字或者双字,分别是数组索引的上限和下限.如果指向bound指令时,数组索引小于下标的下限,或者大于下标的上限,则产生异常
ud2 (Undefined Instruction)
只有操作码,没有操作数,机器代码为0F 0B
执行该指令时,会引发一个无效操作码异常.该指令没有别的用处,典型用于软件测试.尽管异常是该指令故意引发的,但是,在转入异常处理程序时,压入栈中的指令指针是指向该指令的,而非下一条指令
--------- 这是对从8086实模式到保护模式的一些指令集合汇总
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!