汇编语言 刚刚学溢出 有个地方不懂 书上说 两个正数相加结果是负数一定溢出 溢出是带符号的 那
来源:学生作业帮 编辑:作业帮 分类:数学作业 时间:2024/05/24 11:37:46
汇编语言 刚刚学溢出 有个地方不懂 书上说 两个正数相加结果是负数一定溢出 溢出是带符号的 那
汇编语言 刚刚学溢出 有个地方不懂 书上说 两个正数相加结果是负数一定溢出
溢出是带符号的
那al是255就分成+127和-128
mov al,+127
add al,2
这肯定溢出了 按照上面说的话 两个正数相加溢出结果是负数 那上面两行代码结果是什么负数啊?我用OD查看的是 81h 也就是129!不是负数啊!
汇编语言 刚刚学溢出 有个地方不懂 书上说 两个正数相加结果是负数一定溢出
溢出是带符号的
那al是255就分成+127和-128
mov al,+127
add al,2
这肯定溢出了 按照上面说的话 两个正数相加溢出结果是负数 那上面两行代码结果是什么负数啊?我用OD查看的是 81h 也就是129!不是负数啊!
你对计算机中的数,理解有点混乱.
在计算机中存放的由若干位二进制数组成的一组0和1的组合,我们称它为“机器数”.
它是它所代表的某个数值的一种编码表示.这个被代表的数值,我们称为“真值”.
仅仅只看机器数,我们是不能确定它代表的是什么的.
必须还要知道它的编码方式是什么,才能确定真值是什么.
下面举个例子.
一个8位的机器数,用二进制表示是 0100 0010
在不同的编码中,它所表示的真值是不一样的:
如果它的编码是ASCII码,它的真值就是大写字母 ‘B’
如果它的编码是无符号数,它的真值等于十进制数 66
如果它的编码是补码数,它的真值等于十进制数 +66
如果它的编码是压缩的BCD码,它的真值就是十进制数 42
回到你的问题.
当你用+127再加上2的时候,运算过程是:0111 1111 + 0000 0010 = 1000 0001.
如果用无符号数来解释这次运算,3个数都是无符号数,那么运算过程就是 127 + 2 =129
如果用补码数来解释这次运算,3个数都是补码数,那么运算过程变成了 127 +2 =-127
显然,补码运算的结果是不正确的,因为结果超出了8位补码的表示能力.正确的结果+129比8位补码能表示的最大正数+127还要大,超出范围,已经不能正确地表示.所以,溢出标志 OF 被置1.
你的困惑,在于你概念乱用.
你既然假设了数是有正有负的补码,那么对结果 1000 0001的解释也就必须要用补码来理解.它是-127.
你没有理由突然换成无符号数来解释这个结果,将它说成是129.
(这里,有点像你用英语写了good ,却说这是错的,因为拼音没这么拼的)
你说“255就分成+127和-128”,这里也是混乱的.
255是用无符号数来解释 1111 1111这个机器数,后面的+127和-128又突然无理地改成了补码解释8位二进制数.
在补码表示时,1111 1111 不是255,是-1
在计算机中存放的由若干位二进制数组成的一组0和1的组合,我们称它为“机器数”.
它是它所代表的某个数值的一种编码表示.这个被代表的数值,我们称为“真值”.
仅仅只看机器数,我们是不能确定它代表的是什么的.
必须还要知道它的编码方式是什么,才能确定真值是什么.
下面举个例子.
一个8位的机器数,用二进制表示是 0100 0010
在不同的编码中,它所表示的真值是不一样的:
如果它的编码是ASCII码,它的真值就是大写字母 ‘B’
如果它的编码是无符号数,它的真值等于十进制数 66
如果它的编码是补码数,它的真值等于十进制数 +66
如果它的编码是压缩的BCD码,它的真值就是十进制数 42
回到你的问题.
当你用+127再加上2的时候,运算过程是:0111 1111 + 0000 0010 = 1000 0001.
如果用无符号数来解释这次运算,3个数都是无符号数,那么运算过程就是 127 + 2 =129
如果用补码数来解释这次运算,3个数都是补码数,那么运算过程变成了 127 +2 =-127
显然,补码运算的结果是不正确的,因为结果超出了8位补码的表示能力.正确的结果+129比8位补码能表示的最大正数+127还要大,超出范围,已经不能正确地表示.所以,溢出标志 OF 被置1.
你的困惑,在于你概念乱用.
你既然假设了数是有正有负的补码,那么对结果 1000 0001的解释也就必须要用补码来理解.它是-127.
你没有理由突然换成无符号数来解释这个结果,将它说成是129.
(这里,有点像你用英语写了good ,却说这是错的,因为拼音没这么拼的)
你说“255就分成+127和-128”,这里也是混乱的.
255是用无符号数来解释 1111 1111这个机器数,后面的+127和-128又突然无理地改成了补码解释8位二进制数.
在补码表示时,1111 1111 不是255,是-1
汇编语言 刚刚学溢出 有个地方不懂 书上说 两个正数相加结果是负数一定溢出 溢出是带符号的 那
将两个带符号数 10001000和11100110相加,判断结果是否溢出?为什么?
两数同符号相加为什么会溢出,相减不溢出?
1.设有两个有符号整数变量A和B,求A和B之和并判断结果是否溢出.(用汇编语言做)
无符号数相加减如何判断溢出?
如果有一个杯子,里面装满了水,再将三十克的沙子倒入其中,有水溢出,那麼,溢出的水是否是其体积?
为什么无符号是否溢出看CF?为什么有符号是否溢出看of?
直方图的溢出是什么意思
请问:两个无符号数相乘,怎样判断是否溢出?
无符号的数相加相减会有溢出么~cf和of在无符号数时变化情况一样么?...
汇编语言中 OF溢出标志位 什么时候才表示溢出?如题
汇编语言.两有符号数运算,如何自己判断是否溢出?当of=1,sf=1,为什么实际运算结果为正?