.текст .глобал _start _start: переместить_имм р8, 2 ; число = 2 цикл: ; Если число < 10 — выводим как есть сравнить_с р8, 10 переход_если_больше_или_равно двузначное ; Однозначное: просто цифра переместить раикс, р8 прибавить_непосредственно раикс, 0x30 сохранить [буфер], раикс переместить_имм раикс, 1 переместить_имм рдиай, 1 переместить_имм рсиай, буфер переместить_имм рдикс, 1 вызов_системы переход продолжение двузначное: ; Делим на 10 переместить раикс, р8 переместить_имм рдикс, 0 переместить_имм рсикс, 10 разделить рсикс ; rax = десятки, rdx = единицы ; Сохраняем единицы в .бнд (пока не испортились) сохранить [остаток], рдикс ; Выводим десятки прибавить_непосредственно раикс, 0x30 сохранить [буфер], раикс переместить_имм раикс, 1 переместить_имм рдиай, 1 переместить_имм рсиай, буфер переместить_имм рдикс, 1 вызов_системы ; Загружаем единицы обратно загрузить рдикс, [остаток] ; Выводим единицы прибавить_непосредственно рдикс, 0x30 сохранить [буфер], рдикс переместить_имм раикс, 1 переместить_имм рдиай, 1 переместить_имм рсиай, буфер переместить_имм рдикс, 1 вызов_системы продолжение: ; Перевод строки переместить_имм раикс, 1 переместить_имм рдиай, 1 переместить_имм рсиай, nl переместить_имм рдикс, 1 вызов_системы ; Прибавляем 2 прибавить_непосредственно р8, 2 ; Продолжаем пока <= 99 сравнить_с р8, 99 переход_если_меньше цикл ; exit(0) переместить_имм раикс, 60 переместить_имм рдиай, 0 вызов_системы .данные буфер: .байт 0, 0, 0, 0, 0, 0, 0, 0 nl: .байт 0x0A .бнд остаток: .резб 8