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