C语言右移结果出错?
如题,我在取指令码中的寄存器号时用到掩码和右移,但是右移结果出错了。如下图:






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;
}
...全文
相关推荐
C++,C笔试软件开发
#### 四、运算符优先级**题目4**: C语言中,下列运算符优先级最高的是?- **选项分析**: - A. `!
C基础补习资料
这些宏定义在调试过程中非常有用,可以方便地获取到出错位置的信息。### 2. C 语言关键字分类#### 数据类型关键字 (5个)- **`void`**:无类型。- **`char`**:字符类型。
嵌入式软件工程师笔试题.doc
#### 题目4:运算符优先级**题目描述**:C 语言中,下列运算符优先级最高的是:- A. `!`(逻辑非)- B. `%`(取模)- C. `>>`(右移)- D.
华东理工大学《C语言程序设计》期末考试复习练习题(含答案).pdf
例如,“v|u”计算的是变量v和u的按位或结果;“v|u>>1”则是先对u进行右移一位,然后与v进行按位或运算。3. 条件表达式:在C语言中,条件表达式通常用于if和switch语句中进行条件判断。
C语言程序设计标准教程
C 第二章: 数据类型、运算符、表达式C语言的数据类型 在第一课中,我们已经看到程序中使用的各种变量都应预先加以说明,即先说明,后使用。对变量的说明可以包括三个方面:?数据类型?存储类型?作用域


