先贴一段代码:

跟踪后看到:

无论是给bool类型赋值为正整数 还是true,都会转变为1。

那么float和double类型如何转换为bool类型?

将bool类型赋值给int类型变量,就是借助了寄存器eax,将1byte的值放入eax,再从eax取出dword宽度的值即可。但是问题来了,程序在刚开始“初始化”时会有一段代码:

会将eax赋值为:

eax是32位的,存入1byte的时候,会变成CCCCCC01,你如何保证再取出dword(32位)给i1时,其它高位变成0?这就要靠movzx了!这就是movzx与mov不同的地方:

movzx一般用于将较小值拷贝到较大值中。movzx是将源操作数的内容拷贝到目的操作数,并将该值0扩展至16位或者32位。但是它只适用于无符号整数(说白了,填充0,是进行无符号扩展)。 他大致有的三种格式:

movzx 32位通用寄存器, 8位通用寄存器/内存单元
movzx 32位通用寄存器, 16位通用寄存器/内存单元
movzx 16位通用寄存器, 8位通用寄存器/内存单元
例如
令eax=00304000h,若执行 movzx eax, ax后 eax = 00004000h ;若执行 movzx eax, ah后 eax = 00000040h。
又如:
MOV BL,80H
MOVZX AX,BL
运行完以上汇编语句之后,AX的值为0080H。由于BL为80H,最高位也即符号位为1,但在进行无符号扩展时,其扩展的高8位均为0,故赋值AX为0080H。

总之,movzx其实就是将我们的源操作数取出来,然后置于目的操作数,目的操作数其余位用0填充

对于signed和unsigned char

同样是赋值以0FFh,但是不同类型的对象对这个二进制数的解释不同:

输出结果为:

将-1赋值给unsigned char ,输出的结果是255,说明0FFh被解释为unsigned char类型了,这也进一步说明,如果一个“式子”中,同时有signed和unsigned 类型,会自动将signed类型转换为unsigned类型

进一步观察,当我们企图输出c1和sc2时,仔细观察二者汇编代码的区别:

前者是movzx,而后者是movsx,之前讲了movzx,现在我们再来讲讲movsx:

movsx是传送并进行符号扩展,由于sc2是signed,所以,要考虑占用1byte空间的它扩充为dword大小之后,多出来的空间用什么填充,当然是用符号位填充,这样,如果sc2原本是正的,扩充到dword之后仍是正的,如果是负的,扩充到dword之后仍是负的。

例如,MOV BL,80H

MOVSX AX,BL
运行完以上汇编语句之后,AX的值为FF80H。由于BL为80H=1000 0000,最高位也即符号位为1,在进行带符号扩展时,其扩展的高8位均为1,故赋值AX为1111 1111 1000 0000,即AX=FF80H。
再例如,mov CL, 50H

MOVSX AX, CL
50H=0101 0000,最高位为0,则AX为0000 0000 0101 0000
结果AX = 50H
最后再来说下"cout <<":
这里的三个push是operator<<函数的三个参数,可以查看内存得知:
第三个push进来的参数正好是这个字符串。
 
 
 
 
 
 

Disassembly2:Built-in Type的更多相关文章

  1. POJ 2947 Widget Factory(高斯消元)

    Description The widget factory produces several different kinds of widgets. Each widget is carefully ...

  2. Struts(二十):自定义类型转换器

    如何自定义类型转换器: 1)为什么需要自定义类型转化器?strtuts2不能自动完成字符串到所有的类型: 2) 如何定义类型转化器? 步骤一:创建自定义类型转化器的类,并继承org.apache.st ...

  3. poj2947 高斯消元

    Widget Factory Time Limit: 7000MS   Memory Limit: 65536K Total Submissions: 5218   Accepted: 1802 De ...

  4. Widget Factory (高斯消元解线性方程组)

    The widget factory produces several different kinds of widgets. Each widget is carefully built by a ...

  5. 【POJ】2947 Widget Factory(高斯消元)

    http://poj.org/problem?id=2947 各种逗啊..还好1a了.. 题意我就不说了,百度一大把. 转换为mod的方程组,即 (x[1,1]*a[1])+(x[1,2]*a[2]) ...

  6. POJ Widget Factory 【求解模线性方程】

    传送门:http://poj.org/problem?id=2947 Widget Factory Time Limit: 7000MS   Memory Limit: 65536K Total Su ...

  7. UI Framework-1: views Windowing

    views Windowing views provides support for creating dialog boxes and other kinds of windows through ...

  8. POJ 2947:Widget Factory 求同余方程

    Widget Factory Time Limit: 7000MS   Memory Limit: 65536K Total Submissions: 5173   Accepted: 1790 De ...

  9. 错误提示:The project was not built since its build path is incomplete. Cannot find the class file for java.lang.Object. Fix the build path then try building this project The type java.lang.Object cannot b

    原文:http://www.cnblogs.com/mmzs/p/7662863.html 错误类型: 搞了很久才找到原因.解决办法写出来分享: 出现以上错误的原因是玩耍maven时多装了个jre.本 ...

随机推荐

  1. WinHex V18.7(16进制编辑器) 多国语言绿色版

    软件名称: WinHex V18.7(16进制编辑器)软件语言: 简体中文授权方式: 免费试用运行环境: Win7 / Vista / Win2003 / WinXP 软件大小: 1.7MB图片预览: ...

  2. Python 学习笔记3

    人如果从来没有怀疑过自己,那他永远都不会进步. 今天学习Python解释器及其环境. http://www.pythondoc.com/pythontutorial3/interpreter.html

  3. Git客户端SourceTree回滚到远程仓库和切换分支

    使用SourceTree将远程仓库回滚到某一次提交 原理:在本地需要回滚的commit上创建一个分支,将该分支合并到远程仓库. 步骤 1.在需要回滚的commit上右键创建分支 创建分支 2.输入新的 ...

  4. Flask -- 使用数据库(Sqlite3)、用户注册、登录注销、修改密码

    # 使用sqlite数据库 import sqlite3from contextlib import closing app.config.update( DATABASE = 'my.db', #相 ...

  5. Linux - CentOS6.5服务器搭建与初始化配置详解(下)

    传送带:Linux - CentOS6.5服务器搭建与初始化配置详解(上) 继续接着上面的安装,安装完后会出现下面界面 点击reboot重启 重启后可以看到下面的tty终端界面  因为这就是最小化安装 ...

  6. 下拉的DIV+CSS+JS二级树型菜单

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. Process 'command '/usr/lib/jvm/jdk1.8.0_25/bin/java'' finished with non-zero exit value 2

    这个问题有两种可能,第一是jar包或者依赖冲突(版本冲突也算).第二是65535. 对于65535的问题,请看http://blog.csdn.net/t12x3456/article/details ...

  8. Internet History, Technology and Security (Week1)

    Week1. History: Dawn of Electronic Computing War Time Computing and Conmmunication Keywords: Electro ...

  9. H5的新应用-获取用户当前的地理坐标

    ------------------------------ <script type="text/javascript">                       ...

  10. 通过CSS实现各种方向的三角形

    #triangle-up { width: 0; height: 0; border-left: 50px solid transparent; border-right: 50px solid tr ...