einen Wert aus einem unsigned integer (2 Bytes lang) zu einem unsigned char Variable bitweisen Operatoren Speichern?

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

Frage

Wie kann ich den Wert von 0x04 in Register 4, wenn die Anweisung 1rxy war? 1RXY-Load-Register R mit dem Wert an der Speicheradresse 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){

Die tatsächliche Anweisung ist 0x1404, diese Aufspaltung in zwei Bytes, memloc1 und memloc2. Entsprechend das Format von 1rxy, was bedeutet Wert zu setzen „at“ Speicherplatz xy im Register r.

so melden Sie sich hier 4 oder unsigned char r4 müßte, um den Wert an der Speicherstelle 0x04 halten, die eine andere Zahl halten würden.

Meine Frage ist, wie kann ich für die Registervariable zu testen, indem die „R“ oder 1 „r“ xy in 1 „4“ 04 zu bestimmen und den Wert an der Stelle xy in dem unsigned char variable r4 gehalten Platzierung

zum Beispiel, wenn Speicherplatz 0x04 gehalten 0xFB.

Ich hoffe, das macht Sinn.

[Bearbeiten] Beispiel

#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;
}
War es hilfreich?

Lösung

Wenn ich richtig verstehe, wollen Sie B4 in dem Speicher stellen [0] und 04 im Speicher [1]. Habe ich Recht?

Dies wird das tun.

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

Ich glaube, nächstes Sie B und 4 separat auf Speicher überprüfen wollen [0] und dann zu Ihrem nächsten Schritt fortfahren. Richtig?

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

Ist das, was Sie suchen?

Aktualisieren :. Für die Leseproblem, sollten Sie diese werden mit

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

Dieses liest, bis EOF und man konnte ich nach dieser Schleife Wert verwenden zu wissen, wie viele Anweisungen gelesen und in einer Variablen n_instr sagen setzen. Und dann thro‘Anweisungen zum Einschleifen Sie könnten so

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++;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top