Здравствуйте, у меня проблема с моим кодом MIPS.Я пытаюсь сохранить первый номер арифметического термина для последующего использования, но он почему-то не работает.Я новичок в MIPS и до сих пор не очень знаком с ним.У меня есть функция main: она принимает пользовательский ввод и вызывает handle_one_line: над этой функцией я сейчас работаю.Main: выглядит так:
main:
m_loop:
# Load address of line buffer and read new user input into it.
la $a0, line_buffer
li $a1, 8192
li $v0, 8 # read string
syscall
# Reset the cursor so that it points at the first character in line buffer.
la $t0, cursor_pos
li $t1, 0
sw $t1, 0($t0)
jal handle_one_line
# Repeat.
j m_loop
У меня есть несколько других базовых функций, таких как advance_cursor и get_current_char (возвращает символ, на который указывает курсор в данный момент $ v0: текущий символ)
handle_one_line isВ таком случае все, что от него требуется, - это выдать мне первый номер термина.is_num проверяет, является ли символ числом, и read_num должен выдавать число.
handle_one_line:
# Save return address because we are calling other functions.
addi $sp, $sp, -4
sw $ra, 0($sp)
is_num:
jal get_current_char #returns the current char in $v0
li $t0, '0' #stores the ascii value of '0' in $t0
bltu $v0, $t0, notdigit #If current char Ascii value<'0'->notdigit
li $t0, '9' #stores the ascii value of '9' in $t0
bltu $t0, $v0, notdigit #If value of '9'<current char value->notdigit
li $v0,1 #$v0 = 1
notdigit:
li $v0,0 #$v0 = 0
read_num:
jal is_num #check if current cursor position char is a digit
beq $v0, $zero, Zeichen #If its not a digit quit and go to Zeichen
jal get_current_char #returns the current char in $v0
lb $t0, ($v0) #load the current char into $t0
la $s1, link_chars #set $s1 to the buffer
sb $t0, ($s1) #store current character in the buffer
addi $s1, $s1, 1 #link_chars pointer points a position forward
jal advance_cursor
j read_num
Zeichen:
li $v0, 4
la $a0, ($s1)
syscall
Он должен выдавать $ s1, но на самом деле ничего не делает, когда я ввожу свои данные