Disassembly2:Built-in Type
先贴一段代码:
跟踪后看到:
无论是给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其实就是将我们的源操作数取出来,然后置于目的操作数,目的操作数其余位用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
Disassembly2:Built-in Type的更多相关文章
- POJ 2947 Widget Factory(高斯消元)
Description The widget factory produces several different kinds of widgets. Each widget is carefully ...
- Struts(二十):自定义类型转换器
如何自定义类型转换器: 1)为什么需要自定义类型转化器?strtuts2不能自动完成字符串到所有的类型: 2) 如何定义类型转化器? 步骤一:创建自定义类型转化器的类,并继承org.apache.st ...
- poj2947 高斯消元
Widget Factory Time Limit: 7000MS Memory Limit: 65536K Total Submissions: 5218 Accepted: 1802 De ...
- Widget Factory (高斯消元解线性方程组)
The widget factory produces several different kinds of widgets. Each widget is carefully built by a ...
- 【POJ】2947 Widget Factory(高斯消元)
http://poj.org/problem?id=2947 各种逗啊..还好1a了.. 题意我就不说了,百度一大把. 转换为mod的方程组,即 (x[1,1]*a[1])+(x[1,2]*a[2]) ...
- POJ Widget Factory 【求解模线性方程】
传送门:http://poj.org/problem?id=2947 Widget Factory Time Limit: 7000MS Memory Limit: 65536K Total Su ...
- UI Framework-1: views Windowing
views Windowing views provides support for creating dialog boxes and other kinds of windows through ...
- POJ 2947:Widget Factory 求同余方程
Widget Factory Time Limit: 7000MS Memory Limit: 65536K Total Submissions: 5173 Accepted: 1790 De ...
- 错误提示: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.本 ...
随机推荐
- JS中offsetTop、clientTop、scrollTop、offsetTop各属性介绍(转载)
这里是JavaScript中制作滚动代码的常用属性 页可见区域宽: document.body.clientWidth;网页可见区域高: document.body.clientHeight;网页可见 ...
- for计算100以内的奇数和
#include "stdio.h" void main() { //for计算100以内的奇数和 步长为1,continue实现 ; ;i<=;i++) { ==) { c ...
- java 图片高保真缩放
public class NarrowImage { /** * @param im * 原始图像 * @param resizeTimes * ...
- Jena文档《An Introduction to RDF and the Jena RDF API》的译文
前言本文是一篇对W3C的资源描述框架(RDF)和 Jena(一个Java的RDF API)的教程性介绍. 本文是为那些不熟悉RDF的, 以及那些通过建立原形可以达到最好学习效果的, 或是因为其他原因希 ...
- 三层交换机配置说明(华为S5700设置三个网段互通)
1.配置Switch # 创建VLAN <HUAWEI> system-view[HUAWEI] sysname Switch[Switch] vlan batch 10 20 30# 配 ...
- Linux中seq命令的用法
用于产生从某个数到另外一个数之间的所有整数 例一: # seq 1 10 结果是1 2 3 4 5 6 7 8 9 10 例二: #!/bin/bash for i in `seq 1 10`; do ...
- hdu_5680_zxa and set(想法题)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5680 题意: 问题描述 zxa有一个集合A=\{a_1,a_2,\cdots,a_n\}A={a1 ...
- AC_CONFIG_HEADER
configure.in里有宏AC_CONFIG_HEADER()时用. AC_CONFIG_HEADER宏用于生成config.h文件,以便autoheader使用.
- android动态添加TextView或者ImageView
动态添加 text1=new TextView(this); text1.setText("动态添加"); ((LinearLayout) this.findViewById(R. ...
- flash 右键菜单隐藏与修改
来源:http://blog.sina.com.cn/s/blog_7264c84401014fmd.html import flash.ui.ContextMenu;import flash.ui. ...