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)
cop2000实现补码两位乘的更多相关文章
- 「C语言」原码反码补码与位运算
尽管能查到各种文献,亲自归纳出自己的体系还是更能加深对该知识的理解. 本篇文章便是在结合百度百科有关原码.反码.补码和位运算的介绍并深度借鉴了张子秋和Liquor相关文章后整理而出. 目录 ...
- 原码、反码、补码及位操作符,C语言位操作
计算机中的所有数据均是以二进制形式存储和处理的.所谓位操作就是直接把计算机中的二进制数进行操作,无须进行数据形式的转换,故处理速度较快. 1.原码.反码和补码 位(bit) 是计算机中处理数据的最小单 ...
- Booth算法: 补码一位乘法公式推导与解析
以下讲解内容出自<计算机组成原理(第三版)>(清华大学出版社) 大二学生一只,我的计组老师比较划水,不讲公式推导,所以最近自己研究了下Booth算法的公式推导,希望能让同样在研究Booth ...
- java原码、反码、补码、位运算
1.对于有符号的数(java中的数都是有符号的) 二进制的最高位是符号位:0表示正数,1表示负数 正数的原码,反码,补码都一样 负数的反码=它的原码符号位不变,其它位取反 负数的补码=它的反码+1 0 ...
- java使double保留两位小数的多方法 java保留两位小数
这篇文章主要介绍了java使double类型保留两位小数的方法,大家参考使用吧 复制代码 代码如下: mport java.text.DecimalFormat; DecimalFormat d ...
- PHP 小数点保留两位【转】
最近在做统计这一块内容,接触关于数字的数据比较多, 用到了三个函数来是 数字保留小数后 N 位: 接下来简单的介绍一下三个函数: 1.number_format echo number_format( ...
- PHP 小数点保留两位
最近在做统计这一块内容,接触关于数字的数据比较多, 用到了三个函数来是 数字保留小数后 N 位: 接下来简单的介绍一下三个函数: 1.number_format echo number_format( ...
- js保留两位小数
js保留两位小数四舍五入: (Math.floor(until_price*100)/100).toFixed(2);//会四舍五入 保留两位小数 且不四舍五入(三种方式,请用最后一种): var ...
- JS限制input输入的为数字并且有小数的时候最多保留两位小数
JS限制input用户输入的为数字并且有小数的时候最多保留两位小数,代码如下: html部分: <input type="number" onkeypress="r ...
随机推荐
- 两种实现光标点插入range
一.insertNode <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...
- iSCSI配置
iSCSI介绍 几种存储的架构: 直接存取 (direct-attached storage):例如本机上面的磁盘,就是直接存取设备: 透过储存局域网络 (SAN):来自网络内的其他储存设备提供的磁盘 ...
- 使用spring tool suite(STS)工具创建spring boot项目和出现错误后的处理
一.先下载配置maven环境 1.下载地址:http://maven.apache.org/download.cgi windows下下载zip文件 2.解压后放到某个文件目录下 3.配置环境变量 ( ...
- python mqtt client publish操作
使用Python库paho.mqtt.client 模拟mqtt client 连接broker,publish topic. #-*-coding:utf-8-*- import paho.mqtt ...
- cookie的初识和运用(js和jq)
cookie是什么 cookie是浏览器提供的一种机制,它将document 对象的cookie属性提供给JavaScript.可以由JavaScript对其进行控制,而并不是JavaScript本身 ...
- Eclipse编码格式
来源:http://e-ant.javaeye.com/blog/177579 如果要使插件开发应用能有更好的国际化支持,能够最大程度的支持中文输出,则最好使 Java文件使用UTF-8编码.然而,E ...
- Http协议和web本职【转自丁码农】
当你在浏览器地址栏敲入“http://www.cnblogs.com/”,然后猛按回车,呈现在你面前的,将是博客园的首页了(这真是废话,你会认为这是理所当然的).作为一个开发者,尤其是web开发人员, ...
- Ubuntu Tweak (linux下的优化大师)
Ubuntu Tweak 是中国人开发的一款专门为Ubuntu准备的配置.调整工具,它类似与compiz,但是界面更友好. 下面是安装命令: 第一步:添加tweak源 sudo add-apt-rep ...
- 记录一个比较少用的容器C++ std::bitset
bitset存储二进制数位. bitset就像一个bool类型的数组一样,但是有空间优化——bitset中的一个元素一般只占1 bit,相当于一个char元素所占空间的八分之一. bitset中的每个 ...
- QuantLib金融库的简易安装
最近在弄毕设,研究关于固定收益债券定价方面的知识,需要使用到QuantLib这个Python金融库,但是这是一个C++编译的库,官网也只给出了源代码,安装起来十分繁琐,所以在网上找了一个简易的安装方法 ...