gpt4 book ai didi

mips - 在 MIPS 中使用跳转表(如何在 JT 数组中跳转标签)

转载 作者:行者123 更新时间:2023-12-01 05:46:30 25 4
gpt4 key购买 nike

我正在尝试使用跳转表为我的工作做一个菜单。 Everyting 对我来说看起来不错,但下面的代码不起作用。在“jr $s0”指令后, mars 给了我一个错误,如:
Error in : invalid program counter value: 268501840
我知道十进制地址268501840是 L1 标签的实际地址,代码应该去那个标签,但那时我接受了这个错误。为什么?

main:   
.data
jTable: .word L0,L1,L2,L3,L4,L5,L6,default #jump table definition
msg: .asciiz "\nEnter Your Choice;\n [1] for build,\n [2] for insert,\n [3] for find,\n [4] for findMinMax,\n [5] for delete,\n [6] for print\n [0] for Exit\nYour choice:#"
.text
userInteraction:
li $v0,4 #print string
la $a0,msg #get string address
syscall

li $v0,5 #get a menu option from user(0 to 6)
syscall
move $s0,$v0 #get index in $s0

sll $s0,$s0,2 #$s0=index*4
la $t0,jTable #$t0=base address of the jump table
add $s0,$s0,$t0 #$s0+$t0 = actual address of jump label

**jr $s0** #jump to label

L0: Todo
j finish
L1: Todo
j userInteraction
L2: Todo
j userInteraction
L3: Todo
j userInteraction
L4: Todo
j userInteraction
L5: Todo
j userInteraction
L6: Todo
j userInteraction
default: Todo
j userInteraction
finish:
li $v0,10 #Exit
syscall #Exit

最佳答案

您试图跳转到存储地址的数组,这是没有意义的。您需要在jr之前从表中加载目标地址操作说明:

sll $s0,$s0,2       #$s0=index*4
la $t0,jTable #$t0=base address of the jump table
add $s0,$s0,$t0 #$s0+$t0 = actual address of jump label
lw $s0,($s0) # <-- load target address
jr $s0 #jump to label

关于mips - 在 MIPS 中使用跳转表(如何在 JT 数组中跳转标签),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15989983/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com