.текст .глобал _start _start: ; Тест: длина числа 1234 переместить_имм раикс, 1234 вызвать длина_числа ; rax = количество цифр ; Выводим результат как цифру прибавить_непосредственно раикс, 0x30 сохранить [буфер], раикс переместить_имм раикс, 1 переместить_имм рдиай, 1 переместить_имм рсиай, буфер переместить_имм рдикс, 1 вызов_системы ; Перевод строки переместить_имм раикс, 1 переместить_имм рдиай, 1 переместить_имм рсиай, nl переместить_имм рдикс, 1 вызов_системы ; exit(0) переместить_имм раикс, 60 переместить_имм рдиай, 0 вызов_системы ; ============================================= ; длина_числа: количество десятичных цифр в rax ; Вход: rax = число ; Выход: rax = количество цифр (1..20) ; ============================================= длина_числа: втолкнуть р8 втолкнуть р9 переместить р8, раикс ; р8 = число переместить_имм р9, 0 ; счётчик = 0 ; Проверка на 0 сравнить_с р8, 0 короткий_переход_если_неравно длина_цикл переместить_имм раикс, 1 ; 0 — это 1 цифра вытолкнуть р9 вытолкнуть р8 вернуться длина_цикл: увеличить р9 ; счётчик++ ; Делим на 10 переместить раикс, р8 переместить_имм рдикс, 0 переместить_имм рсикс, 10 разделить рсикс переместить р8, раикс ; частное сравнить_с р8, 0 короткий_переход_если_неравно длина_цикл переместить раикс, р9 ; результат вытолкнуть р9 вытолкнуть р8 вернуться .данные буфер: .байт 0, 0, 0, 0, 0, 0, 0, 0 nl: .байт 0x0A