

Pythonで32ビットレジスタの動作を疑似することは出来ますか？

[code]

    EAX = AX + AH,AL
    AX  = AH + AL
    
[/code]

当然、ALはAHに桁上がりするみたいな。

C++では以下のような宣言で、疑似できるかと思うんですが、Pythonでどうでしょうか？

[code]

    union REG{
        DWORD e;
        struct{
            WORD x,xh;;
        };
        struct{
            BYTE l,h;
        };
    };
    
    REG regA;
    
[/code]


CC BY-SA 4.0
2020-09-12T13:46:12.047
70332
2020-09-13T03:21:31.090
2020-09-12T15:57:59.633
3060
15090
question
python python3
Pythonでレジスタ動作を模倣したい


> C++では以下のような宣言で、疑似できるかと思う

提示されたコードは単に32bitデータの一部を16bitまたは8bit単位で取得・設定できると言うだけのものなので、それと同等のことであれば、プロパティを使って似たようなことはできます。

[code]

    class REG:
      def __init__(self):
        self.e = 0
      @property
      def x(self):
        return self.e & 0xFFFF
      @property
      def xh(self):
        return (self.e >> 16) & 0xFFFF
      @property
      def l(self):
        return self.e & 0xFF
      @property
      def h(self):
        return (self.e >> 8) & 0xFF
      @x.setter
      def x(self, val):
        self.e = (self.e & 0xFFFF0000) | (val & 0xFFFF)
      @xh.setter
      def xh(self, val):
        self.e = (self.e & 0xFFFF) | ((val & 0xFFFF) << 16)
      @l.setter
      def l(self, val):
        self.e = (self.e & 0xFFFFFF00) | (val & 0xFF)
      @h.setter
      def h(self, val):
        self.e = (self.e & 0xFFFF00FF) | ((val & 0xFF) << 8)
    
    r = REG()
    r.e = 0x1234ABCD
    print(hex(r.e)) #-> 0x1234abcd
    r.x = 0x5678
    print(hex(r.e), hex(r.x)) #-> x12345678 0x5678
    r.xh = 0x90EF
    print(hex(r.e), hex(r.xh)) #-> 0x90ef5678 0x90ef
    r.l = 0x12
    print(hex(r.e), hex(r.l)) #-> 0x90ef5612 0x12
    r.h = 0xAB
    print(hex(r.e), hex(r.h)) #-> 0x90efab12 0xab
    
[/code]


CC BY-SA 4.0
2020-09-13T03:21:31.090
70338
2020-09-13T03:21:31.090
13972
70332
answer