如何汇编没有有符号和无符号的减法指令?

时间:2012-10-29 18:49:44

标签: assembly signed unsigned-integer

我正在为它制作虚拟机和C编译器。我没有得到的是大多数指令集有IMUL和IDIV但不是ISUB和IADD。由于sub通常是unsigned sub,我怎么能在x86中做一些事情

MOV EAX,1
MOV EDX,3
SUB EAX,EDX,EAX

并获得-2?

2 个答案:

答案 0 :(得分:5)

每个指令只有一个,因为减法和加法会产生相同的结果,无论参数是有符号还是无符号。

答案 1 :(得分:5)

有符号加法总是产生与无符号加法相同的输出位模式 - 只有它们的解释是不同的 - 因此不需要为这两种情况单独指令。减法也是如此。

一般的ADD和SUB指令设置了两组条件标志,以便稍后可以使用ja / jb进行无符号比较或使用jg / jl进行无符号比较来检查基于SUB的比较的结果。

(更确切地说:如果你已经有无符号加法/减法模2 ^字的指令,那么它们产生的位模式对于每个2的补码带符号加法/减法都是正确的,其真实结果在数学上这是因为无符号整数和2的补码有符号整数只是模数2 ^字长的残差类的规范代表的不同选择。