使用按位运算符将无符号整数(2字节长)的值存储到unsigned char变量?

时间:2009-09-12 07:32:09

标签: c char int bit-manipulation unsigned

如果instruction是1rxy,如何将0x04的值放入寄存器4? 1RXY-加载寄存器R,其值为存储器地址XY

#include <stdio.h>

unsigned char r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,ra,rb,rc,rd,re,rf;

void reg_check(unsigned char reg);
void rxy1(unsigned char reg, unsigned char val);

int main(){
    unsigned char memloc1=0x14;
    unisgned char memloc2=0x04;

    unsigned char temp,reg,val_add;
    temp=(x && 0xFF00) >> 8;

    if (temp = 0xB){
        reg=(memloc1 &0x0F);
        val_add=memloc2;
        rxy1(reg,val_add);
    }

    return 0;
}
void reg_check(unsigned char reg){

}
void rxy1(unsigned char reg, unsigned char val){

实际指令是0x1404,这分为两个字节,memloc1和memloc2。根据1rxy的格式,这意味着将值“置于”寄存器r中的存储位置xy。

所以这里寄存器4或unsigned char r4必须保存在存储单元0x04的值,这将保留一些其他数字。

我的问题是我如何通过确定1“4”04中的“r”或1“r”xy并将保持在xy位置的值放入unsigned char变量{{1}来测试寄存器变量}

例如,如果内存位置r4持有0x04

我希望这是有道理的。

[编辑] 实施例

0xFB

1 个答案:

答案 0 :(得分:1)

如果我理解正确,你想把B4放在内存[0]和04中的内存[1]中。我是对的吗?

这样就可以了。

memory[0] = ((x & 0xFF00) >> 8 ); //Will put B4 in memory[0]
memory[1] = (x & 0xFF); //Will put 04 in memory[1]

我想,接下来你要在内存[0]上单独检查B和4,然后继续下一步。正确?

(memory[0] & 0xF0) >> 4 // will give you 0xB
(memory[0] & 0x0F) //will give you 0x4

这是你在找什么?

更新:对于您的阅读问题,您应该使用此功能。

while (!feof(f))
{
    fscanf(f,"%X",&inst[i]);
    i++;
}

这读取直到EOF,您可以在此循环后使用i值来知道读取了多少指令并将其放入变量n_instr中。然后,为了循环thro'指令,你可以使用这个

while(loop<n_instr) //instead of just loop<80
{
        memory[j] = ((inst[loop] & 0xFF00) >> 8 );
        j=j+2;
        memory[k] = (inst[loop] & 0x00FF);
        k=k+2;

        loop++;
}