Сборка MIPS, добавление в прыжок

У меня проблемы с моим ассемблерным кодом:

# Program testing 
        .text
        .globl  main

main:   ori $4,$0,1
        addiu $4,$4,2
        addiu $8,$10,4
        addiu $2,$1,1
        addiu $3,$1,1
        addiu $5,$1,1
        j main+8       #ERROR HERE
        sll $0,$0,0

# End of file

Я хочу добавить к своему прыжку. Мой профессор говорит, что это сработает, но я продолжаю получать ошибку парсера

Мои настройки MIPS в PCSPIM:
проверены на чистой машине, отложенные переходы и отложенная загрузка.

Кто-нибудь знает, что не так? Есть ли проблема с выравниванием слов?


person mazie    schedule 16.04.2015    source источник
comment
Возможно, SPIM просто не поддерживает это. Вы можете попробовать la $t0, main+8 / jr $t0, который SPIM, кажется, принимает.   -  person Michael    schedule 16.04.2015


Ответы (1)


Здесь нет проблем с выравниванием слов. Ваша проблема в том, что используемый вами ассемблер не интерпретирует label+displacement как целевой адрес.

Поскольку каждая инструкция занимает 4 байта, вы фактически пытаетесь перейти на две инструкции впереди метки main. Таким образом, просто добавьте новую метку там, где вы действительно нацеливаетесь на прыжок.

i.e.:

# Program testing 
        .text
        .globl  main

main:   ori $4,$0,1
        addiu $4,$4,2
jump_target:
        addiu $8,$10,4
        addiu $2,$1,1
        addiu $3,$1,1
        addiu $5,$1,1
        j jump_target       # main+8
        sll $0,$0,0

# End of file
person gusbro    schedule 16.04.2015