| ▲ | Dwedit 11 hours ago | |||||||||||||
Because "sub eax,eax" looks stupid. (and also clears the carry flag, unlike "xor eax, eax") | ||||||||||||||
| ▲ | tom_ 11 hours ago | parent | next [-] | |||||||||||||
xor clears the carry as well? In fact, looks like xor and sub affect the same set of flags! xor: > The OF and CF flags are cleared; the SF, ZF, and PF flags are set according to the result. The state of the AF flag is undefined. sub: > The OF, SF, ZF, AF, PF, and CF flags are set according to the result. (I don't have an x64 system handy, but hopefully the reference manual can be trusted. I dimly remembered this, or something like it, tripping me up after coming from programming for the 6502.) | ||||||||||||||
| ||||||||||||||
| ▲ | HackerThemAll 10 hours ago | parent | prev [-] | |||||||||||||
If I remember correctly, sub used to be slower than xor on some ancient architectures. | ||||||||||||||