资源描述:
《汇编语言中有符号数溢出的证明》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第18卷第1期纺织高校基础科学学报Vol.18,No.12005年3月BASICSCIENCESJOURNALOFTEXTILEUNIVERSITIESMarch,2005文章编号:10068341(2005)01008703汇编语言中有符号数溢出的证明1211张建国,王元,徐筑,魏国瑞(1.西安建筑科技大学理学院,陕西西安710055;2.西安建筑科技大学环境与市政工程学院,陕西西安710055)摘要:研究了汇编语言中关于有符号二进制数溢出问题,并给出了准确的证明.通过证明过程,使人们能够更加深刻的领会计算机的最底层的运算过程,从而能够灵活的操控计算机.关键词:溢出;
2、补数;绝对值;汇编语言中图分类号:TP301.2文献标识码:A0引言汇编语言是和计算机硬件直接相关的、最底层的、最基础的计算机语言,它可以最直接控制计算机所有硬件,要真正理解计算机必须掌握这种语言.此外加解密、反病毒的层次很高,都需要对计算机硬件底层有深入的了解,必须精通汇编语言.而且对于速度或实时性要求很高的软件,汇编语言的应用也是必不可[1]少的.在用汇编语言编写一些应用软件时,需要对一些基础概念要有深刻的认识,其中就有关于有符号二进制数溢出的问题.但相关的资料讲的不清楚,不全面,甚至出现错误.这些问题的存在对于业内的专业人员编写程序,在理解上是一个巨大的障碍.本文作者经过多
3、年的研究,从本质上弄清楚了有符号二进制数溢[2]出的概念,也从数学方面给出了严格的证明.1溢出判断的证明X补Y补=(XY)补.(1)X,Y是Q集内的数,从而X补,Y补是Q!集内的数.XY的值不超出Q集,(1)式总是正确的.XY的值超出Q集,叫超范围,也叫溢出.若溢出,那么X补Y补(不是XY)计算的双进位(或双借位)异或值[3]为1,否则为0.由于程序运行的OF标志就是这个异或值,在程序中用OF标志来判断.1.1预备知识n-1(1)机内数、机外数互化可以用∀=连接.如果X的数值部分用X1表示,那么将有等式2+X1[4]=-X1成立.必须注意:按照通常数学等式,这是无法理解的,
4、它只是互化意义上的等于,是证明的需要.n-1n-1n-1(2)2常常理解为∀-号,而在-2的式子中的2为数值,时刻要分辨清楚.(3)为了便于读者理解,在推导中有时用斜体表示机内数的运算.对于机内数作以下说明:让计算机计算的已知数(俗称计算机的入口),在未输入计算机前,就是真值,特点是用+/-这两个独立符号表示它的属性.省略符号被默认为+号.想要计算机识别,对N位二进制收稿日期:20041204基金项目:国家自然科学基金资助项目(10272089)通讯作者:张建国(1971),男,陕西省乾县人,西安建筑科技大学讲师,硕士,主要从事大学物理及自动控制方面的科研工作.Email:jg
5、ouzhang@126.com.88纺织高校基础科学学报第18卷数,用最高位代替+/-号(0正1负)剩下的N-1位代表数值部分,就化为所谓的机器数.如果直接把真值化为机器数让计算机加减,由于计算机的加减是把机器数当成无符号数运算的,符号位相加,次高位进[5]位显然都引起符号位混乱.但若把所有的已知数的补数化为机器数送给计算机计算,结果的补数再化为真值,那么就是所需要的正确结果.为了更反映问题的本质,把真值称为机外数,机器数叫机内数.必要的话,可以丢弃真值和机器数的词汇,直接建立机内数和机外数的概念.机外数和机内数在结构上的区别是当它们以N位2进
6、制数的形式出现时,最高位是数值位还是符号位,是数值位,还要加上符号.从人机对话的过程来讲,人提供或接受的数是机外数,计算机在计算前接受的是机内数.n-1n(4)为便于读者理解,只用8位二进制来证明.对于N位二进制,只需用2代替80H,用2代替100H即可.为了能够很好的说明这个问题,定义了Q集、Q集和Q!等3个集合.定义1两个N位二进制数x1,x2,若x1#0,x2#0,而且x1=x2时,则称x1,x2互为补数;若x17、的n-1n-1模),命名为Q集,Q集去掉2(-0)叫Q集;Q集去掉-2叫Q!集(即N位二进制数所能表达的所有数).每个元素的补数构成集合,刚好还是Q集,就是说Q集对补数函数是封闭的.Q集每个元素的补数构成集合,刚好是Q!集,Q集、Q!集对补数函数不封闭,但是两集元素之间对补数函数是一一对应的.对于8位二进制来说,Q集是-80H,-7FH,-7EH,∃,-1H及+0,∃,+7FH.Q!集是-7FH,-7EH,∃