[an error occurred while processing this directive]
|
//"скоростные" переменные общего пользования
// для работы с командами асемблера
// а также для операторов цикла
// при входе в функию или процедуру переменые
// следует сохранить: 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: info@telesys.ru