تخزين قيمة من صحيح غير الموقعة (2bytes طويلة) إلى غير موقعة تشار متغير باستخدام المعامل المشغلين ؟

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

سؤال

كيف يمكنني وضع قيمة 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 في char غير الموقعة متغير r4

على سبيل المثال إذا كان موقع الذاكرة 0x04 عقد 0xFB.

آمل أن يكون هذا منطقي.

[عدل] على سبيل المثال

#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;
}
هل كانت مفيدة؟

المحلول

إذا فهمت بشكل صحيح, كنت تريد أن تضع 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]

أعتقد القادمة كنت ترغب في التحقق من ب و 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 و هل يمكن استخدام قيمة بعد هذه الحلقة أن تعرف كيف العديد من التعليمات قراءة ووضعها في متغير أقول 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++;
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top