2013-04-12 3 views
0

В настоящее время я пишу функции с использованием языка образовательной ассемблера Y86, AT & T синтаксиса и пытаюсь выполнить/обойти что-то, что не поддерживается. Я хочу добавить число к значению, хранящемуся в памяти, и по какой-то глупой причине вы можете использовать addl для добавления в регистр. Я не знаю, почему это так.Запуск регистров и возникновение проблем с Y86

Внутри функции я хочу сделать что-то такое, как это и не знаю, как:

addl $1, -4(ebp) 

Кроме того, я, кажется, есть проблема запуска из регистров. Может быть, это потому, что я не знаю, как освободить место для хранения локальных переменных. Я слышал, что существует концепция, в которой регистры сохраняются вызывающим и вызываемым. Я был бы очень признателен за любые команды, которые равны тому, что выше, но в Y86. Также любые советы по сохранению регистров были бы замечательными! СПАСИБО! Я знаю, что смотреть на этот материал - настоящая боль.

ответ

0

В x86 и Y86 тоже регистры могут быть сдвинуты в стек с помощью push и выведены из стека с помощью pop. Как это:

push %ax ; push ax into stack 

; some code here that may overwrite ax. 

pop %ax ; pop ax from stack 

x86 имеет ограниченное число регистра, столько раз нужно использовать память для некоторых переменных.

Чтобы создать пространство в стеке для локальных переменных, вам необходимо создать фрейм стека. См. What is stack frame in assembly?.