我需要一个汇编mips代码,要求用户输入2个整数并计算指数,例如:他们把2和8相加,结果是256,因为2^8 = 256。我知道怎么问号码:
.data prompt1: .asciiz "X: " prompt2: .asciiz "Y: " result: .ascii "Result: "
但我不知道如何使用它们或如何生成x^y
pgx2nnw81#
如果这两个整数始终都是无符号或正的,则可以执行以下操作(在这种情况下,输入不是来自用户,您应该为前2条li指令添加syscalls,以便执行此操作):$a0:x变量$a1:y变量
.text li $a0, 5 #x variable li $a1, 3 #y variable jal exponent li $v0, 10 syscall exponent: addi $sp, $sp, -12 #decrement the stack pointer sw $s0, 0($sp) #store values for not muting sw $s1, 4($sp) sw $s2, 8($sp) move $s0, $a0 move $s1, $a1 li $s2, 1 ###PRINT### la $a0, prompt1 li $v0, 4 syscall move $a0, $s0 li $v0, 1 syscall la $a0, prompt2 li $v0, 4 syscall move $a0, $s1 li $v0, 1 syscall ###END PRINT### loop: mul $s2, $s2, $s0 #in each iteration 1 multiplication done addi $s1, $s1, -1 bne $s1, 0, loop #when $a1 equals 0 it will go on ###PRINT### la $a0, result li $v0, 4 syscall move $a0, $s2 li $v0, 1 syscall ###END PRINT### move $v0, $s2 lw $s0, 0($sp) #load values for not muting lw $s1, 4($sp) lw $s2, 8($sp) addi $sp, $sp, 12 jr $ra .data .align 2 prompt1: .asciiz "X: " .align 2 prompt2: .asciiz "Y: " .align 2 result: .asciiz "Result: "
如果你的目标是覆盖负数,你应该为这种情况添加另一个循环,在它里面,而不是穆尔指令,你应该使用div。请记住,在Stackoverflow中,您不应该要求整个程序:)
1条答案
按热度按时间pgx2nnw81#
如果这两个整数始终都是无符号或正的,则可以执行以下操作(在这种情况下,输入不是来自用户,您应该为前2条li指令添加syscalls,以便执行此操作):
$a0:x变量$a1:y变量
如果你的目标是覆盖负数,你应该为这种情况添加另一个循环,在它里面,而不是穆尔指令,你应该使用div。
请记住,在Stackoverflow中,您不应该要求整个程序:)