138 lines
4.3 KiB
Plaintext
138 lines
4.3 KiB
Plaintext
.текст
|
||
.глобал _start
|
||
|
||
_start:
|
||
переместить_имм р8, 0 ; число = 0
|
||
|
||
цикл:
|
||
; Выводим число (костыльно: до 99)
|
||
сравнить_с р8, 10
|
||
переход_если_больше_или_равно двузначное
|
||
|
||
; Однозначное
|
||
переместить раикс, р8
|
||
прибавить_непосредственно раикс, 0x30
|
||
сохранить [буфер], раикс
|
||
|
||
переместить_имм раикс, 1
|
||
переместить_имм рдиай, 1
|
||
переместить_имм рсиай, буфер
|
||
переместить_имм рдикс, 1
|
||
вызов_системы
|
||
|
||
переход показать_длину
|
||
|
||
двузначное:
|
||
; Делим на 10
|
||
переместить раикс, р8
|
||
переместить_имм рдикс, 0
|
||
переместить_имм рсикс, 10
|
||
разделить рсикс
|
||
|
||
сохранить [остаток], рдикс
|
||
|
||
; Десятки
|
||
прибавить_непосредственно раикс, 0x30
|
||
сохранить [буфер], раикс
|
||
|
||
переместить_имм раикс, 1
|
||
переместить_имм рдиай, 1
|
||
переместить_имм рсиай, буфер
|
||
переместить_имм рдикс, 1
|
||
вызов_системы
|
||
|
||
; Единицы
|
||
загрузить рдикс, [остаток]
|
||
прибавить_непосредственно рдикс, 0x30
|
||
сохранить [буфер], рдикс
|
||
|
||
переместить_имм раикс, 1
|
||
переместить_имм рдиай, 1
|
||
переместить_имм рсиай, буфер
|
||
переместить_имм рдикс, 1
|
||
вызов_системы
|
||
|
||
показать_длину:
|
||
; Разделитель: " -> "
|
||
переместить_имм раикс, 1
|
||
переместить_имм рдиай, 1
|
||
переместить_имм рсиай, стрелка
|
||
переместить_имм рдикс, 4
|
||
вызов_системы
|
||
|
||
; Длина числа
|
||
переместить раикс, р8
|
||
вызвать длина_числа
|
||
|
||
прибавить_непосредственно раикс, 0x30
|
||
сохранить [буфер], раикс
|
||
|
||
переместить_имм раикс, 1
|
||
переместить_имм рдиай, 1
|
||
переместить_имм рсиай, буфер
|
||
переместить_имм рдикс, 1
|
||
вызов_системы
|
||
|
||
; Перевод строки
|
||
переместить_имм раикс, 1
|
||
переместить_имм рдиай, 1
|
||
переместить_имм рсиай, nl
|
||
переместить_имм рдикс, 1
|
||
вызов_системы
|
||
|
||
; Число++
|
||
увеличить р8
|
||
сравнить_с р8, 9199
|
||
переход_если_меньше цикл
|
||
|
||
; exit(0)
|
||
переместить_имм раикс, 60
|
||
переместить_имм рдиай, 0
|
||
вызов_системы
|
||
|
||
; =============================================
|
||
; длина_числа
|
||
; =============================================
|
||
длина_числа:
|
||
втолкнуть р8
|
||
втолкнуть р9
|
||
|
||
переместить р8, раикс
|
||
переместить_имм р9, 0
|
||
|
||
сравнить_с р8, 0
|
||
короткий_переход_если_неравно длина_цикл
|
||
|
||
переместить_имм раикс, 1
|
||
вытолкнуть р9
|
||
вытолкнуть р8
|
||
вернуться
|
||
|
||
длина_цикл:
|
||
увеличить р9
|
||
|
||
переместить раикс, р8
|
||
переместить_имм рдикс, 0
|
||
переместить_имм рсикс, 10
|
||
разделить рсикс
|
||
переместить р8, раикс
|
||
|
||
сравнить_с р8, 0
|
||
короткий_переход_если_неравно длина_цикл
|
||
|
||
переместить раикс, р9
|
||
вытолкнуть р9
|
||
вытолкнуть р8
|
||
вернуться
|
||
|
||
.данные
|
||
буфер:
|
||
.байт 0, 0, 0, 0, 0, 0, 0, 0
|
||
стрелка:
|
||
.строка " -> "
|
||
nl:
|
||
.байт 0x0A
|
||
|
||
.бнд
|
||
остаток:
|
||
.резб 8 |