o armazenamento de um valor a partir de um número inteiro sem sinal (2bytes longos) a uma variável de char não assinado utilizando operadores de bits?
-
06-07-2019 - |
Pergunta
Como faço para colocar o valor de 0x04 no registo 4 se o instrução foi 1rxy? 1RXY-Load registo R com o valor em XY endereço de memória
#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){
A instrução real é 0x1404, este divididos em dois bytes, memloc1 e memloc2. De acordo com o formato de 1rxy, que os meios de colocar o valor "no" memória xy localização no registo r.
então aqui registrar 4 ou unsigned char r4
teria que manter o valor na posição de memória 0x04 que iria realizar algum outro número.
A minha pergunta é como fazer teste de I para a variável de registo através da determinação do "r" ou 1 xy "r" em 1 "4" 04 e colocando o valor realizado na xy localização na variável unsigned char r4
Por exemplo, se local de memória 0x04
realizada 0xFB
.
Espero que este sentimento marcas.
[editar] Exemplo
#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;
}
Solução
Se bem entendi, você quer colocar B4 na memória [0] e 04 na memória [1]. Estou certo?
Isso vai fazer isso.
memory[0] = ((x & 0xFF00) >> 8 ); //Will put B4 in memory[0]
memory[1] = (x & 0xFF); //Will put 04 in memory[1]
Eu acho que, na próxima você quiser verificar B e 4 separadamente na memória [0] e, em seguida, avançar para o próximo passo. Certo?
(memory[0] & 0xF0) >> 4 // will give you 0xB
(memory[0] & 0x0F) //will give you 0x4
É isso que você está procurando?
Atualizar :. Para o seu problema de leitura, você deve estar usando este
while (!feof(f))
{
fscanf(f,"%X",&inst[i]);
i++;
}
Isto lê até EOF e você poderia usar o valor i após este loop para saber quantas instruções são lidas e colocá-lo em um n_instr digamos variável. E, em seguida, para looping thro instruções você poderia usar este
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++;
}