stocker une valeur d'un entier non signé (long de 2 octets) à une variable char non signée à l'aide d'opérateurs au niveau du bit?

StackOverflow https://stackoverflow.com/questions/1414555

Question

Comment mettre la valeur de 0x04 dans le registre 4 si le instruction était 1rxy? 1RXY-charge le registre R avec la valeur à l'adresse mémoire 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){

L'instruction réelle est 0x1404, cette division en deux octets, memloc1 et memloc2. Selon le format de 1rxy, ce qui signifie mettre la valeur "at" emplacement mémoire xy dans le registre r.

alors ici, le registre 4 ou le caractère non signé r4 devrait contenir la valeur à l'emplacement de mémoire 0x04, qui contiendrait un autre numéro.

Ma question est de savoir comment tester la variable de registre en déterminant le "r". ou 1 "r" xy in 1 "4" 04 et en plaçant la valeur conservée à l'emplacement xy dans la variable de char non signée r4

par exemple si l'emplacement de mémoire 0x04 est maintenu 0xFB .

J'espère que cela a du sens.

[modifier] Exemple

#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;
}
Était-ce utile?

La solution

Si je comprends bien, vous voulez mettre B4 en mémoire [0] et 04 en mémoire [1]. Ai-je raison?

Cela le fera.

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

Je pense que vous souhaitez ensuite vérifier B et 4 séparément dans la mémoire [0], puis passer à l'étape suivante. Droit?

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

Est-ce ce que vous cherchez?

Mettre à jour : pour votre problème de lecture, utilisez-le.

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

Ceci lit jusqu’à EOF et vous pouvez utiliser la valeur i après cette boucle pour savoir combien d’instructions sont lues et le mettre dans une variable, par exemple n_instr. Et puis pour les instructions en boucle, vous pouvez utiliser cette

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++;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top