8086汇编(0)

来源:互联网 发布:linux硬件级虚拟机 编辑:程序博客网 时间:2024/05/01 21:59
数制基础
   常用二进制(B/b结尾)、十进制(D/d结尾)、十六进制(H/h结尾)。

数据组织
   位
     计算机中最小的单位,一个二进制位。
   字节
     字节是80806/8088CPU可寻址的最小数据单位,一个字节是8位。一个字节中位的编号从右到左依次是0-7。
   字
     通常,一个16位,一个字中的编号从右到左依次是0-15。
     第0位叫做最低有效位,第15位叫做最高有效位。0-7叫做低位字节,8-15叫做高位字节。
   双字
     通常,一个32位。一个双字中的编号从右到左依次是0-31.
     第0位叫做最低有效位,第31位叫做最高有效位。0-7叫做低字,8-15叫做高字。

数的编码
   我们把计算机中表示的二进制数据代码成为机器数,它约定了数据的符号和数据的格式。而机器数代表的实际数值称为真值。
   机器数的编码可分为定点数和浮点数两种。定点数又可分为定点整数和定点小数两种。

   定点小数表示的是纯小数。在定点小数的机器数编码格式中,规定小数点的位置固定在最高数据位之前,符号位之后,小数点的位置在整个运算过程中是固定不变的。在定点机器中,小数点的位置一经约定,即固定不变,不需要专门的代码指定小数点的位置。
   对于一个n+1位的定点二进制小数x=x0x1.....xn其中x0表示符号位,为0则x为正,为1则x为负。
   x所能表示的范围-(1-2^(-n))<=x<=(1-2^(-n))
 
   定点整数的机器数编码方法中,规定小数点固定放在最低数据位的右边。对于一个n+1位的定点二进制整数x=x0x1.....xn其中xn表示符号位,为0则x为正,为1则x为负。
   x所能表示的范围-(2^n-1)<=x<=-2^n-1
  
   定点小数编码
       原码表示法
       原码用最高位表示数的符号位,又叫符号-绝对值表示法。
       IF x>0 then
          x = +0.x1x2....xn
          [x]原 = 0.x1x2......xn = x
       IF x<0 then
          x = -0.x1x2.....xn
          [x]原 = 1.x1x2......xn
          [x]原 = 1+0.x1x2......xn
          [x]原 = 1-(-0.x1x2.....xn)
                = 1 - x
       IF x=0 then
          [+0]原 = 0.00......0
          [-0]原 = 1.00......0

                 x  当0<=x<1                          
       [x]原 = { 
                 1-x 当-1<x<=0
 
       原码表示法简单、直观与真值转换方便。缺点是加减运算不方便。

 定点小数表示
       补码表示法
       一般说:任意一个数x的补码,等于该数加上其模数。模数m为一个正整数,则
           [x]补 = m+x (mod m)
       IF x>0 then
         [x]补 = x + m = x (mod m)
       IF x<0 then
         [x]补 = x + m = m - |x| (mod m)
       IF x=0 then
         [+0]补 = [-0]补 = 0.0000

       对任意一个n+1位的二进制小数x=x0x1......xn期中x0为符号位,其补码为
                  x   当0<=x<=1-2^(-n)
        [x]补 = {
                  2-x 当-1<=x<=0 (mod 2)

       关于定点二进制小数补码模数m=2的说明:
       [x]补max = 0.1111111...111
      
       补码具有以下性质
         1.[+0]补 = [-0]补 = 0.0000 
         2.定点小数的补码中,可表示-1,这是其他编码中做不到的
         3.负数的补码求法中,用2减去x的绝对值,可以看做是用1111减去x的绝对值,然后末位加1。因而负数求补码的方法,可用x逐位求反,末位加1得到。
         4.关于补码的符号位:
           x>=0, [x]补=x>=0,此时x0=0
           x<=0, [x]补=2+x>=1,此时x0=1
         5.已知[x]补=x0x1...........xn,求x的真值
         根据补码的定义,可综合写成[x]补=2x0+x,期中x0为符号位,x为该数的真值,对于正负数均成立。
            x = [x]补 - 2x0
              = x0.x1x2.........xn-2x0
              =-x0+0.x1x2.........xn
              =-(x0-0.x1x2........xn)

         6.补码的符号扩展及右移规则
         已知[x]补=x0.x1x2.......xn,求[x/2]补
         由性质5可知:
           x = -x0 + 0.x1x2.....xn
             = -x0 + x1*2^(-1) + x2*2^(-2)......xn*2^(-n)
           x/2 = -x0*2^(-1) + x1*2^(-2)...............xn*2^(-n-1)
               = -x0+x0*2^(-1) + x1*2^(-2)...............xn*2^(-n-1)
               = -x0 + 0.x0x1x2...........xn
           [x/2]补 = 2x0 + x/2 = x0.x0x1x2....xn
         
        
      反码
        反码与补码类似,正数的反码是其本身;负数的反码,只需每位求反即可。
                  x    当0<=x<1
        [x]反 = {
                  (2-2^(-n))+x 当-1<x<=0
        可以把反码看做以(2-2^(-n))为模的补码。因此在反码的运算中当最高位产生进位2时,不能随便扔掉,还必须在最低位加1(2^(-n))才可。
        另外反码表示中
         [+0]反 = 0.0000.......0
         [-0]反 = 1.1111.......1
        零的表示不唯一这也是反码的不便之处,但常常用反码作为补码的跳板。
       
定点整数编码
       x = xnxn-1..........x0
       xn为符号位
       原码
       设x=xnxn-1..........x0
                   x  当0<=x<=2^n-1
         [x]原 = {
                   2^n-x 当-(2^n-1)<=x<=0

       [+0]原 = 000000000.....0
       [-0]原 = 100000000.....0
      补码
                  x   当 0<=x<=2^n-1
        [x]补 = {
                  2^(N+1)+x    当-2^n<=x<=0 (mod 2^(n+1))
      各种性质和定点小数补码性质类似。
      [+0]补 = [-0]补 = 00000.........000
      10000......0 的真值为 -2^n
     
      反码
                x   当 0<=x<=2^n-1
     [x]反 = {
                (2^(n+1)-1) + x    当 -(2^n-1)<x<=0

      移码
       [x]移 = 2^n + x,-2^n<=x<=2^n-1
      当x为正数时只要将最高位(符号位)加1即可
      当x为负数时 [x]移 = 2^n - |x|

      例:求x = (±6)D = (±110)B的移码
      [(+110)B]移 = 2^3+0110 = 1110
      [(-110)B]移 = 2^3-110 = 0010
     
      移码的特点是比较数的大小方便。

浮点数编码

     浮点数表示

     一部分表示数的有效值,称为尾数Mmantissa),一部分表示该数小数点的位置,称为阶码Eexponent)。

     一般计算机中规定阶码E为定点整数,尾数M为定点小数。阶码在浮点运算中只作加减运算,通常采用补码或移码表示。尾数要做加减运算和乘除运算,通常采用补码和原码表示。

     浮点数中阶码和尾数的关系,用下式表示

     x = MxREx

       其中x是一个浮点数,Mx是其尾数,用定点二进制小数表示;Ex是其阶码,用定点二进制整数表示;R是阶的低,可以用2816,通常取2,阶的底与尾数Mx的进位制的基数相同。若阶的底R=2,则Mx为二进制数。一个机器中所有的浮点数阶的底都相同,因此R不表现出来。

     规格化数

     在浮点数的表示中,一个浮点数可以有多种表示方式,所以提出了规格化的概念。规定尾数最高位数据位不为零,为有效数据。这样要求|Mx|>=R-1。当R=2时,| Mx|>=0.5对于用源码表示的尾数,要求尾数的最高位为1;对于补码表示的尾数,要求数据最高位与尾数符号不同,即Mx = 0.1x…….x.,或Mx=1.0x……..x

     机器零

     当一个浮点数,其尾数Mx = 0 不管阶码取何值,都把该浮点数看做零,或者阶码小于其阶码最小值,叫做机器零。此时要求把浮点数的阶码和尾数都清零。

     浮点数溢出

     当一个数的阶码大于机器数的最大阶码时,称为上溢;转溢出处理。当下溢时,视为机器零。

    IEEE浮点数格式

    IEEE标准规定浮点数的字长有3种:32位短实数,64位长实数和80位临时实数。因为尾数已经采用规格化方法表示,其最高位一定是有效数据位,因此可节省1位,这样表示的尾数有效位数可以再增加1位。规格户尾数最高数据位称隐藏位。

 

浮点数

符号位

阶码位数

尾数位数

总位数

短实数

1

8

23

32

长实数

1

11

52

64

临时实数

1

15

64

80

 

    浮点数特点是:数据的范围比定点数宽,运算精度高,运算复杂,机器结构复杂,运算器中要有专门设置阶码运算器和尾数运算器,控制器也复杂,造价高。