Ale*_*nze 13
如果你已经-x预先计算,然后sub smth, x和add smth, -x将要同样快速执行.
从语义上讲,标志状态会有所不同.
考虑进行8位加法和减法:
0x01 - 0x01 = 0x00, CF = 0
0x01 + 0xFF = 0x00, CF = 1
Run Code Online (Sandbox Code Playgroud)
除了标志不同之外,如果x是常量,选择一个或另一个可能导致更短的编码(很少).
加法和减法都有一个op r/m32, imm8表格,其中立即数操作数是一个字节,但该字节是符号扩展的.因此add edx, 128必须使用dword立即编码,但sub edx, -128可以使用符号扩展字节进行编码(节省3个字节).