73 lines
2.5 KiB
Plaintext
73 lines
2.5 KiB
Plaintext
|
|
.текст
|
|||
|
|
.глобал _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
|