Mips how to save user input string

I used to think I know how to do this. But then I really tried to do it. Here's the program I wrote, but the Berkeley S *** simulator for Mac, said there was a syntax error on the last line. What have I done wrong?

.text .globl __start __start: la $a0,ask li $v0,4 syscall li $v0,8 syscall la $t0,buffer move $t0,$v0 syscall la $a0,ret li $v0,4 syscall move $a0,$t0 li $v0,4 syscall .data ask: .asciiz "Enter string: " ret: .asciiz "You wrote: " buffer: .space 100 
+6
source share
2 answers

Ok I found a program deeply immersed in other files from the beginning of the year that does what I want. I can not comment on the suggestions, because I am not an experienced programmer or low-level programmer. There he is:

  .text .globl __start __start: la $a0,str1 #Load and print string asking for string li $v0,4 syscall li $v0,8 #take in input la $a0, buffer #load byte space into address li $a1, 20 # allot the byte space for string move $t0,$a0 #save string to t0 syscall la $a0,str2 #load and print "you wrote" string li $v0,4 syscall la $a0, buffer #reload byte space to primary address move $a0,$t0 # primary address = t0 address (load pointer) li $v0,4 # print string syscall li $v0,10 #end program syscall .data buffer: .space 20 str1: .asciiz "Enter string(max 20 chars): " str2: .asciiz "You wrote:\n" ############################### #Output: #Enter string(max 20 chars): qwerty 123 #You wrote: #qwerty 123 #Enter string(max 20 chars): new world oreddeYou wrote: # new world oredde //lol special character ############################### 
+16
source
 # This code works fine in QtSpim simulator .data buffer: .space 20 str1: .asciiz "Enter string" str2: .asciiz "You wrote:\n" .text main: la $a0, str1 # Load and print string asking for string li $v0, 4 syscall li $v0, 8 # take in input la $a0, buffer # load byte space into address li $a1, 20 # allot the byte space for string move $t0, $a0 # save string to t0 syscall la $a0, str2 # load and print "you wrote" string li $v0, 4 syscall la $a0, buffer # reload byte space to primary address move $a0, $t0 # primary address = t0 address (load pointer) li $v0, 4 # print string syscall li $v0, 10 # end program syscall 
+6
source

Source: https://habr.com/ru/post/900535/


All Articles