汇编中有符号与无符号数的区分.doc

汇编中有符号与无符号数的区分.doc

ID:55133428

大小:15.00 KB

页数:4页

时间:2020-04-28

汇编中有符号与无符号数的区分.doc_第1页
汇编中有符号与无符号数的区分.doc_第2页
汇编中有符号与无符号数的区分.doc_第3页
汇编中有符号与无符号数的区分.doc_第4页
资源描述:

《汇编中有符号与无符号数的区分.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、个人收集整理-ZQ汇编中有符号与无符号数的区分一、只有一个标准!在汇编语言层面,声明变量的时候,没有和之分,汇编器统统,将你输入的整数字面量当作有符号数处理成补码存入到计算机中,只有这一个标准!汇编器不会区分有符号还是无符号然后用两个标准来处理,它统统当作有符号的!并且统统汇编成补码!也就是说,汇编后为:,而汇编后也为。这里有一个小问题,思考深入的朋友会发现,是分配一个字节,那么一个字节能表示的有符号整数范围是:,那么超过了这一范围,怎么可以?是的,的补码的确超出了一个字节的表示范围,那么拿两个字节(当然更多的字节更好了)是可以装下的,应为:,也就是说的补码应该是,一个字节装不下,但是,

2、别忘了“截断”这个概念,就是说最后的结果被截断了,是两个字节,被截断成,所以,这是个“美丽的错误”,为什么这么说?因为,当你把当作无符号数时,它汇编后的结果正好也是,这下皆大欢喜了,虽然汇编器只用一个标准来处理,但是借用了“截断”这个美丽的错误后,得到的结果是符合两个标准的!也就是说,给你一个字节,你想输入有符号的数,比如那么汇编后的结果是正确的;如果你输入那么你肯定当作无符号数来处理了(因为不在一个字节能表示的有符号数的范围内啊),得到的结果也是正确的。于是给大家一个错觉:汇编器有两套标准,会区分有符号和无符号,然后分别汇编。其实,你们被骗了。)二、存在两套指令!第一点说明汇编器只用一

3、个方法把整数字面量汇编成真正的机器数。但并不是说计算机不区分有符号数和无符号数,相反,计算机对有符号和无符号数区分的十分清晰,因为计算机进行某些同样功能的处理时有两套指令作为后备,这就是分别为有符号和无符号数准备的。但是,这里要强调一点,一个数到底是有符号数还是无符号数,计算机并不知道,这是由你来决定的,当你认为你要处理的数是有符号的,那么你就用那一套处理有符号数的指令,当你认为你要处理的数是无符号的,那就用处理无符号数的那一套指令。加减法只有一套指令,因为这一套指令同时适用于有符号和无符号。下面这些指令:…是处理无符号数的,而这些:…是处理有符号的。举例来说:内存里有一个字节为:,一个

4、字节为:。当把,当作有符号数来看时,,。当作无符号数看时,,。下面进行加运算,用指令,得到的结果为:,那么这个4/4个人收集整理-ZQ当作有符号数就是:,无符号数就是。所以,一个指令可以适用有符号和无符号两种情况。(呵呵,其实为什么要补码啊,就是为了这个呗,))乘法运算就不行了,必须用两套指令,有符号的情况下用得到的结果是:就是。无符号的情况下用,得到:就是。(参看文后附录例程)三、可爱又可怕的语言。为什么又扯到了?因为大多数遇到有符号还是无符号问题的朋友,都是里面的和声明引起的,那为什么开头是从汇编讲起呢?因为我们现在用的编译器,无论也好,的也好,都是将语言代码编译成汇编语言代码,然后

5、再用汇编器汇编成机器码的。搞清楚了汇编,就相当于从根本上明白了,而且,用机器的思维去考虑问题,必须用汇编。(我一般遇到什么奇怪的语言的问题都是把它编译成汇编来看。)是可爱的,因为符合原则,对机器的抽象程度刚刚好,让我们即提高了思维层面(比汇编的机器层面人性化多了),又不至于离机器太远(像,之类就太远了)。当初版的就是高级一点的汇编……)又是可怕的,因为它把机器层面的所有的东西都反应了出来,像这个有没有符号的问题就是一例(就不存在这个问题,因为它被设计成所有的整数都是有符号的)。为了说明的可怕特举一例:<><>(){;*"";(());("");}结果应该是但是却得到:。为什么?因为的返

6、回值,类型是,也就是,与4/4个人收集整理-ZQ混合计算时类型被自动转换了,结果自然出乎意料。。。观察编译后的代码,除法指令为,意味无符号除法。解决办法就是强制转换,变成()(());强制向有符号方向转换(编译器默认正好相反),这样一来,除法指令编译成了。我们知道,就是同样状态的两个内存单位,用有符号处理指令,等得到的结果,与用无符号处理指令,等得到的结果,是截然不同的!所以牵扯到有符号无符号计算的问题,特别是存在讨厌的自动转换时,要倍加小心!(这里自动转换时,无论还是都不提示!!!)为了避免这些错误,建议,凡是在运算的时候,确保你的变量都是的。(完)附录:’》第卷文档表述为“”,这个是

7、符号扩展的意思。说说符号扩展:当操作数进行长度扩展时,既要让操作数变长又不能改变原数值,所以就出现了符号扩展一说。比如,,执行扩展后,的值为:,长度变长了,结果没变,都是。:两套乘法指令结果例程;;程序存储为:""::4/4个人收集整理-ZQ,[];有符号乘法指令为:4/4

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。