vc中内嵌asm时的bug
在语法上, 我们通常认为以下的两条语句是等价的:
mov ecx, offset DATA_LABLE //其中DATA_LABLE是数据定义标签
lea ecx, DATA_LABLE
而更进一步, 我们也会认为以下两句是等价的:
mov ecx, ebp-8
lea ecx, [ebp-8]
第一种, 用的是存储器寻址方式; 而第二种, 用的是寄存器寻址和寄存器间接寻址方式. 让我意想不到的是, 在第二种情况下, vc的处理并没有让寄存器寻址和寄存器间接寻址方式的mov和lea两者之间实现等价. 在使用 _asm{} 的方式将"mov ecx, ebp-8"这条语句括起来编译之后, 很遗憾地, 我在vc的反汇编窗口发现它变成了这样的一条语句: "mov ecx, ebp". 啊哦, 我的"-8"竟然不翼而飞了! 到目前为止, 我尚没有查到造成这种现象的原因所在, 我只能暂时将它归为vc的bug了.
对gcc下会不会存在这个问题呢? 为更进一步证实, 我使用gcc重新写了这句代码: "mov ecx, ebp-8", 但重写后的代码由当初...[ 查看全文 ]