如何缩短 MIPS 打印语句
How to Shorten MIPS Print Statements
我一直在开发一个计算 GCD 和 LCM 然后将它们打印出来的程序,但我注意到我花了一半的代码来打印东西。我通过将文本块另存为来组织它:
Ask_Input_1:
.asciiz "Enter first integer n1: "
Ask_Input_2:
.asciiz "Enter second integer n2"
GCD_Out:
.asciiz "The greatest common divisor of : "
LCM_Out:
.asciiz "The least common multiple of "
AND:
.asciiz " and "
IS:
.asciiz " is "
然后打印它们:
la, $a0, GCD_Out
li $v0, 4
syscall #print statement
la, $a0, ($s0)
li $v0, 1
syscall #print first number
la $a0, AND
li $v0, 4
syscall #print and
la $a0, ($s1)
li $v0, 1 #print second number
la $a0, IS
li $v0, 4
syscall #print is
每个函数大约需要 10 行代码,而且看起来效率极低。一定有更好的方法吧?
当然,define a macro 为:
.macro print_str (%str)
.data
myLabel: .asciiz %str
.text
li $v0, 4
la $a0, myLabel
syscall
.end_macro
.text
.globl main
main:
print_str("Enter first integer n1: ")
print_str("Enter second integer n2: ")
print_str("The greatest common divisor of : ")
li $v0,10
syscall
SPIM 似乎不喜欢那个宏,但它在 MARS 中运行良好。如果您使用的是 GNU 汇编程序或其他程序,语法可能会略有不同。
我一直在开发一个计算 GCD 和 LCM 然后将它们打印出来的程序,但我注意到我花了一半的代码来打印东西。我通过将文本块另存为来组织它:
Ask_Input_1:
.asciiz "Enter first integer n1: "
Ask_Input_2:
.asciiz "Enter second integer n2"
GCD_Out:
.asciiz "The greatest common divisor of : "
LCM_Out:
.asciiz "The least common multiple of "
AND:
.asciiz " and "
IS:
.asciiz " is "
然后打印它们:
la, $a0, GCD_Out
li $v0, 4
syscall #print statement
la, $a0, ($s0)
li $v0, 1
syscall #print first number
la $a0, AND
li $v0, 4
syscall #print and
la $a0, ($s1)
li $v0, 1 #print second number
la $a0, IS
li $v0, 4
syscall #print is
每个函数大约需要 10 行代码,而且看起来效率极低。一定有更好的方法吧?
当然,define a macro 为:
.macro print_str (%str)
.data
myLabel: .asciiz %str
.text
li $v0, 4
la $a0, myLabel
syscall
.end_macro
.text
.globl main
main:
print_str("Enter first integer n1: ")
print_str("Enter second integer n2: ")
print_str("The greatest common divisor of : ")
li $v0,10
syscall
SPIM 似乎不喜欢那个宏,但它在 MARS 中运行良好。如果您使用的是 GNU 汇编程序或其他程序,语法可能会略有不同。