Ответ 1
Чтобы понять, почему вам, вероятно, нужно помнить, что текущие процессоры "x86" с 32-разрядными и 64-битными значениями начали работу с гораздо более ограниченными 8-разрядными машинами, вернулись к Intel 8008. (Я закодировал в этом мире еще в 1973 году, Я все еще помню (тьфу) это!).
В этом мире регистры были драгоценными и маленькими. Вам нужны inc/dec для различных целей, наиболее распространенным из которых является управление контуром. Многие циклы включали выполнение "арифметики с несколькими точками" (например, 16 бит или более!) Благодаря тому, что inc/dec установил бит Z, вы могли бы использовать их для управления циклами довольно красиво; настаивая на том, что инструкции управления циклом не изменяют бит переноса, перенос сохраняется по итерациям цикла, и вы можете выполнять операции с множественными значениями без написания тонны кода для запоминания состояния переноса.
Это сработало очень хорошо, как только вы привыкли к уродливому набору команд.
На более современных машинах с большими размерами слов вам это не нужно, поэтому INC и DEC могут быть семантически эквивалентны ADD..., 1 и т.д. Это на самом деле то, что я использую, когда мне нужно переносить set: -}
В основном, я держусь подальше от INC и DEC, потому что они выполняют частичные обновления кода состояния, и это может вызвать смешные киоски в конвейере, и ADD/SUB этого не делают. Поэтому, когда это не имеет значения (большинство мест), я использую ADD/SUB, чтобы избежать киосков. Я использую INC/DEC только при сохранении небольшого значения кода, например, при установке в строку кэша, где размер одной или двух инструкций делает достаточную разницу для материи. Это, вероятно, бессмысленная nano [буквально!] - оптимизация, но я довольно старая школа в своих привычках кодирования.
Мое объяснение говорит нам, почему INC/DEC установил нулевой бит. У меня нет особого убедительное объяснение того, почему INC/DEC задает знак (и биты четности).
EDIT Апрель 2016: Кажется, что проблема с кабиной лучше справляется с современными x86. См. Инструкция INC и ADD 1: имеет ли это значение?