下面是Right构造函数的汇编码:

??0Right@@QAE@HH@Z PROC                    ; Right::Right, COMDAT
; _this$ = ecx

; 20   :     Right(int kk, int ii) : Top(ii) {

    push    ebp
    mov    ebp, esp
    push    ecx;压栈ecx的目的是为了保存对象Right的首地址预留空间
    mov    DWORD PTR _this$[ebp], ecx;ecx寄存器保存有对象Right的首地址,存放到刚才预留空间
    cmp    DWORD PTR _$initVBases$[ebp], 0;_$initVBases所代表的内存存放调用Right构造函数时传入的标志,其值为0,说明
                                       ;这里将其值与0比较
    je    SHORT $LN1@Right;如果比较相等,跳转到标号处执行$LN1@Right,不会调用虚基类的构造函数,否则,顺序执行,这里跳转到标号执行
                        ;所有标号之前的语句在构造对象b时都不会执行
    mov    eax, DWORD PTR _this$[ebp];将对象Right的首地址给寄存器eax
    mov    DWORD PTR [eax], OFFSET ??_8Right@@7B@;将??_8Right@@7B@的所带表的内存地址(即Right的vtable首地址)写入到对象Right的首地址处内存
    mov    ecx, DWORD PTR _ii$[ebp];将参数ii的值给寄存器ecx
    push    ecx;压栈ecx,为调用Top构造函数传递参数
    mov    ecx, DWORD PTR _this$[ebp];将对象Right首地址给寄存器ecx
    add    ecx, 8;将对象Right的首地址加8,得到对象Top首地址,作为隐含参数传递给Top的构造函数
    call    ??0Top@@QAE@H@Z                ; 调用Top构造函数
$LN1@Right:

; 21   :         k = kk;

    mov    edx, DWORD PTR _this$[ebp];将Right首地址给寄存器edx
    mov    eax, DWORD PTR _kk$[ebp];将参数kk的值给寄存器eax
    mov    DWORD PTR [edx+4], eax;将eax里面的值写入偏移对象Right首地址4byte处,即为成员变量k赋值kk

; 22   :     }

    mov    eax, DWORD PTR _this$[ebp]
    mov    esp, ebp
    pop    ebp
    ret    12                    ; 0000000cH
??0Right@@QAE@HH@Z ENDP

  下面是Top函数的汇编码:

??0Top@@QAE@H@Z PROC                    ; Top::Top, COMDAT
; _this$ = ecx

; 4    :     Top(int ii) {

    push    ebp
    mov    ebp, esp
    push    ecx;压栈的目的是为保留对象Top的首地址预留空间
    mov    DWORD PTR _this$[ebp], ecx;ecx寄存器里面含有对象Top的首地址,存到刚才预留的空间

; 5    :         i = ii;

    mov    eax, DWORD PTR _this$[ebp];将对象Top的首地址给寄存器eax
    mov    ecx, DWORD PTR _ii$[ebp];将参数ii的值给寄存器ecx
    mov    DWORD PTR [eax], ecx;将ecx的值写入对象Top首地址处,即给成员变量i赋值ii

; 6    :     }

    mov    eax, DWORD PTR _this$[ebp]
    mov    esp, ebp
    pop    ebp
    ret    4
??0Top@@QAE@H@Z ENDP