支持两个 64 位数字的全 128(8字, oct word) 位乘积以及整数除法的指令, 可以看到除法是分步对高低64位操作的
指令 | 效果 | 描述
-|-|-
\(imulq \quad S\)| \(R[\%rdx]:R[\%rax] \leftarrow S \times R[\%rax]\) | 有符号全乘法
\(mulq \quad S\)| \(R[\%rdx]:R[\%rax] \leftarrow S \times R[\%rax]\) | 无符号全乘法
\(clto \quad S\)| \(R[\%rdx]:R[\%rax] \leftarrow 符号扩展R[\%rax]\) | 转换为8字
\(idivq \quad S\)| \(R[\%rdx] \leftarrow R[\%rdx]:R[\%rax] mod S \\ R[\%rdx] \leftarrow R[\%rdx]:R[\%rax] \div S\) | 有符号除法法
\(divq \quad S\)| \(R[\%rdx] \leftarrow R[\%rdx]:R[\%rax] mod S \\ R[\%rdx] \leftarrow R[\%rdx]:R[\%rax] \div S\) | 无符号除法法
\(CF\): 进位标志。最近的操作使最高位产生了进位。可用来检查无符号操作的溢出。
\(ZF\): 零标志。最近的操作得出的结果为 0.
\(SF\): 符号标志。最近的操作得到的结果为负数
\(OF\): 溢出标志。最近的操作导致一个补码溢出(正溢出或者负溢出)
条件码会发生改变的操作
比较和测试指令这两个系列指令不修改任何寄存器的值,只设置条件码
指令 | 效果 | 描述
-|-|-
\(CMP \quad S_1, S_2\) | \(S_2-S_1\) | 比较
\(TEST \quad S_1, S_2\) | \(S_1 \& S_2\) | 测试
\(sete \quad D\) \(setz\) \(D \leftarrow ZF\) 相等/零
\(setne \quad D\) \(setnz\) \(D \leftarrow \sim ZF\) 不等/非零
\(sets \quad D\) \(D \leftarrow SF\) 负数
\(setns \quad D\) \(D \leftarrow \sim SF\) 负数
\(setg \quad D\) \(setnle\) \(D \leftarrow \sim(SF \land OF) \& \sim ZF\) 大于(有符号>)
\(setge \quad D\) \(setnl\) \(D \leftarrow \sim(SF \land OF)\) 大于等于(有符号 >=)
\(setl \quad D\) \(setnge\) \(D \leftarrow SF \land OF\) 小于(有符号<)
\(setle \quad D\) \(setng\) \(D \leftarrow \sim(SF \land OF) \mid ZF\) 小于等于(有符号 <=)
\(seta \quad D\) \(setnbe\) \(D \leftarrow \sim CF \& \sim ZF\) 大于(无符号>)
\(setae \quad D\) \(setnb\) \(D \leftarrow \sim CF\) 大于等于(无符号>=)
\(setb \quad D\) \(setnae\) \(D \leftarrow CF\) 小于(无符号<)
\(setbe \quad D\) \(setna\) \(D \leftarrow CF \mid ZF\) 小于等于(无符号<=)
跳转指令