
#    	ABI соглашения о вызовах функций

#	Байты из массива Symbols читаются по одному.
#	Если прочтен код цифры, то он преобразуется 
#	в 4-байтовое целое, иначе в значение -1.
#	Результат записывается в элементы массив Numbers.

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

.data # секция данных

Symbols:
	.asciz	"91A23B456C789"	# массив символьных кодов
#				  цифр и "не цифр"

#	для показа исходного состяния  стека 
#	и мест РОН в нем после pusha в основной программ

Ini:	.ascii "INIT"	# стек  
EAXF:	.ascii "axF "	# %eax
EDIF:	.ascii "diF "	# %edi
EBPm4:	.ascii "bp-4"	# для показа %ebp через %esi

.bss	# секция общей памяти 

.lcomm	Numbers, 40	# массив 4-х байтовых значений цифр

# ---- добавлено для раздельной трансляции ---

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

.globl Read_Sym, Numbers, EBPm4

# ---- конец добавления ------------------ ---

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

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

_start:

	nop

#	Индикаторы исходных состояний

#	Стека    

	movl Ini, %eax	
	movl %eax, 0(%esp)

#	Регистров общего назначения перед pusha
	
	movl EAXF,  %eax	# первый 
	movl EDIF,  %edi 	# последний
	movl EBPm4, %esi	# следующий после %ebp 
				# !!! %ebp НЕ ТРОГАТЬ !!! 
		
	pusha	# РОН в стек
		
	pushl $Symbols	# Параметр-2 - адрес массива в стек
	pushl $8 	# Параметр-1 в стек, цикл 0-7 
	
	call Read_Sym   # вызов функции

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

	popa         	# восстановить РОН

	Finish # конец работы, возврат в ОС 

	.end   # последняя строка исходного текста	
	