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

use*_*902 1 assembly signed unsigned-integer

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

MOV EAX,1
MOV EDX,3
SUB EAX,EDX,EAX
Run Code Online (Sandbox Code Playgroud)

得到-2?

Jen*_*ger 5

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


Hen*_*olm 5

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

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

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