?? bitwise.c
字號:
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ +
+ bitwise.c - this file implements bitwise instructions +
+ AND, OR, XOR, NOT, BT, BS +
+ +
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
/* AND $r1, $r2, $r3*/
#define HANDLE_AND(); DBG_RUN0("Optimized HANDLE_AND\n"); \
R[RAM[R[$IP]+1]] = R[RAM[R[$IP]+2]] & R[RAM[R[$IP]+3]];\
R[$IP]=R[$IP]+4;
/* OR $r1, $r2, $r3*/
#define HANDLE_OR(); DBG_RUN0("Optimized HANDLE_OR\n"); \
R[RAM[R[$IP]+1]] = R[RAM[R[$IP]+2]] | R[RAM[R[$IP]+3]];\
R[$IP]=R[$IP]+4;
/* XOR $r1, $r2, $r3*/
#define HANDLE_XOR(); DBG_RUN0("Optimized HANDLE_XOR\n"); \
R[RAM[R[$IP]+1]] = R[RAM[R[$IP]+2]] ^ R[RAM[R[$IP]+3]];\
R[$IP]=R[$IP]+4;
/* NOT $r1, $r2*/
#define HANDLE_NOT(); DBG_RUN0("Optimized HANDLE_NOT\n"); \
R[RAM[R[$IP]+1]] = ~R[RAM[R[$IP]+2]];\
R[$IP]=R[$IP]+3;
/*-----------------------------------------------------------------*/
/* BT $r1, $r2, $r3 $r1=1 if $r3rd bit in $r2 is set, else 0*/
void handleBT()
{
int index;
U8 mask;
U8 bit; /* 0-63 */
DBG_RUN0("handleBT\n");
bit = R[RAM[R[$IP]+3]];
if(bit > 63)
{
ERROR0_LVL2("handleBT(): bit index is out of range");
bit = 63;
}
mask = (U8)0x1;
for(index=0;index<bit;index++)
{
mask = mask*2;
}
mask = R[RAM[R[$IP]+2]] & mask;
if(mask > 0){ R[RAM[R[$IP]+1]] = 0x1; }
else{ R[RAM[R[$IP]+1]] = 0x0; }
R[$IP]=R[$IP]+4;
return;
}/*end handleBT*/
/*-----------------------------------------------------------------*/
/* BS $r1, $r2 set $r2th bit in $r1 */
void handleBS()
{
int index;
U8 mask;
U8 bit; /* 0-63 */
DBG_RUN0("handleBS\n");
bit = R[RAM[R[$IP]+2]];
if(bit > 63)
{
ERROR0_LVL2("handleBS(): bit index is out of range");
bit = 63;
}
mask = (U8)0x1;
for(index=0;index<bit;index++)
{
mask = mask*2;
}
R[RAM[R[$IP]+1]] = R[RAM[R[$IP]+1]] | mask;
R[$IP]=R[$IP]+3;
return;
}/*end handleBS*/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -