[an error occurred while processing this directive]
"скоростные" переменные общего пользования(+)Чуть не обосался со смеху,во кретины!
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Smehov 07 июня 2005 г. 12:03

//"скоростные" переменные общего пользования
// для работы с командами асемблера
// а также для операторов цикла
// при входе в функию или процедуру переменые
// следует сохранить: save_asm_var();
// и до выхода востановить: ret_asm_var();

// save_asm_var();
// копирование 4-х рег.

// char a_ @0x7c;
// char a_ @0x7d;
// char a_ @0x7e;
// char a_ @0x7f;
// присвоить псевдоним

// ret_asm_var();
// востановление 4-х рег.
//-------------------------------------------

// st_adr_asm_var@0x110;
// указатель
//___________________________________________

// st_stek_adr@0x190;
// указатель стека


// push(dan);
// сохранить в стек
// макс.>>> 4 на одном уровне
// кол-во сохр.
// макс.>>> 31 общее
// кол-во сохр.

// dan=pop();
//достать из стека
// макс.>>> 4 на одном уровне
// кол-во сохр.
// макс.>>> 31 общее
// кол-во сохр.

//******************************************
char st_stek_buf_31[32];
// буфер стека
char st_stek_adr@0x190;
// указатель стека
//-------------------------------------------
char st_adr_asm_var@0x110;
// указатель
//-------------------------------------------
char st_asm_var_tmp_0 @0x7c;
char st_asm_var_tmp_1 @0x7d;
char st_asm_var_tmp_2 @0x7e;
char st_asm_var_tmp_3 @0x7f;
char buf_st_asm_var_tmp_31[32];
//-------------------------------------------

void save_asm_var(void)
{
buf_st_asm_var_tmp_31[st_adr_asm_var]=st_asm_var_tmp_0;
st_adr_asm_var= ++st_adr_asm_var & 31;
buf_st_asm_var_tmp_31[st_adr_asm_var]=st_asm_var_tmp_1;
st_adr_asm_var= ++st_adr_asm_var & 31;
buf_st_asm_var_tmp_31[st_adr_asm_var]=st_asm_var_tmp_2;
st_adr_asm_var= ++st_adr_asm_var & 31;
buf_st_asm_var_tmp_31[st_adr_asm_var]=st_asm_var_tmp_3;
st_adr_asm_var= ++st_adr_asm_var & 31;
// копирование 4-х рег.
}
//----------------------------------------
void ret_asm_var(void)
{
st_adr_asm_var= --st_adr_asm_var & 31;
st_asm_var_tmp_3 =buf_st_asm_var_tmp_31[st_adr_asm_var];
st_adr_asm_var= --st_adr_asm_var & 31;
st_asm_var_tmp_2 =buf_st_asm_var_tmp_31[st_adr_asm_var];
st_adr_asm_var= --st_adr_asm_var & 31;
st_asm_var_tmp_1 =buf_st_asm_var_tmp_31[st_adr_asm_var];
st_adr_asm_var= --st_adr_asm_var & 31;
st_asm_var_tmp_0 =buf_st_asm_var_tmp_31[st_adr_asm_var];
// востановление 4-х рег.
}
//******************************************



void push(char dan)
{
st_stek_buf_31[st_stek_adr]=dan;
st_stek_adr= ++st_stek_adr & 31;
}

char pop(void)
{
st_stek_adr= --st_stek_adr & 31;
return st_stek_buf_31[st_stek_adr];
}

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru