# Описание внешних (определенных или используемых в других файлах) символьных имен

.globl Read_Sym, Trans_Sym, Numbers
	
.text	# секция команд процесора
	
.type Read_Sym, @function	# функция циклической обработки массива

Read_Sym:

/*
	Читает <Параметр1> символов из массива <Параметр2>
	и передает их на обработку функции Trans_Sym.
	Результат размещается в массив Numbers
*/
	
# Стандартный пролог фунции

	pushl %ebp 	 # сохранить в стеке значение, бывшее в вызывающей
	movl  %esp, %ebp # обеспечить адресный доступ к параметрам и 
			 # локальным переменнным в стеке путем базовой 
			 # адресации через ebp
	                 
	subl  $4, %esp	 # завести 4-х байтовую локальную переменную 

# Тело функции

	subl %ecx, %ecx	 # инициализация счетчика цикла
	
NextSym:	
	movl 12(%ebp), %edx  # адрес второго параметра-массива в edx

# вызов функции Trans_Sym
	
	subl %ebx, %ebx	     	    # подготовка ebx для записи символа
	movb (%edx, %ecx,1), %bl    # символ в ebx

# Начинаем вызов Trans_Sym

	pusha	# сохранить регистры текущей функции Read_Sym	

	pushl %ebx		# Параметр функции Trans_Sym (код 
				# символа из массива) в стек
	call Trans_Sym

	addl $4, %esp      	# очистить стек от параметров Trans_Sym

	movl %eax, Numbers(, %ecx, 4) # записать результат Trans-Sym

	popa			# восстановть регистры Read_Sym		
	
	incl %ecx	     # наращиваем счетчик цикла
	cmpl 8(%ebp), %ecx   # счетчик равен первому параметру?
	jne NextSym	     # ДА, повторяем
			     # НЕТ - выходим из цикла

# Стандартный эпилог функции

	movl %ebp, %esp # восстановить указатель стека
	popl %ebp       # восстановить ebp
	ret		# возврат в вызывающую
	
.end
    