Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays MIPS使用带有任意数字问题的数组_Arrays_Mips_Offset - Fatal编程技术网

Arrays MIPS使用带有任意数字问题的数组

Arrays MIPS使用带有任意数字问题的数组,arrays,mips,offset,Arrays,Mips,Offset,我似乎无法理解为什么代码的计算Z[12]=Z[k]+Z[k+m]部分完全失败,只会导致错误。我试着翻阅我的笔记和手册,但没有成功。我错过了一些重要的事情 我猜这和偏移量的计算有关??作为 lw$t0,k$s1 lw$t2,m$s1 sw$t3、48$s1 都给我错误。这意味着它们是完全错误的,基本上是错误的语法。但是我不知道除此之外还能做什么。如果您在MIPS指令集引用中查找lw和sw,应该会发现没有任何形式的指令与之匹配,例如lw$t0,k($s1) 有些汇编程序实际上接受这些伪指令(汇编程序

我似乎无法理解为什么代码的计算Z[12]=Z[k]+Z[k+m]部分完全失败,只会导致错误。我试着翻阅我的笔记和手册,但没有成功。我错过了一些重要的事情

我猜这和偏移量的计算有关??作为 lw$t0,k$s1 lw$t2,m$s1 sw$t3、48$s1


都给我错误。这意味着它们是完全错误的,基本上是错误的语法。但是我不知道除此之外还能做什么。

如果您在MIPS指令集引用中查找
lw
sw
,应该会发现没有任何形式的指令与之匹配,例如
lw$t0,k($s1)

有些汇编程序实际上接受这些伪指令(汇编程序会将它们转换成两个或更多的实际指令),但其含义与您希望的不同:例如,
lw$t0,k($s1)
的含义是
$t0=k[$s1]
,而不是
$t0=$s1[k]

您需要这样做:

  .data
  .align 2
Z:  .word  6, 7, 8 ,9 , 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36
k:  .word  0            
m:  .word  0            

  .text
  .globl main
main:                   # main is global label
  addu  $s7, $0, $ra    # save return address
  lw  $s1, Z            # base address of Z in $s1

#------------------------------------getting k
  .data
  .globl  message1  
message1:  .asciiz "\nInput value for k: "  #string to print

  .text
  li  $v0, 4            # print_string (system call 4)
  la  $a0, message1     # takes the address of string as an argument 
  syscall
  li  $v0, 5            # read_int (system call 5) 
  syscall
  add  $t1, $0, $v0     # -> $s2
  sw  $t1, k            # k is stored
#------------------------------------getting m
  .data
  .globl  message2
message2:  .asciiz "\nInput value for m: "    #string to print

  .text
  li  $v0, 4            # print_str (system call 4)
  la  $a0, message2     # takes the address of string as an argument 
  syscall
  li  $v0, 5            # read_int (system call 5)
  syscall
  add  $s3, $0, $v0     # -> $s3
  sw  $s3, m            # m is stored


#-----------------------------------calculating Z[12] = Z[k] + Z[k+m]
  .text
  lw $t0, k($s1)        # store Z[k] -> $t0
  add $t1, $s2, $s3     # k + m -> $t1
  lw $t2, m($s1)        # store Z[k+m] -> $t2
  add $t3, $t0, $t2     # Z[k] + Z[k+m] -> $t3
  sw $t3, 48($s1)       # store Z[k] + Z[k+m] -> Z[12]


请注意,
sw$t3,48($s1)
是完全有效的,所以当你说它给了你一个错误时,你不清楚你的意思。

你的最后一行代码“lw$t1,($t0)”似乎也不是一条合法的指令——它只是返回一个错误。这是一条完全有效的指令。确切的错误消息是什么?你还没有弄清楚你在用哪个汇编程序。
lw $t0, k
sll $t0, $t0, 2     # t0 = k * sizeof(word)
addu $t0, $t0, $s1  # t0 += &Z
lw $t1, ($t0)