сохранить значение от целого числа без знака (длиной 2 байта) до переменной знака без знака с помощью побитовых операторов? - PullRequest
0 голосов
/ 12 сентября 2009

Как поместить значение 0x04 в регистр 4, если инструкция была 1rxy? 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, которое будет содержать какое-то другое число.

Мой вопрос заключается в том, как мне проверить переменную регистра, определив "r" или 1 "r" xy в 1 "4" 04 и поместив значение, хранящееся в местоположении xy, в переменную без знака 1012 *

например, если ячейка памяти 0x04 удерживается 0xFB.

Надеюсь, это имеет смысл.

[править] * ** 1023 тысяча двадцать-дв * Пример

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

1 Ответ

1 голос
/ 12 сентября 2009

Если я правильно понимаю, вы хотите поместить 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]

Я думаю, что затем вы хотите отдельно проверить B и 4 в памяти [0], а затем перейти к следующему шагу. Правильно?

(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. А затем для выполнения инструкций вы можете использовать это

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