C_and_CPP 版 (精华区)

发信人: Lucifer (路西法·天堂与地狱), 信区: C_and_CPP
标  题: Re: 问一个简单的问题!!
发信站: 哈工大紫丁香 (Mon Apr  4 23:26:44 2005), 转信

在vc 下的程序:

    11:     m=-1;

004120AE C6 45 FB FF      mov         byte ptr [ebp-5],0FFh 

    12:     if(m==-1)

004120B2 0F B6 45 FB      movzx       eax,byte ptr [ebp-5] ;此时的eax值为
                                                           ;000000FFh

004120B6 83 F8 FF         cmp         eax,0FFFFFFFFh       ;000000FFh和
                                                           ;0FFFFFFFFh比,
                                                           ;结果可想而知

004120B9 75 11            jne         004120CC 

因此,可以看出来,因为m是unsigned的char。所以其大小为1字节。

当同一个32位的(-1)进行比较时,系统对m按照unsigned的扩展方式进行零扩展movzx。
所以自然而然的扩展成000000FFh,同32位的(-1)也即0FFFFFFFFh进行cmp操作,
其结果当然是非零跳转。


【 在 sunnier (流云) 的大作中提到: 】
: #include <iostream.h>
: void main()
: {
: ...................

--
╒═════════════╗
│   The pact is sealed     ║
└─────────────╜


※ 修改:·Lucifer 于 Apr  4 23:27:58 修改本文·[FROM: 218.10.128.119]
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 218.10.128.119]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.357毫秒