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毫秒