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

Я использую архитектуру SPARC. Я должен обновить число long, переданного в качестве аргумента, не возвращая его, но я не знаю, как это сделать, потому что входные регистры используются как для параметров, так и для возврата значения. Я видел, используя такие инструкции, как

add   %l0, %l1, %i1

что возможно изменить содержимое регистра i, но, насколько я могу судить, это изменяет "копию" параметра, а не сам параметр. Я экспериментировал с командой load и командой store такими способами, как

ld    [%o1], %i1

а также

st    %l1, [%fp-8]

и они, кажется, не меняют то, что мне нужно изменить.

1 ответ

Я понял. Инструкция save делает аргумент доступным в регистре in (в моем случае%i1), и оттуда он просто

st %l1, [%i1 + 1]

и я должен убедиться, что число вместо 4 совместимо с количеством байтов между элементами массива. Так что в этом случае +1 работает для массива символов.

Другие вопросы по тегам