почему логическое условие "НЕ" в условии if в сборке - PullRequest
0 голосов
/ 17 сентября 2018

Я изучаю ассемблер, и в учебнике приведен пример управления условиями:

enter image description here

Я не понимаю, почему используется x>=yв строке 3, почему бы просто не следовать логике и использовать x<y (так же, как оригинальный код C)?есть какая-то конкретная причина для! (не) условия в операторе if?

1 Ответ

0 голосов
/ 17 сентября 2018

Оператор if() означает «пропустить это, если условие не выполнено».

Если условие истинно, вы хотите, чтобы выполнение провалилось в тело if, а если оно ложно, вы хотите, чтобы выполнение перепрыгнуло через тело if.

Таким образом, очевидный / буквальный способ компиляции if - это использование jcc в обратном условии, например jnl. (Оптимизированный код, безусловно, мог бы работать намного лучше для тех тесно связанных блоков if / else, как вычитание и условное отрицание.)

Если вы хотите использовать jl, вы должны поместить тело if вне строки, возможно, после ret в конце функции, а затем отскочить от него.

...