0

C++ プログラム:

 int main()
{
   char string[256];
   int i=0;
   char *result = NULL;  // NULL pointer 

   // Obtain string from user
   scanf("%255s", string);

   // Search string for letter t.
   // Result is pointer to first t (if it exists)
   // or NULL pointer if it does not exist
   while(string[i] != '\0')
   {
      if(string[i] == 't')
      {
         result = &string[i]; 
         break; // exit from while loop early
      }
      i++;
   }

   if(result != NULL)
      printf("Matching character is %c\n", *result);
   else
      printf("No match found\n");
}

私が持っているMIPSコード:

    .globl main

        .text 

# main 
main:

        li $v0,4                # Load value 4 
        la $a0, msg0            # Load array
        syscall                 

        li $v0,8                # Load value 8
        la $a0,string           # Load array
        syscall                 # Syscall

        li $v0,4                # Load immediate value 4 
        la $a0, string          # Load array
        syscall                 # Syscall

        la $t0, string          # array    
        la $t1, result          # array
        lb $t2, result          # array

while:
        lb $t3, 0($t0)          
        beq $t3, $0, if2        # if !=0
        beq $t3, 't', if        # If = "t"
        addi $t0, $t0,1         # i++

        j while                 # Jump to While

if:
        sw $t3, result          # Save result to memory
        li $v0,4                # Load value 4 
        la $a0, found           # Load array
        syscall                 # Syscall
        j exit

        j if2                   # Jump to if2

if2:

        li $v0,4                # Load value 4 
        la $a0, notfound        # Load array
        syscall                 # Syscall
        j exit

exit: 

        li $v0, 10
        syscall # Exit

        .data
        msg0: .asciiz "Enter Word: "
        string: .byte 0:256
        i: .word 0
        result: .word 0
        found: .asciiz "Found!"
        notfound: .asciiz "Not Found"

私が書いた MIPS コードは機能しているように見えますが、上記の C++ コード構造に従っていないと思います。また、ifステートメントで何かを台無しにしたと思いますが、何をどのように修正するかわかりません。どうすれば改善できるのでしょうか?

ありがとう

4

2 に答える 2

1

mips コードは C コードに非常によく似ていると思います。主な違いは、関数の最後のテストをブランチに実質的にインライン化して、ブランチを最適化することです。while ループは、アセンブリが直感的でないように見える傾向があります。それらは通常、次のようなものにコンパイルされます。

if(test) {
    do {
         body;
    } while(test);
}
于 2013-04-04T21:22:27.180 に答える