繁体   English   中英

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

[英]storing a value from an unsigned integer (2bytes long) to an unsigned char variable using bitwise operators?

如果指令为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的格式,这意味着将值“放在”存储位置xy到寄存器r中。

因此,这里的寄存器4或unsigned char r4必须将值保存在存储位置0x04上,该位置将保存其他一些数字。

我的问题是如何通过确定1“ 4” 04中的“ r”或1“ r” xy并将放置在位置xy的值放入无符号char变量r4测试寄存器变量

例如,如果内存位置0x04保持0xFB

我希望这是有道理的。

[编辑] 例子

#include <stdio.h>
int main(){
    unsigned char r0,r2,r3,r4;
    unsigned char mem1=0x14;  //at lmemory address 00
    unsigned char mem2=0x04;  //at lmemory address 01



    unsigned char reg_val_store=mem1 & 0x0F;


    if( ((mem1= & 0xF0) >> 4) == 0x1){
        if (reg_val_store == 0x4){
            //then put value store at memory address "04" into register 4.
            //and just say for example "0xFD" was at memory location "04"
            //since register value is 4 from the instruction read in 0x1"4"04

            //i want to put 0xFD in the r4 unsigned char variable, how do i do this?
            r4=0xFD; // this is of course correct but the instruction read in changes and 
                // so does the register variable. how do i modify my code for this change?
        }
    }

    return 0;
}

如果我理解正确,则要将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]

我认为,接下来您要分别检查memory [0]上的B和4,然后继续执行下一步。 对?

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

这是你想要的?

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

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

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

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++;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM