精华内容
下载资源
问答
  • 2021-05-20 04:10:59

    文章内容:

    /*

    文件名称:DIV64_32.C

    制作日期: 2008.8.15 REV2

    作者: zzwj5120

    Email: wjandcf@gmail.com

    zzwj5120@sina.com

    源程序: 64位无符号二进制整数除法原理(C语言描述)

    函数功能: 64位无符号二进制整数除以32位无符号二进制整数

    0000 0001 0000 0000

    -----------------------------------------

    0000 0000 ffff ffff ) 0000 0000 0000 0000 ffff ffff 0000 0000

    0000 0000 ffff ffff

    -----------------------------------------

    0

    */

    typedef signed short int16; /* defined for nsigned 16-bits integer variable 有符号16位整型变量 */

    typedef signed int int32; /* defined for nsigned 32-bits integer variable 有符号32位整型变量 */

    typedef long long int64; /* defined for nsigned 64-bits integer variable 有符号64位整型变量 */

    typedef unsigned short uint16; /* defined for unsigned 16-bits integer variable 无符号16位整型变量 */

    typedef unsigned int uint32; /* defined for unsigned 32-bits integer variable 无符号32位整型变量 */

    typedef unsigned long long uint64; /* defined for unsigned 64-bits integer variable 无符号64位整型变量 */

    /*

    入口参数: ll, 被除数 bb, 除数 addr3 商指针 addr4, 余数指针

    返回参数: 返回1表示除数为0, 返回0表示正常

    */

    uint16 uint64_div_uint32(uint64 ll, uint32 bb, uint64 * addr3, uint32 * addr4){

    union {

    uint64 un[2]; //64位被除数扩展为128位,高64位为被除数左移64次而设

    struct{

    uint32 l0; //0

    uint32 h0; //1

    uint32 l1; //2

    uint32 h1; //3

    }st;

    }aa;

    uint64 cc; //64位商

    register uint32 i;

    if(bb == 0)return 1; //除数为0返回1

    if(ll < bb){

    *addr3 = 0; //商

    *addr4 = ll; //余数

    return 0; //被除数小于除数,商为0,余数即被除数

    }

    aa.un[0] = ll; //被除数 64bit

    aa.un[1] = 0; //扩展到128bit

    cc = 0; //商 64bit 清0

    i = 0;

    //第一步优化, 被除数为32位, 直接更改左移循环次数

    if(aa.st.h0 == 0){

    aa.st.h0 = aa.st.l0;

    aa.st.l0 = 0;

    i = 32;

    }

    //第二步优化, 左移直到被除数首位为1

    for(;i<64; ++i){

    if((aa.st.h0&0x80000000)==0x80000000)break;

    else aa.un[0] = aa.un[0] << 1;

    }

    //被除数左移, 和除数比较, 获取商位和余数

    for (; i<64; ++i){

    aa.un[1] = (aa.un[1] << 1) + (aa.un[0] >> 63);

    aa.un[0] = aa.un[0] << 1; //被除数左移1位

    cc = cc << 1 ; //商左移1位

    if(aa.un[1] >= bb){ //如果除数为32位,只可以用33位和除数比较

    aa.un[1] = aa.un[1]- bb; //32位被除数可能比除数小,但有进位33

    ++cc;

    }

    }

    *addr3 = cc; //商

    *addr4 = aa.st.l1; //余数

    return 0;

    }

    /*

    一个不懂汇编的程序员,可能是一个合格的程序员但一定不是一个完美的程序员。

    进一步的优化, 是根据不同处理器, 将C函数转为具体汇编指令。

    */

    更多相关内容
  • 完美实现4位二进制除法操作 编译错误,运行完好
  • 无符号二进制数的算术运算

    万次阅读 2019-02-24 19:50:16
    无符号二进制数的加、减、乘、四则算数运算法则其实与十进制数的四则算数运算法则是一一对应的。如果你理解了十进制的四则算数运算法则,那么理解无符号二进制数的四则运算相对来讲就很简单了 –引用自王达老师...

    无符号二进制数的算术运算

    本文内容参考自王达老师的《深入理解计算机网络》一书<中国水利水电出版社>

    一、无符号二进制数的运算规则:

    无符号二进制数的加、减、乘、除四则算数运算法则其实与十进制数的四则算数运算法则是一一对应的。如果你理解了十进制的四则算数运算法则,那么理解无符号二进制数的四则运算相对来讲就很简单了
    –引用自王达老师《深入理解计算机网络》一书

    • 1、加法运算
      加法运算法则:0+0=0,0+1=1,1+0=1,1+1=10(10就表示进位,要向高位进1)。
      做二进制加法运算的时候,需要将两个二进制数右对齐(也就是从最低位开始对齐),数值大的放上面(通俗理解就是二进制位数多的放上面),数值小的放下面(通俗理解就是二进制位数少的放下面),同时保证两数的每一位二进制位也对齐,如果两个二进制位仅有一位是1,相加结果为1,如果两个二进制位为0,则结果为0,如果两个二进制位均为1,则结果为10(10就相当于十进制中的2),就是向高位进1(也就是逢二进一规则),与十进制中的逢十进一意思一样。
      在进行二进制加减法运算时,最关键的一点就是逢二进一,而借1当2!如果你熟悉十进制的加减运算法则,那是逢十进一,借1当十。这样就会比较好理解,无符号的二进制运算法则就是将十进制中的10换成2。
      示例:计算(10010)B+(10010)B。(一定要注意两数是从最低位对齐!)
      // 二进制加法计算示例
         被加数  10010
         加数    11010
         结果   101100
         说明:
         最低位都是0,结果为0,
         倒数第二位,都是1,结果为10---这里记得向更高位进位1,
         倒数第三位都是0,结果是0,但是进位1,所以结果是1,
         倒数第四位分别是1和0,结果是1,
         倒数第五位都是1,结果是10,这里记得向跟高位进位1,
         没有倒数第六位了,直接写上倒数第五位进位的那个1,
         合起来,结果就是101100。
         实际上和十进制的运算规则完全一致。
         只是你需要习惯将10改成2。
      
    • 2、减法运算
      减法运算法则:1-1=0,1-0=1,0-0=0,0-1=-1(这里记得需要向最高位借1)。
      做二进制加法运算的时候,需要将两个二进制数右对齐(也就是从最低位开始对齐),数值大的放上面(通俗理解就是二进制位数多的放上面),数值小的放下面(通俗理解就是二进制位数少的放下面),同时保证两数的每一位二进制位也对齐。如果两个相减的二进制位同为0或者1,则结果为0,如果被减数的二进制位为1,减数的二进制位为0,则结果为1,如果被减数的二进制位为0,减数的二进制位为1,则需要向高位借1,此时是借1当2,与十进制中借1当10一个意思。
      示例:计算(111010)B+(101011)B。(一定要注意两数是从最低位对齐!)
      // 二进制减法示例
       被减数   111010
         减数   101011
         结果   001111
         说明:
         被减数最低位是0,减数是1,这个时候,被减数需要向高位借1,
         结果为1,
         被减数倒数第二位是1,但是被最低位借了1,所以实际上是0
         ,减数是1,这个时候,被减数需要继续向倒数第三位借1,
         结果为1,
         被减数倒数第三位是0,但是被倒数第二位借了1,所以实际上是1,
         减数是0, 结果为1,
         被减数倒数第四位是1,但是被倒数第三位借了1,所以实际上是0,
         减数是1,结果为1,
         被减数倒数第五位是1,但是被倒数第四位借了1,所以实际上是0,
         减数是0,结果为0,
         被减数最高位是1,这个时候并没有被借位,所以是1,减数是1,
         结果为0。
      
    • 3、乘法运算
      乘法运算法则:0 * 0=0,0 * 1=0,1 * 0=0,1 * 1=1
      只有当两个相乘的二进制数都为1时,相乘的结果才为1,两个相乘的二进制数中只要有一位为0,结果就是0,这与十进制中的乘法运算法则是一样的。
      乘法运算法则中,乘数的每一位要与被乘数的每一位分别相乘,而不仅仅是对应位相乘,而且乘数的每一位与被乘数的每一位相乘的结果的最低位要与对应的被乘数位上下对齐,规则与十进制是一样的。
      示例:计算(1010)B+(101)B。(一定要注意两数是从最低位对齐!)
       // 二进制乘法示例
       被乘数   1010
          乘数   101
          过程:首先用乘数的最低位去乘以被乘数的每一位,得出的结果:
          1010
          然后用乘数的倒数第二位再去乘以被乘数的每一位,得出的结果:
          0000
          最后再用乘数的倒数第三位去乘以被乘数的每一位,得出的结果:
          1010。
          这里得出了3个结果,这三个结果的排列是有讲究的,必须是
             1010
           0000
         1010
         第一个结果的最低位要与成熟的最低位对齐,
         第二个结果的最低位要与乘数的倒数第二位对齐,
         第三个结果的最低位要去乘数的最高位对齐!
         然后按照这种对齐格式,将这三个结果相加,
         得出最后相乘的结果(相加的规则参照加法运算):
         110010
      
    • 3、除法运算
      除法运算法则:当被除数大于除数时,商是1,当被除数小于除数时,商是0,这个与十进制的除法类似,因为二进制只有0和1,因此它的上也只能是0和1,你不要整出2,3,4,5,6,7,8,9来了。
      示例:计算(11001)B+(101)B。
        // 二进制除法计算
         除数  101     被除数 11001
         说明:
         因为除数是101三位,所以我们先看被除数的前三位:110,
         110明显比101更大,所以上商先上1,那么就变成了
         11001
         101
         0010
         这里的操作与十进制是一样的,对齐的相减,
         未涉及的下一位直接写,
         结果是10,10明显比101更小,所以商上0,
         最后还有一位1,所以是101,101刚好和101完全相同,
         所以商上1。
         最后得出的商是:101。
         实际上你需要注意的是,二进制只有0和1,
         而十进制有0-9,运算步骤是类似的。
      
      在此,再次感谢王达老师的《深入理解计算机网络》一书对本文的启发!

    PS:时间有限,有关计算机基础的内容会持续更新!今天就先写这么多,如果有疑问或者有兴趣,可以加QQ:2649160693,并注明CSDN,我会就博文中有疑义的问题做出解答。同时希望博文中不正确的地方各位加以指正!

    展开全文
  • 入口条件:被数在R2、R3、R4、R5中,除数在R6、R7中。 出口信息:OV=0 时,双字节商在R2、R3中,OV=1 时溢出。
  • 3.3、指令系统对应微程序二进制代码及分析(4分) 3.4、机器程序及分析(4分) 四、实验步骤(4分) 4.1、微程序写入及校验(2分) 4.2、机器程序写入及校验(2分) 五、实验结果及分析(16分) 5.1、...

    视频演示地址:计组课程设计-8位无符号二进制数乘除_哔哩哔哩_bilibili

    计算机组成原理课程设计

    一、实验目的

    综合运用所学计算机组成原理知识,设计并实现较为完整的计算机。

    二、实验内容

    1. 设计并实现一套完整的指令系统;
    2. 设计并实现完整的计算机(采用上述指令系统);
    3. 利用该计算机实现   8位无符号二进制数乘除     (比如数组累加和等)。

    三、实验原理(16分)

    数据通路图如下图1:

    DR:数据缓冲器  IR:指令寄存器  PC:程序计数器  AR:

    数据地址计数器  R0-R3:通用寄存器 PSW:状态字寄存器

    图1数据通路图

    实际连接图如下图2

    图2 实际连接图

    3.1、指令系统及分析(4分)

    3.1.1机器指令分析

    模型机设计三大类指令共十五条,其中包括运算类指令、控制转移类指令,数据传送类指令。

    运算类指令包含三种运算,算术运算、逻辑运算和移位运算,设计有 6 条运算类指令,分别为:ADD、AND、INC、SUB、OR、RR,所有运算类指令都为单字节,寻址方式采用寄存器直接寻址。控制转移类指令有三条 HLT、JMP、BZC,用以控制程序的分支和转移,其中 HLT为单字节指令,JMP 和 BZC 为双字节指令。数据传送类指令有 IN、OUT、MOV、LDI、LAD、STA 共 6 条,用以完成寄存器和寄存器、寄存器和 I/O、寄存器和存储器之间的数据交换,除MOV 指令为单字节指令外,其余均为双字节指令。

    所有单字节指令(ADD、AND、DEC、SUB、OR、SAR、HLT和MOV)格式如下表1

    I7

    I6

    I5

    I4

    I3

    I2

    I1

    I0

    OP-CODE

    RS

    RD

    表格 1单字节指令格式

    在表1中,I7~I0分别为指令字节的8位(I7为高位,I0为地位)。其中,OP-CODE为操作码,RS为源寄存器,RD为目的寄存器,RS或RD选定的寄存器如下表2所示:

    RS或RD

    选定的寄存器

    00

    R0

    01

    R1

    10

    R2

    11

    R3

    表格 2 RS或RD选定的寄存器

    IN和OUT的指令格式为:

    7 6 5 4

    3 2

    1 0

    7—0

    OP-CODE

    RS

    RD

    P

    表格 3 IN和OUT的指令格式

    其中括号中的 1 表示指令的第一字节,2 表示指令的第二字节,OP-CODE为操作码,RS为源寄存器,RD为目的寄存器,P 为 I/O 端口号,占用一个字节。

    系统设计五种数据寻址方式,即立即、直接、间接、变址和相对寻址,LDI 指令为立即寻址,LAD、STA、JMP 和 BZC指令均具备直接、间接、变址和相对寻址能力。

    LDI 的指令格式如下表4,第一字节同前一样,第二字节为立即数。

    7 6 5 4

    3-2

    1-0

    7-0

    OP-CODE

    RS

    RD

    Data

    表格 4 LDI指令格式

    LAD、STA、JMP和BZC指令格式如下表5

    7 6 5 4

    3-2

    1-0

    7-0

    OP-CODE

    M

    RD

    D

    5  LAD、STA、JMP和BZC指令格式

    其中M为寻址模式,具体见表6,以R2做为变址寄存器RI

    寻址模式M

    有效地址E

    说明

    00

    E=D

    直接寻址

    01

    E=(D)

    间接寻址

    10

    E=(RI)+D

    RI变址寻址

    11

    E=(PC)+D

    相对寻址

    6 寻址模式

    本模型机共有 15 条基本指令,表 7中 列出了各条指令的格式、汇编符号、指令功能,

    下表7为双字长指令的格式和具体功能:

    表7 双字长指令指令

    下表8为单字长指令的格式和具体功能和注解:

    表8 单字长指令指令

    3.1.2微指令分析

    微指令字长共24位,格式如下表10,A字段含义如下表11,B字段含义如下表12,C字段含义如下表13.

    其中,MA5-MA0为6位的后续微地址,A,B,C为3个译码字段,分别由三个控制位译码得到多种指令,S3--S0选择运算功能,WR,RD控制读写。

    23      

    22

    21

    20

    19

    1815

    1412

    119

    86

    50

    M32   

    M22

    WR

    RD

    IOM

    S3S0

    A字段

    B字段

    字段C

    MA5MA0

    表10微指令格式

    A字段

    14

    13

    12

    选择

    0

    0

    0

    NOP

    0

    0

    1

    LDA

    0

    1

    0

    LDB

    0

    1

    1

    LDRO

    1

    0

    0

    保留

    1

    0

    1

    LOAD

    1

    1

    0

    LDAR

    1

    1

    1

    LDIR

    表11  A字段格式

    B字段

    11

    10

    9

    选择

    0

    0

    0

    NOP

    0

    0

    1

    ALU_B

    0

    1

    0

    RS_B

    0

    1

    1

    RD_B

    1

    0

    0

    RI_B

    1

    0

    1

    保留

    1

    1

    0

    PC_B

    1

    1

    1

    保留

    表12  B字段格式

    C字段

    8

    7

    6

    选择

    0

    0

    0

    NOP

    0

    0

    1

    P<1>

    0

    1

    0

    P<2>

    0

    1

    1

    P<3>

    1

    0

    0

    保留

    1

    0

    1

    LDPC

    1

    1

    0

    保留

    1

    1

    1

    保留

    表13  C字段格式

    3.2、指令框图及分析(4分)

    指令框图如下图3所示,参考实验书中复杂机模型的微程序流程图,列出了了可以实现的15条微程序的指令框图,操作数准备用于确定寻址方式,p<2>测试用于确定指令功能,P<3>测试用于判断标志位。

    可知,MOV指令2个CPU周期,SUB指令3个CPU周期,ADD指令3个CPU周期。下指令框图中一个方框代表一个CPU周期,菱形符号用于表示判别或测试。

    图3指令框图

    3.3、指令系统对应微程序二进制代码及分析(4分)

     未对该微程序进行修改,微程序对应二进制代码表如下表14。

    表14  微指令二进制表

    多个微指令组成的序列可以用来实现微程序,参考指令框图对应实现。

    分析:因未对其进行修改,便不多做分析了,这边右环移指令是本次课设中我使用较多的指令,可以发现右环移指令和左环移指令其实互通。

    含义如下:

      $M 00 000001    ; NOP

      $M 01 006D43   ; PC->AR, PC加1

      $M 03 107070    ; MEM->IR, P<1>

      $M 04 002405    ; RS->B

      $M 05 04B201    ; A 加B->RD

      $M 06 002407    ; RS->B

      $M 07 013201    ; A 与B->RD

      $M 08 106009    ; MEM->AR

      $M 09 183001    ; IO->RD

      $M 0A 106010    ; MEM->AR

      $M 0B 000001    ; NOP

      $M 17 002418    ; RS->B

      $M 18 02B201    ; A 右环移->RD

      $M 1B 005341    ; A->PC

      $M 1C 10101D    ; MEM->A

      $M 1D 10608C    ; MEM->AR, P<2>

      $M 1E 10601F    ; MEM->AR

      $M 1F 101020    ; MEM->A

    $M 20 10608C    ; MEM->AR, P<2>

      $M 28 101029    ; MEM->A

      $M 29 00282A    ; RI->B

      $M 2A 04E22B    ; A 加B->AR

      $M 2B 04928C    ; A 加B->A, P<2>

      $M 2C 10102D    ; MEM->A

      $M 2D 002C2E    ; PC->B

      $M 2E 04E22F    ; A 加B->AR

      $M 2F 04928C    ; A 加B->A, P<2>

    3.4、机器程序及分析(4分)

    完整机器指令如下,旁边有其注解。

    $P 00 21;

    $P 01 00;

    $P 02 63;

    $P 03 01;

    $P 04 17;R1与R3-->R3;

    $P 05 F0;00乘法,01除法

    $P 06 B0;FZ=1,乘法指令开始

    ;;;;-----------------------------除法功能开始------------------------------------------

    ;初始化:

    $P 07 20

    $P 08 00    ;被除数存入R0

    $P 09 22

    $P 0A 00    ;除数存入R2

    $P 0B 61    ;R1初始化为00.用于被除数扩展的高八位

    $P 0C 00

    $P 0D 63

    $P 0E F8

    $P 0F D3   ;F8存入A0中,用于控制除法结束,过程中会发生变化

    $P 10 A0

    $P 11 63

    $P 12 07

    $P 13 D3

    $P 14 A1   ;07存入A1,用于左移;过程中不改变

    $P 15 E0;

    $P 16 1E;

    $P 1E D0    ;被除数存入A2中,过程中会改变

    $P 1F A2

    $P 20 D2    ;除数存入A3中,过程中不改变

    $P 21 A3

    $P 22 D1

    $P 23 A4    ;商存入A4中,过程中会改变

    ;判断大小

    $P 24 88;    R0-R2->R0

    $P 25 F0;     <=则跳转到S2中

    $P 26 8A;     S2;

    $P 27 C0;     >则继续计算

    $P 28 A2     ; R0取回被除数,此时FC不等于1,FZ也不等于1,进入循环体

    ;循环体:

    $P 29 C3

    $P 2A A4   ;重新从A4取出商R3

    $P 2B 62

    $P 2C 07

    $P 2D AB    ;1011;R3右移7位

    $P 2E C2

    $P 2F A3     ;重新从A3取出除数R2

    $P 30 D3     ;商更新后存回A4

    $P 31 A4

    $P 32 C3      ;取出07

    $P 33 A1

    $P 34 AD    ;1101,R1右移7位,实现左移功能

    $P 35 AC    ;1100,R0右移7位,实现左移功能

    $P 36 63

    $P 37 01;    避免FC标志位的影响

    $P 38 0F;   ADD 1111

    $P 39 63

    $P 3A 01;  R3 00000001

    $P 3B 1F;  AND 1111 避免RR指令中FZ的影响

    $P 3C 13;  AND 0011  R0与R3-->R3,取低八位的最低位作为高八位的最低位

    $P 3D F0;  FZ=1则跳转,即最低位为0

    $P 3E 46;  S4

    ;S5;            FZ不等于1,最低位为1,R3=00000001

    $P  3F 9D;  1101  R3 或R1---R1,R1低位置1

    $P  40 63;   R3=11111110

    $P  41 FE

    $P  42 1F;    AND 111111      避免FZ的影响

    $P 43 1C;     AND 1100 R3与R0--R0,低位置0,可能影响FZ

    $P 44 E0;     跳到S6,开始减法

    $P 45 4A

    ;s4:        R0低位为0

    $P 46 63   ;R3=11111110

    $P 47 FE

    $P 48 1D   ;AND 1101 R3 R1-->R1  ,低位置0

    $P 49 1C   ;AND  1100 R3,R0-->R0,低位置0,可能影响FZ,开始减法

    ;S6:

    $P 4A 63;R3=00000001

    $P 4B 01;

    $P 4C 0F;ADD ,使不进位

    $P 4D 63

    $P 4E 01;

    $P 4F 1F;AND ,不为0,避免上一步的fc=1,FZ=1造成的影响

    ;R3=00000001

    $P  50  D1;先把R1存在A5

    $P  51  A5;

    $P  52 89;  SUB 1001 R1-R2-->R1

    $P  53 C3 ;  R3取出现在的商A4位置

    $P  54 A4;

    $P 55  F0;若R1<=R2,为0或产生借位

    $P 56  66;S7

    ;SS:              r1>r2,不会产生进位,FC不会等于1,FZ有可能=1

    $P 57 62  ;r2=10000000

    $P 58 80

    $P 59 9B; 1011  r2 或 r3=r3 高位变成1

    $P 5A D3;商更新后便存回去A4位置

    $P 5B A4;

    $P 5C C3;重新A0取出计数值数存到R3中,

    $P 5D A0;

    $P  5E 1F;R3与R3,使FZ不等于1

    $P 5F 73; 0011 R3++

    $P 60 F0;判断是否加满8次,FC=1则跳转到结束

    $P 61 82;END

    $P 62 D3;未结束,则更新后的值存回A0位置

    $P 63 A0

    $P 64 E0;回到循环体中;此时R1更新了

    $P 65 29;循环体

    ;S7:R1<=R2,R1=R1-R2

    $P 66 62;R2=00000001

    $P 67 01

    $P 68 0A;ADD 1010 使得FC不等于1

    $P 69 62;R2=11111111

    $P 6A FF

    $P 6B 19  ;R2 yu r1=---r1

    $P 6C F0  ;R1等于0,FZ=1,跳到SS中

    $P 6D 57;SS

    ;R1<R2,R1=R1-R2

    ;S8:R1<R2

    $P 6E 62;R2=01111111

    $P 6F 7F

    $P 70 1B;1011 R2与R3-->R3,高位置0

    $P 71 D3; 存回A4中

    $P 72 A4

    $P 73 63 ;R3=000000001

    $P 74 01

    $P 75 1F

    $P 76 0F;使得FZ,FC不等于1

    $P 77 C3;取出计数值

    $P 78 A0

    $P 79 73;R3++

    $P 7A F0;结束则输出

    $P 7B 82;END

    $P 7C D3

    $P 7D A0;存回计数值

    $P 7E  C1

    $P 7F  A5;取回R1

    $P 80 E0

    $P 81 29;跳回循环体

    ;END:

    $P 82 C3

    $P 83 A4

    $P 84 62

    $P 85 07

    $P 86 AB

    $P 87 3C

    $P 88 40

    $P 89 50

            

    ;S2:

    $P 8A 62

    $P 8B FF

    $P 8C 06

    $P 8D 18

    $P 8E F0

    $P 8F 93;S3

    $P 90 34

    $P 91 40

    $P 92 50

    ;S3:

    $P 93 61

    $P 94 01

    $P 95 34  ;输出结果

    $P 96 40  

    $P 97 50

    ;;;;;;---------------------------------除法指令结束------------------------------

    ;;;;;;---------------------------------乘法指令开始------------------------------

    $P B0 20;

    $P B1 00;

    $P B2 22;

    $P B3 00;

    $P B4 61;

    $P B5 00;

    $P B6 63;

    $P B7 F8;

    $P B8 D3;

    $P B9 F0;

    ;循环体

    $P BA 63;

    $P BB 01;

    $P BC 1F;fz=0

    $P BD 1B; AND 1011 R2,R3-->R3,取R2最低位,存入R3

    $P BE F0;  为0则跳转C1

    $P BF C1;

    $P C0 01; 为1,ADD 0001 R0+R1-->R1,更新高八位

    ;;;C1

    $P C1 63; R3=01H

    $P C2 01;

    $P C3 AD;1101 R1循环右移1位--r1

    $P C4 AE;1110 R2循环右移1位--r2

    $P C5 63; R3=7F 0111111

    $P C6 7F; R2最低位已经使用过,现在挪到了最高位,置0

    $P C7 1E;AND 1110 R3与R2-->R2

    $P C8 63;R3=10000000

    $P C9 80;

    $P CA 17;AND 0111 R1与R3-->R3,

    $P CB 9E;OR 1110  R3或R2--->R2

    $P CC 63; R2的最高位变为R1的最高位,原先的最低位,把低位放入R2

    $P CD 01;R3=01

    $P CE AF;RR 1111 ,使得FZ不等于1

    $P CF F0; 判断相加的过程中是否产生了进位,产生了则高位置1

    $P D0 E0;溢出;

    $P D1 63;R3=01111111

    $P D2 7F;

    $P D3 1D;AND 1101 R3yuR1-->R1,否则高位置0

    $P D4 63;

    $P D5 01;

    $P D6 AF; 1111使得FZ不等于1

    $P D7 C3;取出计数值到R3

    $P D8 F0;

    $P D9 73;计数值++

    $P DA F0;加到第九次产生进位,FC=1,输出结果

    $P DB E5;结束

    $P DC D3;

    $P DD F0;

    $P DE E0;

    $P DF BA;循环体;

    ;;;;溢出

    $P E0 63;进位置1

    $P E1 80;

    $P E2 9D;

    $P E3 E0;跳到

    $P E4 D4;

    $P E5 34;

    $P E6 40;

    $P E7 34;

    $P E8 40;

    $P E9 34;

    $P EA 40;

    $P EB 34;

    $P EC 40;

    $P ED 38;

    $P EE 40;

    $P EF 50;

    规定运算类型和对应输入为下表15:

    乘法

    除法

    R0初始值

    R1初始值

    R2初始值

    R3初始值

    00H

    01H

    操作数a

    输入

    操作数b

    01H

    表15 输入格式

    选择指令(地址从00--06),流程图如下图4:

    图4 选择流程图

    即先靠输入选择对应运算,R0存输入选择.

    R1与R3(01),结果存入R3中,若等于0,则跳转Z1(即输入的为00,选择乘法)。若不等于0,不跳转(即输入的为01),进行除法。以此实现选择运算功能。

    乘法模块流程图5,指令地址从07--97:

    图5 乘法流程图

    除法思想:

    除法模块流程图如下,指令地址从B0--EF:

    图6乘法流程图

    四、实验步骤(4分)

    选择联机软件的“ 【转储】—【装载】 ”功能,在打开文件对话框中选择上面所保存的文件,软件自动将机器程序和微程序写入指定单元。

    选择联机软件的“ 【转储】—【刷新指令区】 ”可以读出下位机所有的机器指令和微指令,并在指令区显示,对照文件检查微程序和机器程序是否正确,如果不正确,则说明写入操作失败,应重新写入,可以通过联机软件单独修改某个单元的指令,以修改微指令为例,先用鼠标左键单击指令区的‘微存’TAB 按钮,然后再单击需修改单元的数据,此时该单元变为编辑框,输入 6 位数据并回车,编辑框消失,并以红色显示写入的数据。

    4.1、微程序写入及校验(2分)

    微程序载入。已校验,无错误。

    $M 00 000001;

    $M 01 006D43;

    $M 03 107070;

    $M 04 002405;

    $M 05 04B201;

    $M 06 002407;

    $M 07 013201;

    $M 08 106009;

    $M 09 183001;

    $M 0A 106010;

    $M 0B 000001;

    $M 0C 103001;

    $M 0D 200601;

    $M 0E 005341;

    $M 0F 0000CB;

    $M 10 280401;

    $M 11 103001;

    $M 12 06B201;

    $M 13 002414;

    $M 14 05B201;

    $M 15 002416;

    $M 16 01B201;

    $M 17 002418;

    $M 18 02B201;

    $M 1B 005341;

    $M 1C 10101D;

    $M 1D 10608C;

    $M 1E 10601F;

    $M 1F 101020;

    $M 20 10608C;

    $M 28 101029;

    $M 29 00282A;

    $M 2A 04E22B;

    $M 2B 04928C;

    $M 2C 10102D;

    $M 2D 002C2E;

    $M 2E 04E22F;

    $M 2F 04928C;

    $M 30 001604;

    $M 31 001606;

    $M 32 006D48;

    $M 33 006D4A;

    $M 34 003401;

    $M 35 000035;

    $M 36 006D51;

    $M 37 001612;

    $M 38 001613;

    $M 39 001615;

    $M 3A 001617;

    $M 3B 000001;

    $M 3C 006D5C;

    $M 3D 006D5E;

    $M 3E 006D68;

    $M 3F 006D6C;

    4.2、机器程序写入及校验(2分)

    已成功写入,但未截图。已检查,机器指令已在主存内存好,已校验,没有错误。

    五、实验结果及分析(16分)

    5.1、演示程序一(8分)

    数据(3分):

    先输入00选择乘法功能,单指令运行几次后,输入被乘数,

    乘数01,被乘数01:

    结果(2分):先闪现积的高八位,最终显示积的低八位,高八位存R1,低八位存R2,OUT单元先输出八位01,如下图,高八位00,输出正确.

    分析(3分):

     

    01H*01H=0001H,结果正确,已实现八位二进制数的乘法功能

    5.2、演示程序二(8分)

    数据(3分):先输入01选择除法功能,单指令运行几次后,输入被除数,

    除数。如下图所示被除数为C3(H)=197(D),除数为03(H),为3(D),已输入到R0,R2中,

    结果(2分):最终显示商的低八位,存在R3中未41(H)=65(D)

    OUT单元输出为41H:

    分析(3分):

    197/3=65.667,舍去小数,结果为65(D)=41(H)

    结果正确,已实现八位二进制数的除法功能。

    六、实验问题及思考(4分)

    1、当前所实现计算机,是否完整?如果不完整,还缺少哪些部件?

    不完整,没有改过微指令,有些功能无法直接实现,例如左移、和自减。

    2、当前所实现计算机,是否能实现除法运算?如果能,可通过哪些指令实现除法运算?

    不可以,只能通过许多微指令序列实现,本实验就有除法功能,具体可参考实验的机器指令实现除法功能。

    3、当前所实现计算机,还能实现哪些更复杂的计算?请举例说明

    还能计算除法所得的余数,但是本实验中没有存该余数,因为机器指令过长了。

    4、当前所实现计算机,指令系统的双字长指令是如何实现的?

    双字长指令指令字长度等于两个机器长度的指令。

    看指令长度。指令长32位,(注意下面还有位移量16位),因此是双字长。

    所有的运算类指令都是单字节指令,AND,ADD,INC,SUB,OR,RR,它们的寻址方式都是直接寻址。数据传输类指令IN,OUT,MOV,LDI,LAD,STA除了MOV外,都是双字节指令。LDI为立即寻址,LAD为直接寻址,STA为间接寻址,JMP为变址寻址,BZC为相对寻址。

    七、实验验收答辩环节问题和解答(20分)

    ①通路图中的T4是什么:执行指令的第4个节拍。

    ②寄存器R0-R3的作用:用于存放运算数。

    ③P<2>,P<3>测试框的含义:

    菱形框p<2>测试用于确定指令功能,P<3>测试用于判断标志位,以实现条件转移。

    实验收获

    以下是实现思想文字描述:

    8.1.1乘法功能算法思想

    实现原理:被乘数(设为A7A6A5A4A3A2A1A0)存入R0,乘数存入R2(设为B7B6B5B4B3B2B1B0)中,判断乘数和被乘数是否为0,有一个为0则直接输出积为0,程序结束;若两个数都不为0,则(R1初始值为00H):

    (1)先判断B的末位为1还是0,若为1,则R0+R1->R1,更新R1的值,进位标志ZF改变;若为0,R1不做处理。

    (2)R1,R2均循环右移1位,将R1的最高位(原先最低位)转到R2的最高位中,若加法过程中,不产生进位(ZF=0),则R1最高位置为0.若产生进位(ZF=1),则R1最高位置为1。

    (3)重复2步骤8次,输出结果R1存的为积的高八位,R2存的为积的第低八位。

    8.1.2除法功能算法思想:

    实现原理:被除数(设为A7A6A5A4A3A2A1A0)存入R0,除数存入R2(设为B7B6B5B4B3B2B1B0)中,先判断被除数是否小于等于除数,若等于除数,则直接输出商为1;若小于除数,则直接输出商为0;若大于除数,则:

    (1)R1存入00H,和R0(被除数)构成16位被除数A,R1为高位,R0为低位。

    (2)被除数A左移一位,成为被除数A*,再将B与A*的高八位比较,若A*的高八位大于等于B,则商Si为1,A*的高八位更新为高八位与B的差;反之,商Si为0;(i=7,6,5,4,3,2,1,0)

    (3)重复2操作8次后,即可得到商S=S7S6S5S4S3S2S1S0

    实现难点:

    (1)微指令只能实现循环右移,如何将两个8位二进制数构成的16位进制数左移:逻辑上,8位二进制左移x位=右移8-x位。

    (2)寄存器不够用:不断地放入内存,修改,再放入内存。

    (3)过多的BZC指令,判断前需要把影响该判断FZ,FC变为0:

    有许多的跳转,也有许多影响FZ,FC标志的指令,每次判断之前都使FC,FZ变无效。

    8.2.1整个的乘法的实现

    设被乘数为A,对应二进制数为A7A6A5A4A3A2A1A0,初始存入R0

    乘数为B       ,对应二进制数为B7B6B5B4B3B2B1B0,初始存入R2

    8位二进制数乘以八位二进制数最后的积是16位数二进制数,

    所以需要两个寄存器存储最后的结果,一个寄存器存高八位,

    一个寄存器存低八位。

    本程序中R1存高八位,R2存低八位,R1初始为00,R2初始为B.

    根据乘法思想,乘数被乘数都只有8位,所以乘8次即可,所以整个

    程序的循环体循环8次。

    这是循环体

    先得到 B与上00000001(b)(01H)的结果,即取出乘数的最低位b,

    根据最原始计算两数相乘的原理,若此时b=1,则把更新R1,把R0+R1存入

    R1(此时记录是否有进位,若有进位,则CF=1,无进位则CF=0);b=0,则R1不更新。

    R1和R2(乘数)都循环右移一位,即把最低位移到了最高位,现最高位为原最低位。

    R2(乘数)的原最低位已经用过了,可以不再使用,所以把R1的原最低位移入R2的现最高位,为了使R1和R2实现存储16位的积;若更新R1时CF=1(即产生了进位),则把R1高位置1,若更新R1时CF=0(不产生进位),则把R1高位置0。

    判断是否循环了8次,已经循环了8次后跳出循环,输出结果

    未循环8次则跳入循环体。

    8.2.2整个除法的实现

    设被除数为A,对应二进制数为A7A6A5A4A3A2A1A0,初始存入R0

    除数为B       , 对应二进制数为B7B6B5B4B3B2B1B0,初始存入R2

    8位二进制数相除最后的到的商也是8位,只用一个寄存器就可以存商

    本程序中,商的结果精确到个位,采用舍入原则。

    为了使除法方便进行,先把A扩展为16位,使用R1扩展,初始为00H,

    R1和R0构成新的被除数A*,除8次即可,所以在R0>R2的情况下,整个程序的循环体循环8次。

    若R0=R2,直接输出01结束,若R0<R2,直接输出0结。

    这是R0>R2情况下的循环体

    先把A*(被除数)左移一位:

    (具体实现方法为:分别将R1和R0都循环右移7次,实现循环左移1次的功能,此时,

    R0的原最高位变为现最低位,R1也是,我们希望实现的效果是把R0的原最高位移入R1的原最低位中实现被除数的左移,所以,此时把R0的现最低位移入R1的现最低位,再把R0的最低位置为0,实现左移一位的功能

    )

    此时,R1和R0中的数据都有所更新,变为左移后的高八位和低八位,

    比较R1和R2的大小,若R1(被除数高八位)>=R2,则得到商的一位为1,R1更新为R1-R2的值若R1<R2,则得到商的一位为0,R1不更新;

    处理商的办法,最先得到的为最高位的值,所以每次都将得到的商置为R3的最高位,在将其循环左移一位(方法类似上面),循环8次后,则最先的到的商即为商的最高位。

    判断是否循环了8次,已经循环了8次后跳出循环,输出结果R3。

    未循环8次则跳入循环体。

    收获:

    复杂机模型跳转时使用BZC指令,它根据ZF和CF标志跳转的,而BZC指令受上一步中的FC,FZ影响,  由于微指令这边没有直接改FC和FZ的指令,所以只能参与运算人为地改变FC,FZ的值,势必增加代码的长度。

    沿用了书本上给的微指令,本来是想对实现的是简单计算器,实现8位二进制数的加减乘除,但是因为指令过长,在0-FF勉强写完了乘法和除法的指令。

    代码中可能还存在一些冗余,要分析好每一步导致的FC和FZ的变化,才能运用这两个标志实现下一次的条件跳转,但是因为这里面的条件跳转指令太多了,所以我每次在判断前都是分别吧FZ和fc置0,开始没有分析好各种指令

    对FZ和fc的影响,导致代码过长,并且繁琐,所以在开始实验前就应该弄懂实验的原理,分析好代码,提高代码的效率。

    展开全文
  • 二进制乘法、除法的计算过程解读

    千次阅读 多人点赞 2021-01-18 20:55:11
    本文包括4位二进制乘法(4位乘4位)和8位二进制除法(8位除4位)的详细计算过程。 1.创作原因 计组实验中的涉及到此问题,当时上网查阅了许多博客和资料都没能理解这两者的计算过程,因此想写一篇博客为后来者提供...

    0. 问题描述

    本文包括4位二进制乘法(4位乘4位)和8位二进制除法(8位除4位)的详细计算过程。

    1.创作原因

    计组实验中的涉及到此问题,当时上网查阅了许多博客和资料都没能理解这两者的计算过程,并且我发现许多资料上的计算过程显得非常繁琐、晦涩,明明两三句话就可以讲明白的东西偏要说的不明不白,细节的地方忽略,计算过程示例也很少且不清楚,导致我遇到了很大困难。后来历经磨难终于理解了这两个计算过程,当时就决心要写一篇博客把这个用最简单但却最详细的话讲清楚,为后来者提供便利,少走一些弯路,多节约一些时间。
    下面我们直接开始吧~

    2.二进制乘法

    被乘数设为5:101B
    乘数设为7:111B

    开始计算之前设置一个变量N保存乘法的最终结果,初始化为0。
    则有详细的计算过程如下:

    1. 判断乘数111B的最后一位为1,则N加上被乘数,N更新为0+5=5
    2. 乘数右移一位更新为11B,被乘数左移一位更新为10
    3. 判断乘数11B最低位为1,则N加上被乘数,N更新为10+5=15
    4. 乘数右移一位更新为1B,被乘数左移一位更新为20
    5. 此时乘数1B最低位为1,则N加上被乘数,N更新为20+15=35
    6. 乘数右移一位更新为0,被乘数左移一位更新为40
    7. 此时检测乘数为0,循环结束,N的最终结果为35,即为乘法的结果

    下面来总结一下整个计算过程的要点:

    • 继续循环还是结束循环取决于什么时候乘数变为0
    • 每一次循环中如果乘数最后一位为1则N加上被乘数;为0则不加上被乘数

    下面再来看一下它的思想是什么:
    我们知道 8 ∗ 8 = 16 ∗ 4 = 32 ∗ 2 = 64 ∗ 1 = 64 8*8=16*4=32*2=64*1=64 88=164=322=641=64, 这个乘法的特点就给了我们计算二进制乘法的思路,二进制中左移是乘2,右移是除2,如果被乘数左移乘数右移那么他们的乘积是不变的,即: 100 B ∗ 10 B = 1000 B ∗ 1 B = 1000 B = 8 100B*10B=1000B*1B=1000B=8 100B10B=1000B1B=1000B=8。但是如果乘数的末位为1的话不能简单地进行左移右移,设想如果不加处理乘数直接右移那么结果就会丢失掉一个被乘数的大小,这也就是为什么如果判断末位为1结果就要加上一个被乘数的原因。

    8位乘8位的结果需要16位保存,其计算过程也与上方相同,只是需要涉及的寄存器更多,更加复杂一些。

    3.二进制除法

    被除数24:11000B
    除数5:101B

    开始计算前我们设置一个N表示商,其值初始化位0。
    则有详细的计算过程如下:

    1. 将除数的最高有效位左移至与被除数的最高有效位对齐,这里将除数101B左移两位即可,除数更新为10100B
    2. 用被除数11000B减除数10100B,发现减得过来,因为减得过来,所以商+1,商更新为N=1。减法的结果为100B,所以被除数更新为100B
    3. 用被除数100B减除数10100B,发现减不过来,因为减不过来,所以除数右移一位,更新为1010B;因为除数右移一位,所以商左移一位更新为N=1*2=2 (注:左移就是与2做乘法)
    4. 用被除数100B减除数1010B,发现减不过来,所以除数右移一位,更新为101B;因为除数右移一位,所以商左移一位更新为N=2*2=4
    5. 发现现在除数的大小又变回了最开始的大小101B,则循环结束。所以现在的N=4就是除法结果,现在的被除数100B就是除法的余数
    6. 结束,结果正确

    下面来总结一下整个计算过程的要点:

    • 有许多资料可能会设置一个计数器,但我采用的的是另外的方法,和计数器其实是差不多的。除法进行到最终,除数一定要与最开始的除数相等,如果不相等则需要除数一直右移直至相等为止,相应的商也要左移同样的位数(这其实就是整除的情况)
    • 循环继续还是停止取决于除数是否与最开始的除数相等
    • 循环中,用被除数减除数,如果减得过来就用减法结果更新被除数并商+1;如果减不过来除数就右移一位,商左移一位
    • 减不减得过来其实就看在做减法的过程中是否产生借位就可以了,在汇编语言中可以体现为标志位CF是否为1

    下面我再举一个整除的例子:
    被除数8:1000B
    除数2:10B

    计算开始:

    1. 除数10B左移两位,更新为1000B
    2. 被除数1000B减除数1000B,减得过来所以商+1,商更新为N=1;减法的结果为0所以被除数更新为0
    3. 被除数0减除数1000B,减不过来所以除数右移一位更新为100B,因此商左移一位更新为N=1*2=2
    4. 被除数0减除数100B,减不过来所以除数右移一位更新为10B,因此商左移一位更新为N=2*2=4
    5. 此时除数已经等于原来的除数所以循环结束,除法的商为4,余数等于此刻的被除数0
    6. 除法结束,结果正确

    你是否对上面有一点说法有所疑惑?我在上面说到了如果什么时候除数与最开始的除数相等则结束循环,那么肯定有人会想,如果刚开始除数就不需要左移(这个时候被除数与除数位数相同),这时候是不是只进行一次循环就停止呢?

    举一个除数不需要左移的例子:
    被除数14:1110B
    除数9:1001B

    还是设除法的商为N,初始化为0。
    则有详细的计算过程如下:

    1. 除数1001B与被除数1110B最高有效位对齐,所以无需左移
    2. 被除数1110B减1001B,发现减得过来,则商+1,N更新为N=0+1=1;减法结果为101B,则被除数更新为101B
    3. 被除数101B减除数1001B,发现减不过来,再发现此时除数与最开始的除数相等,所以除数无需右移,计算直接结束
    4. N=1为最终的商,被除数为101B则为除法的余数

    那么上面的计算过程需要注意这些地方:

    • 注意你需要在计算的什么地方判断除数是否等于最开始的除数,也就是说你需要明白你应该把判断除数这一过程放在步骤的哪一步才能让计算正确的结束,这需要思考
    • 这个计算过程能够正确计算被除数小于除数的情况

    它的计算思想就不细说了,在上述计算过程中都有所体现。
    我用汇编语言分别实现了这两个计算过程,如下:

    4.汇编实现

    4.1 4乘4乘法

        mov R0, #9
        mov R1, #7
        mov R2, #0
    
        mov A, R0
        and A, R0
        jz OVER;check zero
    LOOP:
        mov A, R1
        and A, R1
        jz OVER;check zero
        and A, #1
        jz TAG2
        mov A, R2
        add A, R0
        mov R2, A
    TAG2:
        mov A, R1
        shr R1
        mov A, R0
        shl R0
        jmp LOOP
    OVER:
        halt 
    

    4.1 8除4除法

            mov R1, #3;除数
            mov R2, #0;商
            mov A, R1
            mov 90, A;把除数存储起来
            
            ;计算计数器的值
    JUDGE_CNT:
            mov A, R1
            and A, #80h
            jz RM;如果是0就左移
            jmp JUDGE_CNT_END
    RM:
            shl R1
            jmp JUDGE_CNT
    JUDGE_CNT_END:
            mov A, R0
            sub A, R1
            jc ADD_BACK_MOVE;不够减加回去,除数右移
            ;够减商加一,被除数更新
            mov R0, A
            add R2, #1       
            
    ADD_BACK_MOVE:;不够减的情况
            ;除数右移一位
            mov A, R1
            sub A, 90
            jz OVER;减到原除数大小结束
            shr R1
            shl R2
            jmp JUDGE_CNT_END
    OVER:
            jmp OVER
    

    4.3 说明

    这两个汇编程序不是8086那套东西所以可能有不一样的地方,不用在意,大家只需要关注其中的计算过程即可。

    5.ending

    若有疑问可以在评论区提出一起来探讨,对你有帮助的话别忘了点赞喔~

    展开全文
  • 十进制转换成无符号二进制数:(无符号二进制整数无法表示负十进制数)。1、整数部分:采用"2取余,逆序排列"。用2整除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为...
  • 计算机基础:16、二进制--有符号数和无符号数1、有符号数和无符号数1.1、二进制原码表示1.2、二进制的补码表示1.3、二进制的反码1.4、小数的补码1.5、原码、补码、反码总结 1、有符号数和无符号数 1.1、二进制...
  • 二进制除法的实现

    万次阅读 多人点赞 2017-09-25 11:49:20
    转自:...因为无论是减法还是乘法,都可以由加法运算来替代,唯有除法不能由加法替代。 了解计算机运算的规律,可以有助于我们理解很多程序代码上无法理解的内容。比如上章提到的溢
  • 龙源期刊网http://www.qikan.com.cnC语言中整型无符号二进制数的表示问题作者:马红旭来源:《电子技术与软件工程》2015年第20期摘要文章解决的问题是C语言中几种不同数制的数值型无符号整型数据,转换成二进制数的...
  • 什么叫二进制二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,由18世纪德国数理哲学大师莱布尼兹发现。当前的...
  • 本文介绍了二进制binary数据在存储器的表示方式,C语言的位运算符号,有符号和无符号混合运算的规则,主要是乘法和除法规则不同。最后以IIR滤波器定点实现的例子来说明如何提高计算精度。二进制数据与补码、原码和...
  • 2.1长除法长除法适用于整式除法、小数除法、多项式除法(即因式分解)等较重视计算过程和商数的除法,过程中兼用了乘法和减法。...2.2二进制除法 2.2.1理论分析这种算法将被除数和除数看成是二进制(虽然计算机...
  • 单片机汇编语言--双字节二进制无符号数与单字节和双字节做除法,两个程序
  • 十进制数-38的8位二进制补码是首先,写出原码 :? 1010 0110?? ,???? 最高位的1表示负号?负数的补码是其原码的各位取反,再加1 ,(最高位符号位除外),所以,?十进制数-38的8位二进制补码是?? 1101 1010关于二进制...
  • 二进制(1):无符号编码和补码编码

    千次阅读 2016-05-25 19:08:15
    二进制既是将不同长度的“位”(一个1或0)组合在一起再加上不同的解释以赋予含义。同样的机器代码[ 1000 1010] 在不同的编码模式下的意义是不同的。 这里分析一下无符号编码,既是C语言中的unsigned int, 与补码...
  • 相信知道除法的作用的人都知道除法怎么来计算吧,不过计算机计算除法的方法可能优点浪费资源了以下是使用位计算转换除法的过程,相信知道游戏编程的朋友对这个应该不陌生吧原理:假如要实现A/B,B如果是2的整数次方的...
  • 2)二进制的简写形式二、进制运算1)八进制运算表(1) 加法运算表(2)乘法运算表(3)八进制简单运算题三、数据宽度1)什么是数据宽度2)计算机中常用的基本数据宽度四、无符号数有符号数进制进制也就是进位计数制,是人为...
  • verilog 实现8位无符号除法

    千次阅读 2020-10-03 13:51:05
    一、算法(非原创) ...在Verilog HDL语言中虽然有除的运算指令,但是除运算符中的除数必须是2的幂,因此无法...最简单的方法就是减法实现除法器(比如十进制中的a/b,可先比较a与b的大小,如果a>b,则商加1,a<=a-b,
  • 计算机组成原理 定点运算-移位、加、减、乘、(详细解析-看完就会)​blog.csdn.net...在计算机中二进制移位左移:数值绝对值变为原来2倍右移:数值绝对值变为原来1/2倍4.算术移位规则有符号位的移位左移1位:机器数...
  • 二进制常用的有原码,反码和补码,他们都是由最左边的一个符号位和右边的数值位构成。在计算机中为了更低成本的计算,数据都是用补码来存储和运算的。 原码 最高位表示符号位(0代表正数,1代表负数)。剩下的位数...
  • verilog移位相减实现除法(转载)

    千次阅读 2020-12-21 12:01:00
    引言除法器在FPGA里怎么实现呢?当然不是让用“/”和“%”实现。在Verilog HDL语言中虽然有除的运算指令,但是除运算符中的除数必须是2的幂,因此无法实现除数为任意整数的除法,很大程度上限制了它的使用领域。并且...
  • 大家好啊,今天为大家带来的是自己实现的用C++编写的简单进制转换器,用于10进制数和8进制数,16进制数,2进制数的相互转换. 首先,说明一下什么是进制.n进制就是一种用来表示数值的方法,n进制,顾名思义,逢n进1.我们...
  • 整数相比浮点数在计算机数字存储中算是最基础、最简单的二进制存储结构,通常情况下在任意编程语言中不会遇到本文所述的无符号整数转有符号整数的问题(或者借助语言专有的方法亦可轻松转换),但是如果遇到存储的...
  • [其实计算机处理 算术运算时都是加法和移位,并没有乘除法,如11B左移一位就成了110B,11B是十进制的3,而110B是6,看看是不是等于乘二,左移乘,右移就除,哈哈,好玩吧]此外,二进制数的“1”和“0”正好可与 逻辑...
  • C语言中的运算规则(2)

    千次阅读 2021-05-20 02:28:40
    3、“异或”运算符(^)他的规则是:若参加运算的两个二进制位值相同则为0,否则为1即0∧0=0,0∧1=1,1∧0=1, 1∧1=0例: 00111001∧ 0010101000010011c语言源代码:#includemain(){int a=071;int b = 052;printf("%...
  • 二进制浮点数以及二进制浮点数算术运算二进制浮点数表示半精度浮点数单精度浮点数双精度浮点数特殊情况浮点数的运算步骤一、对阶二、尾数运算三、结果规格化左规操作右规操作四、 舍入处理五、 溢出判断六、例子...
  • 整型转换为二进制字符串(无符号右移)整型转换为二进制字符串,可以使用2留余,不过使用无符号右移更加方便。将整型数字转换为二进制字符串,一共32位,不舍弃前面的0/** * 将整型数字转换为二进制字符串,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 54,526
精华内容 21,810
关键字:

无符号二进制除法