69,368
社区成员
发帖
与我相关
我的任务
分享
unsigned long long INSN_LD(unsigned long long *pc){
*regFile.ir = (long long)(*( unsigned int *)(memBlock.memBase + *pc)); // 取指令
unsigned int rsNum = (*regFile.ir); // 截断long long 型数据低32位
printf("rsNum %x", rsNum);
rsNum = rsNum & RS_MASK;
rsNum = rsNum >> RS_RIGHT_SHIFT; // 右移21位
printf("rsNum %x", rsNum);// 指令与掩码按位与,取寄存器RS的号码。
printf("%x", rsNum);
unsigned short immediate = (unsigned short)(*regFile.ir); // 小端机,取指令的低2字节,就是偏移量。
int address = regFile.regBase[rsNum] + immediate; // 数据地址
unsigned int rtNum = *(unsigned int*)(*regFile.ir) >> RT_RIGHT_SHIFT; // 右移16位RT寄存器号
rtNum = rtNum & REG_NUM_MASK; // 目的寄存器号
regFile.regBase[rtNum] = *(long long *)(memBlock.memBase + address);
*pc += 4; // pc指向下一条指令的地址
return *pc;
}
#include <stdio.h>
unsigned short int ui;
signed short int si;
int main() {
ui=(unsigned short int)0x8000u;
si=( signed short int)0x8000;
printf("ui=%u\n",ui);
printf("si=%d\n",si);
ui=ui>>1;
si=si>>1;
printf("ui=%u\n",ui);
printf("si=%d\n",si);
printf("--------------\n");
ui=(unsigned short int)0x8000u;
si=( signed short int)0x8000;
printf("ui=%u\n",ui);
printf("si=%d\n",si);
ui=(( signed short int)ui)>>1;
si=((unsigned short int)si)>>1;
printf("ui=%u\n",ui);
printf("si=%d\n",si);
return 0;
}
//ui=32768
//si=-32768
//ui=16384
//si=-16384
//--------------
//ui=32768
//si=-32768
//ui=49152
//si=16384