TL;DR
Because it's one of the most common operations, having a dedicated instruction for it helps improving speed. Designers know how to make it fast and a separate negation isn't needed as you think
From the famous computer architecture books Computer Organization and Design, Fourth Edition: The Hardware/Software Interface by David A. Patterson and John L. Hennessy and Digital Design and Computer Architecture by David Money Harris, Sarah L. Harris we know that MIPS design principles are as below
- Design Principle 1: Simplicity favors regularity.
- Design Principle 2: Make the common case fast.
- Design Principle 3: Smaller is faster.
- Design Principle 4: Good design demands good compromises.
Those are also correct in other architectures. In x86 and many other (mainly older) architectures some cannot be achieved because of backward compatibility, but the main points apply.
Because of the 1st and 3rd principles, we need to make the instruction set as compact as possible and don't create new instructions if we can do it using other instructions. However as per principles 2 and 4, we need to make the common operations as fast as possible.
In fact most instructions are redundant as we can have as a Turing complete instruction set with only one instruction. x86 itself is not an OISC architecture but it's still possible to do anything with just a single mov
or add
/sub
because they're proved to be Turing-complete. There's even a compiler to compile valid C code into a program with only MOV (or only either of XOR, SUB, ADD, XADD, ADC, SBB, AND/OR, PUSH/POP, 1-bit shifts, or CMPXCHG/XCHG) named movfuscator
So with add
or sub
we can get shifts, bitwise operations and multiplication/division easily. However those basic operations may need extremely long series of instructions to simulate, and users won't be happy with that.
That's why manufacturers continuously add new instructions to the new microachitectures because newer demands will make things not common before come into use a lot. For example they decided to add SIMD instructions for vector and 3D operations when 3D applications was becoming a new trend, and matrix operations are also common. And then when increasing security requirements make encryption more common, AES instructions were introduced to boost cryptography applications. But that's not enough, as cryptography and many other applications use a lot of multiprecision arithmetics, Intel added MULX/ADOX/ADCX instructions to make those faster. And now you'll see instructions to accelerate AI operations begin to get into architectures
Back to the main question, subtraction is extremely common so that it's worth a separate instruction. Without it you'll have to negate
one operand and then add
, which cost at least twice the time and instruction space. sub a, b
is better than neg b; add a, b
.
However subtraction isn't necessarily slower because of the negation as you thought because designers use a clever trick to make adders do both add
and sub
in the same number of clocks by adding only a muxer and a NOT gate along with the new input Binvert in order to conditionally invert the second input as below

Computer Architecture - Full Adder
Basic it works by realizing that in two's complement -b = ~b + 1
, so a - b = a + ~b + 1
. That means we just need to set the carry in to 1 (or negate the carry in for borrow in) and invert the second input.
This type of ALU was also mentioned in the books I mentioned at the beginning. Unfortunately I can't quote it due to licensing problems, but I've found in another book from prof. Patterson and prof. Hennessy:

Computer Organization and Design RISC-V Edition: The Hardware Software Interface
As you can see, with another very simple modification they can now do 6 different operations with a single ALU: add, sub, slt, and, or, nor

CSE 675.02: Introduction to Computer Architecture
In fact designers are very smart at sharing components for saving space, for example they can produce an ALU that works for both ones' and two's complement, or an ALU that shares things with the FPU
You can find more information in ALU design courses, or on Google with the keywords Binvert/Bnegate