zoukankan      html  css  js  c++  java
  • cop2000实现补码两位乘

    程序地址

    机器码

    反汇编语言

    指令说明

     

     

    ;IN

    可以使用此指令在cop2000上输入数据

    00

    7C4B

    MOV A,#4BH

    模拟输入X

    02

    80

    MOV R0,A

    放入R0

    03

    88F9

    MOV 0F9H,A

    放入F9

    05

    1C80

    ADD A,#80H

    判断是不是负数

    07

    70

    MOV A,R0

    X放到A (求2X

    08

    D4

    RL A

    左移一位

    09

    A00D

    JC YIYI

    是负数的话跳到YIYI

    0B

    AC11

    JMP LLING

    不是就到LLING

     

     

    YIYI:

     

    0D

    6C80

    OR A,#80H

    将左移后的X首位强制换为1

    0F

    AC13

    JMP ZXC

     

     

     

    LLING:

     

    11

    5C7F

    AND A,#7FH

    强制换为0

     

     

    ZXC:

     

    13

    88FA

    MOV 0FAH,A

    换好后放入FA,此为2X

     

     

     

     

    15

    70

    MOV A,R0

    求 [-X]

    16

    E4

    CPL A

     

    17

    1C01

    ADD A,#01H

    末位加一

    19

    88FE

    MOV 0FEH,A

    [-X]放入OFEH

    1B

    1C80

    ADD A,#80H

    求2[-X]

    1D

    A028

    JC ZHIYI

     

    1F

    78FE

    MOV A,0FEH

     

    21

    D4

    RL A

     

    22

    6C80

    OR A,#80H

    首位置1

    24

    1C80

    ADD A,#80H

     

    26

    AC2D

    JMP o1

     

     

     

    ZHIYI:

     

    28

    78FE

    MOV A,0FEH

     

    2A

    D4

    RL A

     

    2B

    6C80

    OR A,#80H

     

     

     

    o1:

     

    2D

    88FD

    MOV 0FDH,A

    2[-X]放入OFDH

     

     

     

     

     

     

    ;IN

     

    2F

    7CA6

    MOV A,#0A6H

    模拟输入Y

    31

    81

    MOV R1,A

    Y放到R1

     

     

     

     

    32

    7C04

    MOV A,#04H

    循环次数

    34

    88FB

    MOV 0FBH,A

    放入OFBH

     

     

     

     

     

     

     

     

     

     

    MAIN:

    主流程

    36

    BCCA

    CALL GET_N

    计算Yn+1 + Yn - Yn-1的值

    38

    73

    MOV A,R3

     

    39

    1C01

    ADD A,#01H

    判断值是多少

    并跳转到相应位置

    3B

    A44B

    JZ FUYI

    3D

    1C01

    ADD A,#01H

    3F

    A452

    JZ FUER

    41

    3C02

    SUB A,#02H

    43

    A45E

    JZ LING

    45

    3C01

    SUB A,#01H

    47

    A456

    JZ YI

    49

    AC5A

    JMP ER

     

     

     

     

     

     

    FUYI:

     

    4B

    78FE

    MOV A,0FEH

    对应规则表找到要操作的数

    4D

    83

    MOV R3,A

    放到R3

    4E

    BCAE

    CALL GET_F8

    得到部分积的新符号

    50

    AC9F

    JMP XIANG_JIA

     

     

     

    FUER:

     

    52

    78FD

    MOV A,0FDH

    同上

    54

    AC60

    JMP YOU_HUA2

     

     

    YI:

     

    56

    78F9

    MOV A,0F9H

    同上

    58

    AC60

    JMP YOU_HUA2

     

     

    ER:

     

    5A

    78FA

    MOV A,0FAH

    同上

    5C

    AC60

    JMP YOU_HUA2

     

     

    LING:

     

    5E

    78FF

    MOV A,0FFH

    同上

     

     

    YOU_HUA2:

    60

    83

    MOV R3,A

     

    61

    BCAE

    CALL GET_F8

     

    63

    AC9F

    JMP XIANG_JIA

     

     

     

    JIA_WAN:

     

    65

    BC75

    CALL YOU_YI_YI_CI

    把Y、部分积右移一次

    67

    78FB

    MOV A,0FBH

    看循环是否结束

    69

    3C01

    SUB A,#01H

     

    6B

    A4EE

    JZ  EN

    结束就结束

    6D

    88FB

    MOV 0FBH,A

    不结束就继续

    6F

    BC75

    CALL YOU_YI_YI_CI

     

    71

    AC36

    JMP MAIN

     

     

     

     

     

    73

    ACEE

    JMP EN

    分隔上下文,使思路更清晰

     

     

     

     

     

     

    YOU_YI_YI_CI:

     

    75

    71

    MOV A,R1

    Y放到A

    76

    5C01

    AND A,#01H

    将末位移到0FCH

    78

    A47E

    JZ TT1

     

    7A

    7C80

    MOV A,#80H

     

    7C

    AC80

    JMP TT2

     

     

     

    TT1:

     

    7E

    7C00

    MOV A,#00H

     

     

     

    TT2:

     

    80

    88FC

    MOV 0FCH,A

     

    82

    71

    MOV A,R1

    右移Y

    83

    D0

    RR  A

    84

    81

    MOV R1,A

    85

    72

    MOV A,R2

    判断Y符号

    86

    5C01

    AND A,#01H

    88

    71

    MOV A,R1

    89

    A48E

    JZ TT3

    8B

    71

    MOV A,R1

    8C

    6C80

    OR A,#80H

     

     

    TT3:

    8E

    81

    MOV R1,A

    8F

    78F8

    MOV A,0F8H

    判断部分积符号并右移部分积

    91

    3C00

    SUB A,#00H

    93

    A49B

    JZ  TNT

    95

    72

    MOV A,R2

    96

    D0

    RR A

    97

    6C80

    OR A,#80H

    99

    AC9D

    JMP TNT1

     

     

    TNT:

    9B

    72

    MOV A,R2

    9C

    D0

    RR A

     

     

    TNT1:

    9D

    82

    MOV R2,A

    9E

    CC

    RET

     

     

     

     

     

     

    XIANG_JIA:

     

    9F

    73

    MOV A,R3

    把对应的值放到A并相加

    A0

    12

    ADD A,R2

    A1

    82

    MOV R2,A

    A2

    A0A6

    JC TMT

    求出完全0F8的值

    A4

    AC65

    JMP JIA_WAN

     

     

    TMT:

    A6

    78F8

    MOV A,0F8H

    A8

    3C01

    SUB A,#01H

    AA

    88F8

    MOV 0F8H,A

    AC

    AC65

    JMP JIA_WAN

     

     

     

     

     

     

     

    GET_F8:

    求出部分0F8的值

    AE

    1C80

    ADD A,#80H

    判断规则表对应数的首位是否为1

    B0

    72

    MOV A,R2

    部分积放到A

    B1

    A0BF

    JC T1

    部分积首位与规则表首位相加在放到0F8H

    B3

    1C80

    ADD A,#80H

    B5

    A0BB

    JC T3

    B7

    7C00

    MOV A,#00H

    B9

    ACC7

    JMP YOU_HUA

     

     

    T3:

    BB

    7C01

    MOV A,#01H

    BD

    ACC7

    JMP YOU_HUA

     

     

    T1:

    BF

    1C80

    ADD A,#80H

    C1

    A0C5

    JC T2

    C3

    ACBB

    JMP T3

     

     

    T2:

    C5

    7C02

    MOV A,#02H

     

     

    YOU_HUA:

    C7

    88F8

    MOV 0F8H,A

    C9

    CC

    RET

     

     

     

     

     

     

     

    GET_N:

     

    CA

    78FC

    MOV A,0FCH

    Yn+1放到A

    CC

    1C80

    ADD A,#80H

    分别找到八种情况对应的4种值并将Yn+1+Yn-2Yn-1结果存入R3

    CE

    A0D4

    JC YI2

    D0

    7C00

    MOV A,#00H

    D2

    ACD6

    JMP LINGG

     

     

    YI2:

    D4

    7C01

    MOV A,#01H

     

     

    LINGG:

    D6

    83

    MOV R3,A

    D7

    71

    MOV A,R1

    D8

    5C01

    AND A,#01H

    DA

    A4E0

    JZ LING1

    DC

    7C01

    MOV A,#01H

    DE

    ACE2

    JMP YI1

     

     

    LING1:

    E0

    7C00

    MOV A,#00H

     

     

    YI1:

    E2

    13

    ADD A,R3

    E3

    83

    MOV R3,A

    E4

    71

    MOV A,R1

    E5

    5C02

    AND A,#02H

    E7

    A4ED

    JZ LING3

    E9

    73

    MOV A,R3

    EA

    3C02

    SUB A,#02H

     

     

    LING2:

    EC

    83

    MOV R3,A

     

     

    LING3:

    ED

    CC

    RET

     

     

     

     

     

     

     

     

     

     

     

    EN:

    结束中断

    EE

    71

    MOV A,R1

    将最后的Y末位清零

    EF

    5CFE

    AND A,#0FEH

    F1

    81

    MOV R1,A

    F2

    ACEE

    JMP EN

    花了好多天搞出来的,不忍心在硬盘中把它直接删掉,(八位其中首位为符号位,结果存在R2与R1)

  • 相关阅读:
    UML图箭头关系
    使用 Python 编写 vim 插件
    linux grep命令
    gevent For the Working Python Developer
    坐标系旋转变换公式图解
    欲哭无泪的p-value = 0.051 | 做几次重复能得到较低的p-value
    RNA-seq要做几次生物学重复?找出来的100%都是真正的应答基因
    Strand Specific mRNA sequencing 之重要性与分析
    为什么二代测序的原始数据中会出现Read重复现象?
    DNA甲基化研究概述
  • 原文地址:https://www.cnblogs.com/selfdef/p/10259776.html
Copyright © 2011-2022 走看看