# Переход на новую строку / jump to the new line
NewLine:
	push ra # Положить регистр ra в стек / Put ra register into stack
		li a1,'\n' # Символ перехода на новую строку / New string character
		jal PrintChar # Вывод символа на экран / Print a symbol on a screen
	pop ra # Вернуть регистр ra из стека / Turn vback ra register from stack
	ret #  jr RA / команда соответствует jr RA
 # Вывод строки на экран/ Print a string on a screen 
PrintString:
	push ra # Положить регистр ra в стек / Put ra register into stack
	pushAs # Push A0..A7 into stack / Положить содержмое регистров A0..A7 в стек
		li a3,255 # Загрузить 255 в регистр a3 / Load 255 into register a3
PrintStringAgain:
		lbu a1,0(a2) #;Load Byte (other bits 0). 0 in 0(a2) means that offset of address is 0 / Загрузить байт (8 бит, остальные биты равны нулю - число без знака) содержимого по адресу из a2 в a1. 0 in 0(a2) означает, что смещение адреса равно нулю
		beq a1,a3,PrintStringDone # Если a1=a3, то переходим на метку PrintStringDone / if a1=a3 then jump to label PrintStringDone
		JAL PrintChar  # #;Jump And Link to label (PC->RA) / Переход к метке PrintChar с сохранением адреса возврата в RA: текущее значение счётчика команд PC сохраняется в регистре RA
		addi a2,a2,1 # a2=a2+1
		j PrintStringAgain #;Jump to a label PrintStringAgain / Переход к метке PrintStringAgain
PrintStringDone:
	popAs # Return A0..A7 from stack / Вернуть содержмое регистров A0..A7 из стека
	pop ra # Return ra value from stack / Возвращение значения регистра RA из стека
	ret #  jr RA / команда соответствует jr RA
    
  
PrintChar: #;printchar A1 / Вывод символа из регистра A1
	push ra # Положить регистр ra в стек / Put ra register into stack
	pushAs # Push A0..A7 into stack / Положить содержмое регистров A0..A7 в стек
		mv a0,a1 # a1->a0 / Загружаем содержимое a1 в a0
		li a7, 11 # Загрузка 11 в a7. 11 - номер системной функции для вывода на экран / Load 11 into a7. 11 is a number of a system function for printing on a screen
		ecall # Вызов системной функции/прервания / Call of the system function/interrupt
	popAs # Return A0..A7 from stack / Вернуть содержмое регистров A0..A7 из стека
	pop ra # Return ra value from stack / Возвращение значения регистра RA из стека
	ret #  jr RA / команда соответствует jr RA


