程序地址

机器码

反汇编语言

指令说明

;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. 两种实现光标点插入range

    一.insertNode <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...

  2. iSCSI配置

    iSCSI介绍 几种存储的架构: 直接存取 (direct-attached storage):例如本机上面的磁盘,就是直接存取设备: 透过储存局域网络 (SAN):来自网络内的其他储存设备提供的磁盘 ...

  3. 使用spring tool suite(STS)工具创建spring boot项目和出现错误后的处理

    一.先下载配置maven环境 1.下载地址:http://maven.apache.org/download.cgi windows下下载zip文件 2.解压后放到某个文件目录下 3.配置环境变量 ( ...

  4. python mqtt client publish操作

    使用Python库paho.mqtt.client 模拟mqtt client 连接broker,publish topic. #-*-coding:utf-8-*- import paho.mqtt ...

  5. cookie的初识和运用(js和jq)

    cookie是什么 cookie是浏览器提供的一种机制,它将document 对象的cookie属性提供给JavaScript.可以由JavaScript对其进行控制,而并不是JavaScript本身 ...

  6. Eclipse编码格式

    来源:http://e-ant.javaeye.com/blog/177579 如果要使插件开发应用能有更好的国际化支持,能够最大程度的支持中文输出,则最好使 Java文件使用UTF-8编码.然而,E ...

  7. Http协议和web本职【转自丁码农】

    当你在浏览器地址栏敲入“http://www.cnblogs.com/”,然后猛按回车,呈现在你面前的,将是博客园的首页了(这真是废话,你会认为这是理所当然的).作为一个开发者,尤其是web开发人员, ...

  8. Ubuntu Tweak (linux下的优化大师)

    Ubuntu Tweak 是中国人开发的一款专门为Ubuntu准备的配置.调整工具,它类似与compiz,但是界面更友好. 下面是安装命令: 第一步:添加tweak源 sudo add-apt-rep ...

  9. 记录一个比较少用的容器C++ std::bitset

    bitset存储二进制数位. bitset就像一个bool类型的数组一样,但是有空间优化——bitset中的一个元素一般只占1 bit,相当于一个char元素所占空间的八分之一. bitset中的每个 ...

  10. QuantLib金融库的简易安装

    最近在弄毕设,研究关于固定收益债券定价方面的知识,需要使用到QuantLib这个Python金融库,但是这是一个C++编译的库,官网也只给出了源代码,安装起来十分繁琐,所以在网上找了一个简易的安装方法 ...