 
.include "my-macro"  # подключение файла с макроопределениями

/*
 * Пограмма перевода из 2 в 10   - получение 10-х цифр двоичного числа
 */
    
.data 	# секция данных, распределение памяти

n: 	.short 2345      # число
digits_of_n:	.ascii "     " # строка для кодов символов 10 цифр - 5 
#                                пробелов
	.align 16	# выравниваем на 16 битовую границу
	
length: .long 0         # количество 10 цифр в числе

ten: 	.short 10        # делитель


.text # секция команд процесора 

.global _start 	# точка входа - глобальная метка

_start: 	
        movl $0, %ebx           # счетчик делений
	movw n, %ax            # готовим деление 
	movl $4,%esi		# начальное значение индекса на старший 
				# байт строки digits_of_n
        
nextdigit:

#        Т.к. переводим 16 битовое слово, то работаем с 16 бит рег

        movw  $0, %dx           # еще готовим
        idivw ten               # делим объединенные регистры dx:ax на 10
                                # частное в  ax, остаток в dx
#       Превращем значение остатка в код цифры

	addw $48,%dx

#	!!! пишем остаток - младшую (потом очередную) цифру в старший 
			    # байт строки 10digits-of-n
#	Куда указывает %esi &

	leal digits_of_n(%esi), %ecx # демонстрация исполнительного адреса
 
#	команда lea вычисляет ИА и посылает его в регистр 2 операнда
#	команда пристутствует только для учебных целей
			    
			    
        movb %dl,digits_of_n(%esi)

#	готовим обработку след. цифры                                
        
        addl $1, %ebx           # счетчик делений + 1
        decl %esi		# устанавливаем индекс на байт для 
#			          след. цифры
        cmpl $0, %eax           # частное = 0 ?
        jg   nextdigit          # НЕТ, продолжаем
        movl %ebx, length       # ДА, сохраняем результат 

    Finish                  # конец работы, возврат в ОС
                                # (макро из файла my-macro)
        
.end   # последняя строка исходного текста	
