比较和条件跳转
CMP
- 比较两个操作数,相当于SUB指令,但是相减的结果不保存到第一个操作数,而是根据相减的结果来改变零标志位。当两个操作数相等时,零标志位Z置为1。
- 两个操作数不相等时,零标志位Z被置为0,而且如果第一个操作数大于第二个操作数,符号位S被置为0;如果第一个操作数小于第二个操作数,符号位S被置为1。
TEST
- 两个操作数进行与操作,结果不保存,但是会改变标志位的结果。
- 可以用这个指令来判断eax是否等于0。
JUMPS
- 所有的跳转指令都会指向程序将会跳转的地址
JMP跳转
- 无条件跳转,总是跳转到指定的地址
JE JZ 结果不为零跳转
- 两个跳转指令是等价的,书写不同而已,零标志位Z被置为1时跳转
JNE JNZ 结果为零跳转
- 与JE JZ相反,零标志位为0时,跳转
JS 结果为负跳转
- 当比较的结果为负时跳转,即符号位S为1时跳转
JNS 结果不为负跳转
- 与JS相反,当符号位S为0时,跳转
JP JPE 结果中1的个数为偶数跳转
- 比较的结果中,1的个数要是偶数,奇偶标志P会被置为1,则跳转
JNP JNPE 结果中1的个数为奇数跳转
- 与JP JPE相反,当比较的结果中1的个数为奇数,奇偶标志位P被置为0时,跳转。
JO 结果溢出跳转
- 当发生溢出的时候,溢出标志O被置为1,跳转
JNO 结果没有溢出跳转
- 与JO相反,当溢出标志O为0时,跳转,即没有发生溢出时。
JB JNAE 小于跳转(无符号数)
- 第一个操作数小于第二个操作数时跳转,即进位借位标志位C被置为1
JNB JAE 大于跳转(无符号数)
- 与JB JNAE相反,当借位进位标志位为0时跳转,
JBE JNA 小于等于跳转(无符号数)
- 小于或者等于的时候跳转,需要判断两个标志位,当进位借位标志C被置为1或者零标志Z被置为1时,跳转。
JNBE JA 大于跳转(无符号数)
- 与JBE相反,当进位借位标志C和零标志位Z都为0时,才会跳转。
JL JNGE 小于跳转(有符号数)
- 小于的时候跳转,与JB不同,这个指令根据符号标志位S来决定是否跳转
- 溢出标志O与符号标志S不同时,跳转