用简单的英语解释这个汇编语言程序的作用
Explain what this assembly language program does in plain English
.data
array: .word 1 2 3 4 5
mfact: .word 100
dfact: .word 20
.text
main: lui s0, 0x10010 # U format 4 cycles
lw t0, 20(s0) # I format 5 cycles
lw t1, 24(s0) # I format 5 cycles
or s1, zero, zero # R format 4 cycles
ori s2, zero, 5 # I format 4 cycles
loop: slli s3, s1, 2 # I format 4 cycles
add s4, s3, s0 # R format 4 cycles
lw t2, 0(s4) # I format 5 cycles
mul t3, t2, t0 # R format 10 cycles
div t4, t3, t1 # R format 40 cycles
sw t4, 0(s4) # S format 4 cycles
addi s1, s1, 1 # I format 4 cycles
blt s1, s2, loop # B format 3 cycles
exit: ori a7, zero, 10 # I format 4 cycles
ecall # I format 3 cycles
该问题没有更多信息。我认为该程序对数字 1-5 进行除法和乘法运算,直到达到 0,然后停止。我说得对吗?
这个程序应该取一个 5 字数组的每个元素,并将其与数组后的第一个字相乘,然后将结果除以数组后的第二个元素。但是有一些问题:
1-你需要在数组的单词之间添加com。
2-您需要将 main 声明为全局函数,以便链接器可以找到它。否则你将有一个未定义的引用错误。
3- lui s0, 0x10010
可能有问题。你确定链接器会把数组放在这个地址吗?您是否修改了链接描述文件以强制执行它?如果您不确定链接器将做什么。将array声明为对象直接用and lui + addi会更好
代码将是:
.data
.type array, @object
.size array, 20
array: .word 1, 2, 3, 4, 5
mfact: .word 100
dfact: .word 20
.text
.global main
.type main, @function
main:
lui s0, %hi(array) # U format 4 cycles
addi s0, s0, %lo(array) # I format 4 cycles
lw t0, 20(s0) # I format 5 cycles
lw t1, 24(s0) # I format 5 cycles
or s1, zero, zero # R format 4 cycles
ori s2, zero, 5 # I format 4 cycles
loop:
slli s3, s1, 2 # I format 4 cycles
add s4, s3, s0 # R format 4 cycles
lw t2, 0(s4) # I format 5 cycles
mul t3, t2, t0 # R format 10 cycles
div t4, t3, t1 # R format 40 cycles
sw t4, 0(s4) # S format 4 cycles
addi s1, s1, 1 # I format 4 cycles
blt s1, s2, loop # B format 3 cycles
exit:
ori a7, zero, 10 # I format 4 cycles
ecall # I format 3 cycles
.size main, .-main
.data
array: .word 1 2 3 4 5
mfact: .word 100
dfact: .word 20
.text
main: lui s0, 0x10010 # U format 4 cycles
lw t0, 20(s0) # I format 5 cycles
lw t1, 24(s0) # I format 5 cycles
or s1, zero, zero # R format 4 cycles
ori s2, zero, 5 # I format 4 cycles
loop: slli s3, s1, 2 # I format 4 cycles
add s4, s3, s0 # R format 4 cycles
lw t2, 0(s4) # I format 5 cycles
mul t3, t2, t0 # R format 10 cycles
div t4, t3, t1 # R format 40 cycles
sw t4, 0(s4) # S format 4 cycles
addi s1, s1, 1 # I format 4 cycles
blt s1, s2, loop # B format 3 cycles
exit: ori a7, zero, 10 # I format 4 cycles
ecall # I format 3 cycles
该问题没有更多信息。我认为该程序对数字 1-5 进行除法和乘法运算,直到达到 0,然后停止。我说得对吗?
这个程序应该取一个 5 字数组的每个元素,并将其与数组后的第一个字相乘,然后将结果除以数组后的第二个元素。但是有一些问题:
1-你需要在数组的单词之间添加com。
2-您需要将 main 声明为全局函数,以便链接器可以找到它。否则你将有一个未定义的引用错误。
3- lui s0, 0x10010
可能有问题。你确定链接器会把数组放在这个地址吗?您是否修改了链接描述文件以强制执行它?如果您不确定链接器将做什么。将array声明为对象直接用and lui + addi会更好
代码将是:
.data
.type array, @object
.size array, 20
array: .word 1, 2, 3, 4, 5
mfact: .word 100
dfact: .word 20
.text
.global main
.type main, @function
main:
lui s0, %hi(array) # U format 4 cycles
addi s0, s0, %lo(array) # I format 4 cycles
lw t0, 20(s0) # I format 5 cycles
lw t1, 24(s0) # I format 5 cycles
or s1, zero, zero # R format 4 cycles
ori s2, zero, 5 # I format 4 cycles
loop:
slli s3, s1, 2 # I format 4 cycles
add s4, s3, s0 # R format 4 cycles
lw t2, 0(s4) # I format 5 cycles
mul t3, t2, t0 # R format 10 cycles
div t4, t3, t1 # R format 40 cycles
sw t4, 0(s4) # S format 4 cycles
addi s1, s1, 1 # I format 4 cycles
blt s1, s2, loop # B format 3 cycles
exit:
ori a7, zero, 10 # I format 4 cycles
ecall # I format 3 cycles
.size main, .-main