Ну луп у тебя вычитает из cx 1 каждый раз, но rcx у тебя используется внутри цикла для аргумента сискола write, поэтому его нужно сохранить, вот и сохраняют его тут на стеке через пуш/поп
ты это устанавливал для asm?
На 12 идёт сохранение rcx, ибо в нём хранится кол-во итераций для инструкции loop А сохраняется rcx, потому что он используется в прерывании как аргумент, и именно в него надо записать num. И поэтому этот код неоптимальный, тут x86_64 — регистров куча и больше. Можно вместо использования loop, сделать свой цикл (cmp/jne) используя регистр r8-r15, за счёт чего убрать push/pop, тем самым сократив обращения к стеку.
Обсуждают сегодня