程序地址

机器码

反汇编语言

指令说明

;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)

cop2000实现补码两位乘的更多相关文章

  1. 「C语言」原码反码补码与位运算

    尽管能查到各种文献,亲自归纳出自己的体系还是更能加深对该知识的理解.     本篇文章便是在结合百度百科有关原码.反码.补码和位运算的介绍并深度借鉴了张子秋和Liquor相关文章后整理而出.   目录 ...

  2. 原码、反码、补码及位操作符,C语言位操作

    计算机中的所有数据均是以二进制形式存储和处理的.所谓位操作就是直接把计算机中的二进制数进行操作,无须进行数据形式的转换,故处理速度较快. 1.原码.反码和补码 位(bit) 是计算机中处理数据的最小单 ...

  3. Booth算法: 补码一位乘法公式推导与解析

    以下讲解内容出自<计算机组成原理(第三版)>(清华大学出版社) 大二学生一只,我的计组老师比较划水,不讲公式推导,所以最近自己研究了下Booth算法的公式推导,希望能让同样在研究Booth ...

  4. java原码、反码、补码、位运算

    1.对于有符号的数(java中的数都是有符号的) 二进制的最高位是符号位:0表示正数,1表示负数 正数的原码,反码,补码都一样 负数的反码=它的原码符号位不变,其它位取反 负数的补码=它的反码+1 0 ...

  5. java使double保留两位小数的多方法 java保留两位小数

    这篇文章主要介绍了java使double类型保留两位小数的方法,大家参考使用吧 复制代码 代码如下: mport java.text.DecimalFormat; DecimalFormat    d ...

  6. PHP 小数点保留两位【转】

    最近在做统计这一块内容,接触关于数字的数据比较多, 用到了三个函数来是 数字保留小数后 N 位: 接下来简单的介绍一下三个函数: 1.number_format echo number_format( ...

  7. PHP 小数点保留两位

    最近在做统计这一块内容,接触关于数字的数据比较多, 用到了三个函数来是 数字保留小数后 N 位: 接下来简单的介绍一下三个函数: 1.number_format echo number_format( ...

  8. js保留两位小数

    js保留两位小数四舍五入: (Math.floor(until_price*100)/100).toFixed(2);//会四舍五入   保留两位小数 且不四舍五入(三种方式,请用最后一种): var ...

  9. JS限制input输入的为数字并且有小数的时候最多保留两位小数

    JS限制input用户输入的为数字并且有小数的时候最多保留两位小数,代码如下: html部分: <input type="number" onkeypress="r ...

随机推荐

  1. MySQL数据库(1)----入门级操作

    1.在服务器主机上以 root 用户登陆,创建位于其他客户端的新用户: mysql> CREATE USER 'newuser'@'192.168.1.109' IDENTIFIED BY 'p ...

  2. hihoCoder 1148 2月29日

    时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定两个日期,计算这两个日期之间有多少个2月29日(包括起始日期). 只有闰年有2月29日,满足以下一个条件的年份为闰年: ...

  3. 1 如何使用pb文件保存和恢复模型进行迁移学习(学习Tensorflow 实战google深度学习框架)

    学习过程是Tensorflow 实战google深度学习框架一书的第六章的迁移学习环节. 具体见我提出的问题:https://www.tensorflowers.cn/t/5314 参考https:/ ...

  4. C++异常安全

    转自:http://www.cnblogs.com/zgfLawliet/p/3417308.html   异常安全的代码是指,满足两个条件 1异常中立性 : 是指当你的代码(包括你调用的代码)引发异 ...

  5. 十大创客与微软智能云Azure

    由微软举办的“2016年创客先锋—基于微软智能云Azure 的 SaaS 应用软件大赛”已于本周二在中关村圆满落幕.来自全国22家孵化园的创客,历时两个月,开发出百余项基于微软智能云Azure开发的创 ...

  6. CXPACKET等待事件

    今天收到数据库预警,发现连接数较多.于是立马登录查看机器的基本情况: select * from sys.sysprocesses 查看了一下连接数,发现有两个进程都处于CXPACKET状态,而且看得 ...

  7. Log4j的配置文件

    附:Log4j比较全面的配置 Log4j配置文件实现了输出到控制台.文件.回滚文件.发送日志邮件.输出到数据库日志表.自定义标签等全套功能. log4j.rootLogger=DEBUG,consol ...

  8. yii2.0数据库查询修改等方法

    yii2.0学习有一段时间了,给大家分享一下一些简单的查询等如何操作. 查询:(这里最前面的Test是引用的模型名) Test::find()->all();    此方法返回所有数据: Tes ...

  9. July 23rd 2017 Week 30th Sunday

    Setting goals is the first step in turning the invisible into the visible. 设定目标是将实现梦想的第一步. If you wa ...

  10. hiredis

    hiredis是redis开源库对外发布的客户端API包. 当redis-server配置启动后,可以通过hiredis操作redis资源. 主要分为: strings.hash.lists.sets ...