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.