Assembly 为什么我的不同的字符串行在一个块中打印出来,而不是在MIPS MARS中打印单独的行?
我正在使用MIPS MARS assembly编写一个程序,该程序可以进行不同的数学计算。我很难理解为什么.data部分中的字符串值会在程序开始时作为块而不是单独的行打印出来。我还遇到了在正确语句旁边打印值的问题Assembly 为什么我的不同的字符串行在一个块中打印出来,而不是在MIPS MARS中打印单独的行?,assembly,mips,c-strings,mars-simulator,Assembly,Mips,C Strings,Mars Simulator,我正在使用MIPS MARS assembly编写一个程序,该程序可以进行不同的数学计算。我很难理解为什么.data部分中的字符串值会在程序开始时作为块而不是单独的行打印出来。我还遇到了在正确语句旁边打印值的问题 .data NL: .asciiz "\n" #NL=new line varible kinda name addition: .ascii "The value of a + b = \n" subtraction: .ascii "The value of
.data
NL: .asciiz "\n" #NL=new line varible kinda name
addition: .ascii "The value of a + b = \n"
subtraction: .ascii "The value of a - b = \n "
prob_3: .ascii "The value of (a + b) - 8 = \n"
prob_4: .ascii "The value of (a + b) - (c + d) = \n"
prob_5: .ascii "The value of ((a + b) + (d - c) + 17 = \n"
.text
li $s0, 8
li $s1, 8
li $s2, 16
li $s3, 8
la $a0, addition
li $v0, 4
syscall
add $t1, $s0, $s1
li $v0, 1
add $a0, $t1, $zero
syscall
la $a0, NL
li $v0, 4
syscall
la $a0, subtraction
li $v0, 4
syscall
sub $t2, $s0, $s1
li $v0, 1
sub $a0, $t2, $zero
syscall
la $a0, NL
li $v0, 4
syscall
la $a0, prob_3
li $v0, 4
syscall
subi $t3, $t1, 8
li $v0, 1
sub $a0, $t3, $zero
syscall
la $a0, NL
li $v0, 4
syscall
la $a0, prob_4
li $v0, 4
syscall
add $t4, $s2, $s3
sub $t5, $t1, $t4
li $v0, 1
sub $a0, $t5, $zero
syscall
la $a0, NL
li $v0, 4
syscall
la $a0, prob_5
li $v0, 4
syscall
sub $t6, $s3, $s2
add $t7, $t1, $t6
addi $t8, $t7, 17
li $v0, 1
add $a0, $t8, $zero
syscall
我得到的结果是:
The value of a + b =
The value of a - b =
The value of (a + b) - 8 =
The value of (a + b) - (c + d) =
The value of ((a + b) + (d - c) + 17 =
16
The value of a - b =
The value of (a + b) - 8 =
The value of (a + b) - (c + d) =
The value of ((a + b) + (d - c) + 17 =
0
The value of (a + b) - 8 =
The value of (a + b) - (c + d) =
The value of ((a + b) + (d - c) + 17 =
8
The value of (a + b) - (c + d) =
The value of ((a + b) + (d - c) + 17 =
-8
The value of ((a + b) + (d - c) + 17 =
25
我想得到的结果是:
The value of a + b = 16
The value of a - b = 0
The value of (a + b) - 8 = 8
The value of (a + b) - (c + d) = -8
The value of ((a + b) + (d - c) + 17 = 25
有人能帮我解决这个问题吗?在
.data
段中定义的字符串末尾不应该有换行符\n
。换行符将将来的输出推到下一行,因此字符串后面打印的数字将放在它后面的行上
您还应该为这些字符串使用以null结尾的字符串(
.asciiz
)。这就是为什么你一次打印出所有的报表;代码不知道何时停止打印,因为没有终止字符。在.data
段中定义的字符串末尾不应该有换行字符\n
。换行符将将来的输出推到下一行,因此字符串后面打印的数字将放在它后面的行上
您还应该为这些字符串使用以null结尾的字符串(
.asciiz
)。这就是为什么你一次打印出所有的报表;代码不知道何时停止打印,因为没有终止字符。更新的更正代码:
.data
NL: .asciiz "\n" #NL=new line varible kinda name
prob_1: .asciiz "The value of a + b = "
prob_2: .asciiz "The value of a - b = "
prob_3: .asciiz "The value of (a + b) - 8 = "
prob_4: .asciiz "The value of (a + b) - (c + d) = "
prob_5: .asciiz "The value of ((a + b) + (d - c) + 17 = "
.text
li $s0, 8
li $s1, 8
li $s2, 16
li $s3, 8
la $a0, prob_1
li $v0, 4
syscall
add $t1, $s0, $s1
li $v0, 1
add $a0, $t1, $zero
syscall
la $a0, NL
li $v0, 4
syscall
la $a0, prob_2
li $v0, 4
syscall
sub $t2, $s0, $s1
li $v0, 1
sub $a0, $t2, $zero
syscall
la $a0, NL
li $v0, 4
syscall
la $a0, prob_3
li $v0, 4
syscall
subi $t3, $t1, 8
li $v0, 1
sub $a0, $t3, $zero
syscall
la $a0, NL
li $v0, 4
syscall
la $a0, prob_4
li $v0, 4
syscall
add $t4, $s2, $s3
sub $t5, $t1, $t4
li $v0, 1
sub $a0, $t5, $zero
syscall
la $a0, NL
li $v0, 4
syscall
la $a0, prob_5
li $v0, 4
syscall
sub $t6, $s3, $s2
add $t7, $t1, $t6
addi $t8, $t7, 17
li $v0, 1
add $a0, $t8, $zero
syscall
更新的更正代码:
.data
NL: .asciiz "\n" #NL=new line varible kinda name
prob_1: .asciiz "The value of a + b = "
prob_2: .asciiz "The value of a - b = "
prob_3: .asciiz "The value of (a + b) - 8 = "
prob_4: .asciiz "The value of (a + b) - (c + d) = "
prob_5: .asciiz "The value of ((a + b) + (d - c) + 17 = "
.text
li $s0, 8
li $s1, 8
li $s2, 16
li $s3, 8
la $a0, prob_1
li $v0, 4
syscall
add $t1, $s0, $s1
li $v0, 1
add $a0, $t1, $zero
syscall
la $a0, NL
li $v0, 4
syscall
la $a0, prob_2
li $v0, 4
syscall
sub $t2, $s0, $s1
li $v0, 1
sub $a0, $t2, $zero
syscall
la $a0, NL
li $v0, 4
syscall
la $a0, prob_3
li $v0, 4
syscall
subi $t3, $t1, 8
li $v0, 1
sub $a0, $t3, $zero
syscall
la $a0, NL
li $v0, 4
syscall
la $a0, prob_4
li $v0, 4
syscall
add $t4, $s2, $s3
sub $t5, $t1, $t4
li $v0, 1
sub $a0, $t5, $zero
syscall
la $a0, NL
li $v0, 4
syscall
la $a0, prob_5
li $v0, 4
syscall
sub $t6, $s3, $s2
add $t7, $t1, $t6
addi $t8, $t7, 17
li $v0, 1
add $a0, $t8, $zero
syscall
非常感谢你的帮助!非常感谢你的帮助!很高兴你的工作顺利。但是,我要补充一些意见。使用高级语言(如C)的算法阻止注释。描述如何使用寄存器的块注释。此外,每行侧边栏注释详细说明了算法在每条指令上所做的操作。要更好地解释我的意思,请看我的回答:很高兴你让事情顺利进行。但是,我要补充一些意见。使用高级语言(如C)的算法阻止注释。描述如何使用寄存器的块注释。此外,每行侧边栏注释详细说明了算法在每条指令上所做的操作。要更好地解释我的意思,请参见我的答案: