gpt4 book ai didi

C++ 到 MIPS - if 语句的小问题

转载 作者:行者123 更新时间:2023-11-28 07:41:11 25 4
gpt4 key购买 nike

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 语句搞砸了一些事情,但无法弄清楚是什么以及如何解决它。有什么改进建议吗?

谢谢

最佳答案

我认为 mips 代码非常接近 C 代码。主要区别在于它实际上将函数末尾的测试内联到分支中以优化分支。 While 循环在汇编中看起来不直观。它们通常被编译成看起来更像的东西:

if(test) {
do {
body;
} while(test);
}

关于C++ 到 MIPS - if 语句的小问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15821416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com