Простейшая программа на ассемблере

Рейтинг: 0Ответов: 1Опубликовано: 06.09.2014

Здравствуйте. Помогите с написанием программы на "псевдоассемблере".

Условие:

x=2; y=0;
while(x<1024)
{
x=x*x;
y+=x;
}
return y;

x хранится в 100-й ячейке, а y - в 101-й.

Вот первые команды:

КОП Ах, #100 ;(копируем из 100-й ячейки в Ах)
КОП Вх, #101 ;(копируем из 101-й ячейки в Вх)
КОП Сх, Ах
УМН Сх, Ах ; умножаем Сх на Ах
УМН Сх, Сх
УМН Сх, Сх
УМН Сх, Сх
УМН Сх, Сх
УМН Сх, Сх
УМН Сх, Сх
УМН Сх, Сх
УМН Сх, Сх

И дальше не понимаю, что нужно написать. Еще возможно использовать следующие мнемокоды:

NOT Ах ; отрицание
ИНК Ах ; +1
ЛДС и ПДС - циклические сдвиги
СДЛ и СДП - нециклические сдвиги
СТОП - безусловный переход
СРВ Ах, Вх - сравнение

Ответы

▲ 1Принят

Ребята. В начале кода же написано x=2; а потом while(x<1024). Так что можно обойтись без условного перехода, просто 10 раз продублировав x=x*x; и y+=x; (так как 2^10 = 1024). То есть развернуть цикл в линейный код. Оптимизирующие компиляторы так и делают, выигрывая в скорости. Только вот вижу для x=x*x команду УМН Сх, Сх и нет команды для y+=x.

Хотя, подумав еще раз...
2*2 = 4; 4*4 = 16; 16*16 = 256; 256*256 < 1024 STOP ==> 4 раза цикл должен быть исполнен.