汇编语言是如何区分有符号运算和无符号运算的???
①有符号数+有符号数②有符号数+无符号数③无符号数+无符号数这几组怎么区分的???那么代码是如何影响SF标志位的呢???...
①有符号数+有符号数 ②有符号数+无符号数 ③无符号数+无符号数
这几组怎么区分的???
那么代码是如何影响SF标志位的呢??? 展开
这几组怎么区分的???
那么代码是如何影响SF标志位的呢??? 展开
4个回答
展开全部
对于加法和减法,有符号和无符号的指令是通用的,所以只能通过源码或者是其他的标记来判断是有符号还是无符号
比如如果一个变量是这样定义的话:
a db -1
那如果有add或者sub引用了这个变量的话,那这个就有可能是有符号的运算了,由于有的人习惯将0FFH或其他的所有二进制位全都为1的数定义成-1,所以不能确定,但如果是其他的负数的话,那么这个数是有符号数的概率就大多了.如果是个值为正数的有符号数的话,那就只能通过上下文来判断了
最精确的方法还是看进行加减运算前后的指令,比如:
mov ax,a
mov bx,b
sub a,b
js XXXX
用到的是和有符号数对应的条件转移指令的话,那这个就肯定是有符号的运算了
当然这只是其中的一种方法,具体的判断方法还要看具体的代码,这个一般不会出现太大的歧义,因为如果算法确定了的话,那么这个算法使用的变量的类型一般也就确定了.所以只要你能读懂代码,那这个运算的类型你也肯定能看出来
对于乘法和除法就简单了,直接从指令就能看出来,无符号的乘除是MUL和DIV,有符号的是IMUL和IDIV
浮点数的话全都是有符号数,没有无符号的
比如如果一个变量是这样定义的话:
a db -1
那如果有add或者sub引用了这个变量的话,那这个就有可能是有符号的运算了,由于有的人习惯将0FFH或其他的所有二进制位全都为1的数定义成-1,所以不能确定,但如果是其他的负数的话,那么这个数是有符号数的概率就大多了.如果是个值为正数的有符号数的话,那就只能通过上下文来判断了
最精确的方法还是看进行加减运算前后的指令,比如:
mov ax,a
mov bx,b
sub a,b
js XXXX
用到的是和有符号数对应的条件转移指令的话,那这个就肯定是有符号的运算了
当然这只是其中的一种方法,具体的判断方法还要看具体的代码,这个一般不会出现太大的歧义,因为如果算法确定了的话,那么这个算法使用的变量的类型一般也就确定了.所以只要你能读懂代码,那这个运算的类型你也肯定能看出来
对于乘法和除法就简单了,直接从指令就能看出来,无符号的乘除是MUL和DIV,有符号的是IMUL和IDIV
浮点数的话全都是有符号数,没有无符号的
展开全部
汇编语言是如何区分有符号运算和无符号运算的???
①有符号数+有符号数
②有符号数+无符号数
③无符号数+无符号数
这几组怎么区分的???那么代码是如何影响SF标志位的呢???
--------
不论编程者怎么定义数据,CPU 都是按照普通的二进制来计算。
然后,给出结果,以及标志:CF、OF、ZF、SF。
那么,编程者,对数据,应该怎么定义呢?
这个,你可以随意的。
但是,你把有符号数、无符号数,放在一起相加,你想得出什么结果呢?
呵呵,你也太随意了吧?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
声明:8086机器语言里只有加法运算。其他所有运算都是建立在加法之上。
我们理解中的有符号数/无符号数+有符号数/无符号数=得到的结果是一样的,这个结果同时影响着cf和of。
如果我们把它看成有符号数,那么对于8位寄存器,就把最高位看成符号位,具体数字取后七位,所以取值范围是-128~127。超出了就改变了of。
如果我们把它看成了无符号数,那么对于8位寄存器来说,没有符号位,8个位置就都是真实结果,并且一定是正数。所以取值范围是0~255。超出了就改变了cf。
所以你说的这三种情况,都是一样的运算过程,得到的结果同时作用于flag的所有位。当你把它看成这三种运算中的任意一种,都符合这种运算得到的结果
我们理解中的有符号数/无符号数+有符号数/无符号数=得到的结果是一样的,这个结果同时影响着cf和of。
如果我们把它看成有符号数,那么对于8位寄存器,就把最高位看成符号位,具体数字取后七位,所以取值范围是-128~127。超出了就改变了of。
如果我们把它看成了无符号数,那么对于8位寄存器来说,没有符号位,8个位置就都是真实结果,并且一定是正数。所以取值范围是0~255。超出了就改变了cf。
所以你说的这三种情况,都是一样的运算过程,得到的结果同时作用于flag的所有位。当你把它看成这三种运算中的任意一种,都符合这种运算得到的结果
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
加减运算指令并不分有无符号,完全在于编程者编程逻辑的把控。
有符号数之间相加、无符号数之间相加都好理解;有符号数和无符号数相加就不好理解了,你要么把它们都当有符号数,要么都看成无符号数进行计算。
有符号数之间相加、无符号数之间相加都好理解;有符号数和无符号数相加就不好理解了,你要么把它们都当有符号数,要么都看成无符号数进行计算。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询