
#    Функция преобразования кода символа в числовое значение
#    c фильтрацией кодов цифр. P1 - байт кода. Возвращается
#    значение цифры или -1 если код не символа цифры.

# запрет выполняемого стека

 .section .note.GNU-stack,"",@progbits

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

# Описание внешних  символьных имен

.globl Trans_Sym

# ---- конец добавления ----------------------
	
.type	Trans_Sym, @function

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

Trans_Sym:

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

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

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

LVAR2:
	.ascii "LFr2" 	# показ локальной переменной Кадра 2

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

	subl  $4, %esp	 # завести локальную перемен. в Кадре 1
        movl  LVAR2,%eax
        movl  %eax,-4(%ebp)

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

	movl 8(%ebp), %eax  # первый  параметр в eax
	
#	Фильтр кода символа цифры	
	
	cmpb $'9', %al 	 # код больше кода символа '9' ?
	ja Ret_error     # ДА - на возврат -1
	cmpb $'0', %al	 # код меньше кода сивола '0' ?
	jb Ret_error     # ДА - на возврат -1
	
	subl $0x30, %eax # получение числового значения
	
	jmp Ret_norm 	 # на возврат числ. значения цифры

Ret_error:

	movl $-1,%eax	 # для возврата если код не символ цифры

Ret_norm:

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

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

#	Конец  Trans_Sym

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