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.本 ...
随机推荐
- 【python问题系列--3】TypeError: 'builtin_function_or_method' object has no attribute '__getitem__'
p0V,p1V,pSpam=trainNBO(array[trainMat],array(trainClasses)) 改为: p0V,p1V,pSpam=trainNBO(array(trainMa ...
- PowerDesigner 的mysql PDM 的COMMENT注释
PowerDesigner 的mysql PDM 的COMMENT注释 2012-11-01 15:38 4447人阅读 评论(0) 举报 分类: 数据库相关(7) PowerDesigner 的my ...
- Crowd安装和破解
参考资料来自:http://www.it165.net/os/html/201311/6653.html 这个破解比较简单
- Latex 中插入图片no bounding box 解决方案
在windows下,用latex插入格式为jpg,png等图片会出现no bounding box 的编译错误,此时有两个解决办法: 1.将图片转换为eps格式的图片 \usepackage{grap ...
- Silverlight程序中访问配置文件
以下代码为本人在一Silverlight程序中访问Web端配置文件的代码: private void GetLoadNeed() { // 项目名称读取配置文件 WebClient wcConfigX ...
- bootstrap开始咯
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name ...
- HDU 5898 odd-even number(2016沈阳网络选拔赛 数位DP)
定义DP[pos][pre][odd][even],pos代表当前数位,pre代表前一位的数值,odd代表到前一位连续的奇数个数,even代表到前一位连续偶数个数. odd和even肯定至少有一个为0 ...
- HDU 5805 NanoApe Loves Sequence
处理出每个位置左边的最大值和右边的最大值.然后就可以o(1)计算去掉某位置的最大值了. #pragma comment(linker, "/STACK:1024000000,10240000 ...
- sqlDeveloper连接oracle
1.解决oracle11g的ORA-12505问题 启动oraclehome92TNSlistener服务,启动oracleserviceXXXX,XXXX就是你的database SID. < ...
- 关于LR监视Windows和linux的说明
一.监控windows系统: 1.监视连接前的准备工作 1)进入被监视windows系统,开启以下二个服务Remote Procedure Call(RPC) 和Remote Registry Ser ...