kvs/тесты/циклы8.квс

180 lines
5.8 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

.текст
.глобал _start
_start:
; МЕНЯЙ ЧИСЛО ЗДЕСЬ:
переместить_имм р8, 456777
; Выводим число через itoa3 (до 999!)
переместить раикс, р8
переместить_имм рдиай, буфер
вызвать itoa3
загрузить рсиай, [указатель]
загрузить рдикс, [длина]
переместить_имм раикс, 1
переместить_имм рдиай, 1
вызов_системы
; " -> "
переместить_имм раикс, 1
переместить_имм рдиай, 1
переместить_имм рсиай, стрелка
переместить_имм рдикс, 4
вызов_системы
; Длина числа
переместить раикс, р8
вызвать длина_числа
; Выводим длину
прибавить_непосредственно раикс, 0x30
сохранить [буфер], раикс
переместить_имм раикс, 1
переместить_имм рдиай, 1
переместить_имм рсиай, буфер
переместить_имм рдикс, 1
вызов_системы
; Перевод строки
переместить_имм раикс, 1
переместить_имм рдиай, 1
переместить_имм рсиай, nl
переместить_имм рдикс, 1
вызов_системы
; exit(0)
переместить_имм раикс, 60
переместить_имм рдиай, 0
вызов_системы
; =============================================
; itoa3 — работает для чисел до 999
; =============================================
itoa3:
втолкнуть рбикс
втолкнуть р8
втолкнуть р9
переместить рбикс, рдиай
переместить р8, раикс
сравнить_с р8, 10
переход_если_меньше одна_цифра
сравнить_с р8, 100
переход_если_меньше две_цифры
; Три цифры
прибавить_непосредственно рбикс, 3
переместить раикс, р8
переместить_имм рдикс, 0
переместить_имм р9, 10
разделить р9
прибавить_непосредственно рдикс, 0x30
уменьшить рбикс
сохранить [рбикс], рдикс
переместить р8, раикс
переместить раикс, р8
переместить_имм рдикс, 0
разделить р9
прибавить_непосредственно рдикс, 0x30
уменьшить рбикс
сохранить [рбикс], рдикс
прибавить_непосредственно раикс, 0x30
уменьшить рбикс
сохранить [рбикс], раикс
сохранить [указатель], рбикс
переместить_имм раикс, 3
сохранить [длина], раикс
вытолкнуть р9
вытолкнуть р8
вытолкнуть рбикс
вернуться
две_цифры:
прибавить_непосредственно рбикс, 2
переместить раикс, р8
переместить_имм рдикс, 0
переместить_имм р9, 10
разделить р9
прибавить_непосредственно рдикс, 0x30
уменьшить рбикс
сохранить [рбикс], рдикс
прибавить_непосредственно раикс, 0x30
уменьшить рбикс
сохранить [рбикс], раикс
сохранить [указатель], рбикс
переместить_имм раикс, 2
сохранить [длина], раикс
вытолкнуть р9
вытолкнуть р8
вытолкнуть рбикс
вернуться
одна_цифра:
прибавить_непосредственно раикс, 0x30
сохранить [рбикс], раикс
сохранить [указатель], рбикс
переместить_имм раикс, 1
сохранить [длина], раикс
вытолкнуть р9
вытолкнуть р8
вытолкнуть рбикс
вернуться
; =============================================
; длина_числа
; =============================================
длина_числа:
втолкнуть р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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
стрелка:
.строка " -> "
nl:
.байт 0x0A
.бнд
указатель:
.резб 8
длина:
.резб 8