首页
社区
课程
招聘
[分享]跳转指令大全和其他一些指令集合
发表于: 2018-4-25 07:05 2598

[分享]跳转指令大全和其他一些指令集合

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:EDI

  • DF=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实模式到保护模式的一些指令集合汇总


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//