Source:
class someobj {
    unsigned char m_cC;
public:
    void somebuggyfunction();
    void somefunction();
}
somepublicfunction()
{
    __asm   mov dx, 0x300
    __asm   mov al, m_cC
    __asm   out dx,al
}
void someobj::somebuggyfunction()
{
    __asm   mov dx, 0x300
    __asm   mov al, m_cC
    __asm   out dx,al
}
void someobj::somefunction()
{
    m_cC = 0x56;
}
Obj2ASM output:
_TEXT   segment dword use32 public 'CODE'       ;size is 28
_TEXT   ends
_DATA   segment dword use32 public 'DATA'       ;size is 0
_DATA   ends
CONST   segment dword use32 public 'CONST'      ;size is 0
CONST   ends
_BSS    segment dword use32 public 'BSS'        ;size is 0
_BSS    ends
FLAT    group
includelib SNN.lib
 
        public  ?somepublicfunction@@YA?AVsomeobj@@XZ
        public  ?somebuggyfunction@someobj@@QAEXXZ
        public  ?somefunction@someobj@@QAEXXZ
_TEXT   segment
        assume  CS:_TEXT
?somepublicfunction@@YA?AVsomeobj@@XZ:
                mov     DX,0300h
                mov     AL,0
                out     DX,AL
                ret
?somebuggyfunction@someobj@@QAEXXZ:
                enter   4,0
                mov     -4[EBP],ECX
                mov     DX,0300h
                mov     AL,0
                out     DX,AL
                leave
                ret
?somefunction@someobj@@QAEXXZ:
                mov     byte ptr [ECX],056h
                ret
_TEXT   ends
_DATA   segment
_DATA   ends
CONST   segment
CONST   ends
_BSS    segment
_BSS    ends
        end
My Comments:
The "somepublicfunction" did not report the error on using m_cC in the inline assembly - since
m_cC is not declared as a global variable.
 
The same thing with someobj::somepublicfunction which failed to generate the someobj::m_cC
reference.
 
someobj::somefunction appears to be OK.