简体   繁体   English

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

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

How do I put the value of 0x04 in register 4 if the instruction was 1rxy? 如果指令为1rxy,如何将0x04的值放入寄存器4? 1RXY-Load register R with the value at memory address XY 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){

The actual instruction is 0x1404, this split into two bytes, memloc1 and memloc2. 实际指令为0x1404,该指令分为两个字节,即memloc1和memloc2。 According to the format of 1rxy, which means to put value "at" memory location xy in register r. 根据1rxy的格式,这意味着将值“放在”存储位置xy到寄存器r中。

so here register 4 or unsigned char r4 would have to hold the value at memory location 0x04 which would hold some other number. 因此,这里的寄存器4或unsigned char r4必须将值保存在存储位置0x04上,该位置将保存其他一些数字。

My question is how do I test for the register variable by determining the "r" or 1"r"xy in 1"4"04 and placing the value held at the location xy into the unsigned char variable r4 我的问题是如何通过确定1“ 4” 04中的“ r”或1“ r” xy并将放置在位置xy的值放入无符号char变量r4测试寄存器变量

for example if memory location 0x04 held 0xFB . 例如,如果内存位置0x04保持0xFB

I hope this makes sense. 我希望这是有道理的。

[edit] Example [编辑] 例子

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

If i understand correctly, you want to put B4 in memory[0] and 04 in memory[1]. 如果我理解正确,则要将B4放入内存[0],将04放入内存[1]。 Am i right? 我对吗?

This will do that. 这样就可以了。

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

I think, next you want to check B and 4 seperately on memory[0] and then proceed to your next step. 我认为,接下来您要分别检查memory [0]上的B和4,然后继续执行下一步。 Right? 对?

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

Is this what you are looking for? 这是你想要的?

Update : For your reading problem, you should be using this . 更新 :对于您的阅读问题,您应该使用this。

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

This reads till EOF and you could use i value after this loop to know how many instructions are read and put it in a variable say n_instr. 读到EOF为止,您可以在此循环后使用i值来知道读取了多少指令并将其放入变量n_instr中。 And then for looping thro' instructions you could use this 然后循环使用“指令”,您可以使用此指令

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