. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->基础知识
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  我刚学到加减法,有点疑问请大家释疑下  [已解决] 回复[ 5次 ]   点击[ 678次 ]  
jyycool
[帖 主]   [ 发表时间:2007-10-14 22:43 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:4
注册日期:2007-10-14 22:13
就是寻址的时候传送的地址啊,还是内容啊,我有点想不通,如立即寻址mov ax,10h;
是不是传送的是内容啊,还有就是减法的时候益出的判断为什么异号切结果与减数符号相同时是益出呢,如-5-5,我觉得这不会益出吧,请给说说,不然,我觉得进展很慢现在
stoner1841
[第1楼]   [ 回复时间:2007-10-15 01:13 ]   [引用]   [回复]   [ top ] 
荣誉值:1
信誉值:0
注册日期:2007-10-15 00:48
立即数传值,传送的就是10h,不牵扯地址

第二个问题你在说清楚点~~
jyycool
[第2楼]   [ 回复时间:2007-10-15 12:23 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:4
注册日期:2007-10-14 22:13
就是减法时,益出的问题,书上说当两个异号的数相减,结果如果与减数符号相同则益出,其余均不益出,我觉得符号同益出不是很理解如-5-5=-10这难道益出吗-5与-10同号与5异号,解释下
cook702
[第3楼]   [ 回复时间:2007-10-15 18:27 ]   [引用]   [回复]   [ top ] 
荣誉值:40
信誉值:2
注册日期:2007-06-26 11:53
所谓“寻址”,通俗的讲,就是要得到想要得到的数据。大脑首先把“寻址”这个词忘掉,然后再想。要想得到想要的数据,可以有两种方法: 
(1)直接给。如mov ax,10h; 10就是你想要的数据,结果是把它放在了ax中。
(2)给出数据所在内存中的地址,让程序自己从地址处去找。然而给出地址的方式和“直接给数据”的方式形式上必定要有区分,否则他们就成了一种方式。区分的方法很简单,就是加入[]。从中括号里面得出的数就是想要得到的数据在内存中的地址。[]里可以放立即数,如[5]表示存放在内存单元位置为ds:5数据。因为地址空间是由段地址和偏移地址组成,而此时默认的段地址就是ds中的数据。[]中也可以放寄存器如[bx],假如bx中的内容为1a2f,则表示在内存单元位置为ds:1a2f处的数据。[]中也可以二者都引入,如[bx+5],如果bx中存储的数据为1a2f,则表示在内存单元位置为ds:1a2f+5处的数据。当然[]内还可以有多种形式,但是意思都是一样的。

再来看第二个问题:
首先,溢出是对有符号数而言的。在8086系列计算机中,有符号数是以补码的形式进行表示的。补码表示法中,正数采用符号加绝对值进行表示。即数的最高有效为0表示符号为正,数的其余部分则表示数的绝对值。如+127的补码表示为01111111,而负数表示则可由其绝对值的补码转换而来,具体规则就是对其绝对值的补码取反后加一,得到的即为负数的补码形式。负数补码最高位为1,表示负数。如-3的补码求解过程如下:00000011(+3)取反后为11111100,然后加1,得11111101(-3)。如果想知道以补码表示的负数的具体值,也可通过此法则得到。即对负数的补码取反后加一,得到的数的绝对值即为此补码表示的负数的绝对值。如补码形式-3的绝对值求解过程如下:11111101(-3的补码表示)取反后为00000010,然后加1,得00000011(3)。在补码表示法中,零只有一种表示,即00000000,对于10000000这个数,补码表示法中被定义为-128。这样8位补码所能表示的数的范围为-128~127。

了解了补码的相关知识后,我们再来看具体问题。“当两个异号的数相减,结果如果与减数符号相同则溢出,其余均不溢出”,所谓的溢出,是指得出的结果超出了所能表示的范围。这句话的前提是减法运算。-5-5即可以看作加法运算(-5)+(-5)也可以看作减法运算(-5)-5,如果看作减法运算,那么被减数为-5,减数则为5,它的符号为正,而不是楼主所说的-5。那么结果为-10,它的符号与减数符号相反,所以不会产生溢出。假如由如下代码:
mov al,11000000B ;-64的补码表示
mov bl,01000110B ;70的补码表示
sub al,bl 
三句代码计算的是(-64)-(70),这是一个减法运算,结果放在al中。通过口算可以知道结果为-134,而一个八位补码所能表示的数的范围为-128~127,-134不在此范围之内,因此必定产生溢出。11000000B - 01000110B = 01111010B,得到的结果为01111010B最高位为0,表示正数,与减数01000110B(70)符号相同,因此必定产生溢出。正好验证了命题的正确。另外需要注意,命题中所说的结果计算机经过运算后得到的结果,而不是指此处的
-134。

不知楼主明白了没?
jyycool
[第4楼]   [ 回复时间:2007-10-15 21:30 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:4
注册日期:2007-10-14 22:13
呵呵,明白了,谢谢讲的相当清楚,我把减数和被减数搞反了
jyycool
[第5楼]   [ 回复时间:2007-10-18 13:06 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:4
注册日期:2007-10-14 22:13
此贴由 贴主 于 [ 2007-10-18 13:06 ] 结贴。 结贴原因:问题已解决
得分情况: 1楼(stoner1841):1分   3楼(cook702):7分  
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved