范文一:双字节二进制有符号数除法(补码)
(,,) 标号: ,,,, 功能:双字节二进制有符号数除法(补码)
入口条件:被除数在R2、R3、R4、R5中,除数在R6、R7中。 出口信息:OV=0时商在R2、R3中,OV=1时溢出。 影响资源:PSW、A、B、R1,R7 堆栈需求: ,字节
DIVS: LCALL MDS ;计算结果的符号和两个操作数的绝对值
PUSH PSW ;保存结果的符号
LCALL DIVD ;计算两个绝对值的商
JNB OV,DVS1 ;溢出否,
POP ACC ;溢出,放去结果的符号,保留溢出标志
RET
DVS1: POP PSW ;未溢出,取出结果的符号
MOV R4,#0
MOV R5,#0
MDSE: JB F0,MDS2 ;用补码表示结果
CLR OV ;结果为正,原码即补码,计算成功
RET
MDS: CLR F0 ;结果符号初始化
MOV A,R6 ;判断第二操作数的符号
JNB ACC.7,MDS1;为正,不必处理
CPL F0 ;为负,结果符号取反
XCH A,R7 ;第二操作数取补,得到其绝对值
CPL A
ADD A,#1
XCH A,R7
CPL A
ADDC A,#0
MOV R6,A
MDS1: MOV A,R2 ;判断第一操作数或运算结果的符号
JNB ACC.7,MDS3;为正,不必处理
CPL F0 ;为负,结果符号取反
MDS2: MOV A,R5 ;求第一操作数的绝对值或运算结果的补码
CPL A
ADD A,#1
MOV R5,A
MOV A,R4
CPL A
ADDC A,#0
MOV R4,A
MOV A,R3
CPL A
ADDC A,#0
MOV R3,A
MOV A,R2
CPL A
ADDC A,#0
MOV R2,A MDS3: CLR OV ;运算成功
RET
范文二:补码运算
补码
1. 真值:带有“+”、“-”号的实际数值;
2. 机器数:把“+”、“-”符号数值化后所得到的计算机实际能表示的数。 3. 补码:正数的补码与原码一样,而求负数的反码时,符号位为1,数值位在原码的
基础上求反加1.
对负数补码数值位再求反加1,且符号变为“-”,就可以得到其真值。正数直接
从补码得到真值。
4. N位二进制补码的表示范围
N值 正数【+2^,n-1,-1】 负数【-2^,n-1,】
8 00000000B ~ 01111111B 10000000B ~ 11111111B
00H ~ 7FH 80H ~ FFH
0 ~ +127D -128D ~ -1D
16 -32768 ~ +32767 -2^15 ~ + 2^31-1
32 -2G ~ +2G-1 -2^31 ~ +2^31-1 5. 补码定义:
X 2^n>x>=0
[X]补=
2^(n+1) + x =2^(n+1) - [ x] 0>=x>=-2^n
6. -2^n ,n为3、4、5……正整数,整数的补码用定义来算,如:-128、-256等 7、 n位无符号位数表示的范围:0 ~ 2^n - 1
范文三:补码加减法运算、存储器字位扩展答案
1. 机器数字长为8位(含1位符号位),当X= -127 (十进制)时,
其对应的二进制表示,(X)表示,(X)表示,(X)表示分别是多原反补
少,
二进制表示为 -01111111
[X] = 11111111 [X] = 10000000 [X] = 10000001 原反补
[X] = 00000001 移
2. 已知x=0.1011,y=-0.0101,求x+y=?,x-y=?
[x]=00.1011 [x]=00.1011 补补
+[y]=11.1011 +[-y]=00.0101 补补
00.0110 01.0000
x+y=+0.0110 x-y产生溢出 3. 用16k×8位的SRAM芯片构成64K×16位的存储器,要求画出该
存储器的组成逻辑框图。
存储器容量为64K×16位,其地址线为16位(A—A),数据线也是150
16位(D—D) 150
SRAM芯片容量为16K×8位,其地址线为14位,数据线为8位,
因此组成存储器时须字位同时扩展。字扩展采用2 :4译码器,
以16K为一个模块,共4个模块。位扩展采用两片串接。
(1)(5分)
(2)(5分)
ACC MQ ALU X IR MDR PC MAR
设计题 用4K*8的存储器芯片构成16,,的存储器,地址线为,,,,,,,请设计。
方法一:采用位扩展
1、需要几片芯片,
2、 数据线有哪几位,
3、 加至各芯片的地址线,
、画出该存储器逻辑结构图, 4
MREQ*
R/W*
A11~A0
CE*AWE*CE*AWE*ACE*ACE*WE*WE*
4K*84K*84K*84K*8
DDDDD31~D0D23~D16D7~D0D15~D8D31~D24 方法二:采用字扩展
,、需要几片芯片,
2、 数据线有哪些,
3、 加至芯片上的地址线有哪几位,
4、 用来译码的地址有哪几位,
5、 用来寻址的地址线有哪几位, MREQ*
6、画出该存储器的结构图,
A13
A12
R/W*
A11~A0
ACE*ACE*AWE*CE*AWE*CE*WE*WE*
4K*84K*84K*84K*8
DDDD
D7~D0 D7~D0D7~D0D7~D0D7~D0
范文四:补码加减运算答案KW
3.1 已知[x]和[y]的值,用补.码加减法计算x+y和x-y(写出结果的二进制表示和十进补 补
制表示),并指出结果是否溢出以及溢出的类型(建议采用变形补码计算)。
(1) [x]=0.11011 , [y]补=0.00011 补
(2) [x]=0.10111 [y]补=1.00101 补
(3) [x]=1.01010 [y]补=1.10001 补
(4) [x]=1.10011 [y]补=0.11001 补
解:
(1) [x]=0.11011 , [y]=0.00011 补补
[,y]=1.11101 补
[X+Y]=[x]+[y] 补补补
= 00.11011
+ 00.00011
__________________
00.11110
X+Y= +15/16 =+0.1111B
[X,Y]=[x]+[,y] 补补补
=00.11011
+11.11101
__________________
00.11000
X,Y= +12/16 =,3/4=+0.11B
检验
【 X= + 27/ 32
Y= +3/32
X+Y = +(27+3)/32 =+30/32=0.11110B
X,Y = (27,3)/32=+24/32=+3/4=0.11B 】
(2) [x]=0.10111 , [y]=1.00101 补补
[Y]=1.11011 原
[,y]=0.11011 补
[X+Y]=[x]+[y] 补补补
= 00.10111
+ 11.00101
__________________
11.11100
X+Y= ,0.001B=,1/8
[X,Y]=[x]+[,y] 补补补
= 00.10111
+00.11011
________________
01.10010 (上溢)
[X,Y]=1.10010 (上溢) 补
【 修正:X,Y=,0.01110 = ,7 / 16+2 = 25 / 16 】
检验
【 X= +23/ 32
Y= ,27/32
X+Y = (23,27)/32 =-4/32=,1/8
X,Y = (23+27)/32=+50/32 =25/16 (上溢) 】
(3) [x]=1.01010 , [y]=1.10001 补补
[,y]=0.01111 补
[X+Y]=[x]+[y] 补补补
= 11.01010
+ 11.10001
__________________
10.11011
X+Y=0.11011B=+27/32
[ 修正 27/32,2=27,64=,37/32 ]
[X,Y]=[x]+[,y] 补补补
= 11.01010
+ 00.01111
________________
11.11001
X,Y=,0.00111B=,7/32
检验
【X= ,22/ 32=,11/16
Y=,15/32
X+Y = (,15,22) /32 =,37/32 (下溢)
X,Y = (,22,(,15)) / 32 =, 7/32 】
(4) [x]=1.10011 , [y]=0.11001 补补
[ X= ,0.01101=,13/ 32
Y= +0.11001=25/32
X+Y = (,13+25)/32 =12/32=3/8
X,Y = (,13,25)/32=,38/32 = -19 / 16 (下溢) ]
[,y]=1.00111 补
[X+Y]=[x]+[y] 补补补
= 11.10011
+ 00.11001
__________________
00.01100
X+Y=0.01100B=3/8
[X,Y]=[x]+[,y] 补补补
= 11.10011
+ 11.00111
________________
10.11010 (下溢)
[X,Y]=0.11010 (下溢) 补
【 修正: X,Y = 13 / 16 – 2 = ,19 / 16 】
检验
【 X= ,0.01101=,13/ 32
Y= +0.11001=25/32
X+Y = (,13+25)/32 =12/32=3/8
X,Y = (,13,25)/32=,38/32 = -19 / 16 (下溢) 】
3.2 给出x和y的二进制值,用补码加减法计算x+y和x-y(写出结果的二进制表示和十
进制表示),并指出结果是否溢出以及溢出的类型(建议采用变形补码什算)、
(1) x=0.10111 y=0.11011 (2) x=0.11101 y=0.10011
(3) x=0.11011 y=-0.1010 (4) x=-0.11111 y=0.11011
(5) x=-0.11011 y=0.1010 (6) x=-0.11010 y=-0.11001
(7) x=-1011101 y=+1101101 (8) x=+1110110 y=-1001101
(9) x=+1101110 y=+1010101 (10) x=-1111111 y=-1101101
解:
(1) X=0.10111 Y=0.11011
[X]=0.10111 补
[Y]=0.11011 补
[,Y]=1.00101 补
[X+Y]=[X]+[Y]补补补
= 00.10111
+ 00.11011
_______________________
01.10010 (上溢)
X+Y 上溢
[X,Y]=[X],[Y]补补补
= 00.10111
+ 11.00101
_________________________
11.11100
X-Y=,0.00100
=,1/8
检验
【X=23/32 Y=27/32
X+Y=50/32
[ 修正:X+Y=-0.0111 =, 7 / 16 +2 =25 / 16 ]
X,Y=,1/8】
(2) X=0.11101 Y=0.10011
[X]=0.11101 补
[Y]=0.10011 补
[,Y]=1.01101 补
[X+Y]=[X]+[Y]补补补
= 00.11101
+ 00.10011
_______________________
01.10000 (上溢)
X+Y 上溢
[X,Y]=[X],[Y]补补补
= 00.11101
+ 11.01101
_________________________
00.01010 X-Y=0.01010
=5/16
检验
【X=29/32 Y=19/32 X+Y=48/32 =3 / 2
[ 修正:X+Y = ,0.1 = ,1 / 2+2 =1.5 ]
X,Y=10/32=5 / 16】
(3) X=0.11011 Y=,0.1010
[X]=0.11011 补
[Y]=1.01100 补
[,Y]=0.10100 补
[X+Y]=[X]+[Y]补补
= 00.11011
+ 11.01100
_______________________
00.00111
X+Y =7/32
[X,Y]=[X],[Y]补补补
= 00.11011
+ 00.10100
_________________________
01.01111
X,Y=,0.10001=,17/32 (上溢)
[ 修正 ,17/32+2=47/32 ]
检验
【X=27/32 Y=,20/32
X+Y=7/32
X,Y=47/32】
(4) X=,0.11111 Y=0.11011 [X]=1.00001 补
[Y]=0.11011 补
[,Y]=1.00101 补
[X+Y]=[X]+[Y]补补补
= 11.00001
+ 00.11011
_______________________
11.11100
X+Y =,0.00100=,1/8
[X,Y]=[X],[Y]补补补
= 11.00001
+ 11.00101
_________________________
10.00110 (下溢)
X,Y=0.00110=3/16 (下溢)
[ 修正 6/32,2=58/32 =29/16 ]
检验
【X=,31/32 Y=27/32 X+Y=,4/32 =,1/8
X,Y=58/32=29/16】
(5) X=,0.11011 Y=0.10100
[X]=1.00101 补
[Y]=0.10100 补
[,Y]=1.01100 补
[X+Y]=[X]+[Y]补补补
= 11.00101
+ 00.10100
_______________________
11.11011
X+Y =,0.00111=,7/32
[X,Y]=[X],[Y]补补补
= 11.00101
+ 11.01100
_________________________
10.10001 (下溢)
X,Y=17/32 (下溢)
[ 修正 17/32,2=,47/32 ]
检验
【X=,27/32 Y=20/32 X+Y=,7/32
X,Y=,47/32】
(6) X=,0.11010 Y=,0.11001
[X]=1.00110 补
[Y]=1.00111 补
[,Y]=0.11001 补
[X+Y]=[X]+[Y]补补补
= 11.00110
+ 11.00111
_______________________
10.01101
X+Y =13/32 (下溢) [ 修正 13/32,2=,51/32 ]
[X,Y]=[X],[Y]补补补
= 11.00110
+ 00.11001
_________________________
11.11111
X,Y=,0.00001
= ,1/32
检验
【X=,26/32 Y=,25/32 X+Y=,51/32
X,Y=,1/32】
(7) X=,1011101 Y=+1101101
[X]=10100011 补
[Y]=01101101 补
[,Y]=1.01100 补
[X+Y]=[X]+[Y]补补补
= 110100011
+ 001101101
_______________________
000010000
X+Y =00010000=16
[X,Y]=[X],[Y]补补补
= 110100011
+ 110010011 _________________________
100110110 (下溢)
X,Y=54 (下溢)
[ 修正 54,256=,202 ]
检验
【X=,93 Y=109 X+Y=16
X,Y=,202】
(8) X=+1110110 Y=,1001101
[X]=01110110 补
[Y]=10110011 补
[,Y]=01001101 补
[X+Y]=[X]+[Y]补补补
= 001110110
+ 110110011
_______________________
000101001
X+Y =41
[X,Y]=[X],[Y]补补补
= 0011101101
+ 001001101
_________________________
011000011 (上溢)
X,Y=,61 (上溢)
[ 修正 ,61+256=195 ]
检验
【X=118 Y=,77
X+Y=41
X,Y=195】
(9) X=+1101110 Y=+1010101
[X]=01101110 补
[Y]=01010101 补
[,Y]=10101011 补
[X+Y]=[X]+[Y]补补补
= 001101110
+001010101
_______________________
011000011 (上溢)
X+Y =,0111101=,61 [ 修正 ,61+256=195 ]
[X,Y]=[X],[Y]补补补
= 001101110
+ 110101011
_________________________
000011001
X,Y=25
检验
【X=110 Y=85 X+Y=195
X,Y=25】
(10) X=,1111111 Y=,1101101
[X]=10000001 补
[Y]=10010011 补
[,Y]=01101101 补
[X+Y]=[X]+[Y]补补补
= 110000001
+ 110010100
_______________________
100010100 (下溢)
X+Y =00010100=20 [ 修正 20,256=,236 ]
[X,Y]=[X],[Y]补补补
= 110000001
+ 001101101 _________________________
111101110
检验
【X,Y=,0010010=,18
X=,127 Y=,109
X+Y=,236
X,Y=,18】
范文五:二进制 补码 运算
负数在计算机中如何表示?
举例来说,+8在计算机中表示为二进制的1000,那么-8怎么表示呢? 很容易想到,可以将一个二进制位(bit )专门规定为符号位,它等于0时就表示正数,等于1时就表示负数。比如,在8位机中,规定每个字节的最高位为符号位。那么,+8就是00001000,而-8则是10001000。 但是,随便找一本《计算机原理》,都会告诉你,实际上,计算机内部采用补码(Two's Complement)表示负数。
什么是补码?
它是一种数值的转换方法,要分二步完成:
第一步,每一个二进制位都取相反值,0变成1,1变成0。比如,00001000的相反值就是11110111。
第二步,将上一步得到的值加1。11110111就变成11111000。 所以,00001000的补码就是11111000。也就是说,-8在计算机(8位机)中就是用11111000表示。
不知道你怎么看,反正我觉得很奇怪,为什么要采用这么麻烦的方式表示负数,更直觉的方式难道不好吗?
昨天,我在一本书里又看到了这个问题,然后就花了一点时间到网上找资料,现在总算彻底搞明白了。
补码的好处
首先,要明确一点。计算机内部用什么方式表示负数,其实是无所谓的。只要能够保持一一对应的关系,就可以用任意方式表示负数。所以,既然可以任意选择,那么理应选择一种最方便的方式。
补码就是最方便的方式。它的便利体现在,所有的加法运算可以使用同一种电路完成。
还是以-8作为例子。
假定有两种表示方法。一种是直觉表示法,即10001000;另一种是补码表示法,即11111000。请问哪一种表示法在加法运算中更方便? 随便写一个计算式,16 + (-8) = ?
16的二进制表示是 00010000,所以用直觉表示法,加法就要写成: 00010000
+10001000
---------
10011000
可以看到,如果按照正常的加法规则,就会得到10011000的结果,转成十进制就是-24。显然,这是错误的答案。也就是说,在这种情况下,正常的加法规则不适用于正数与负数的加法,因此必须制定两套运算规
则,一套用于正数加正数,还有一套用于正数加负数。从电路上说,就是必须为加法运算做两种电路。
现在,再来看补码表示法。
00010000
+11111000
---------
100001000
可以看到,按照正常的加法规则,得到的结果是100001000。注意,这是一个9位的二进制数。我们已经假定这是一台8位机,因此最高的第9位是一个溢出位,会被自动舍去。所以,结果就变成了00001000,转成十进制正好是8,也就是16 + (-8) 的正确答案。这说明了,补码表示法可以将加法运算规则,扩展到整个整数集,从而用一套电路就可以实现全部整数的加法。
补码的本质
在回答补码为什么能正确实现加法运算之前,我们先看看它的本质,也就是那两个步骤的转换方法是怎么来的。
要将正数转成对应的负数,其实只要用0减去这个数就可以了。比如,-8其实就是0-8。
已知8的二进制是00001000,-8就可以用下面的式子求出:
-00001000
---------
因为00000000(被减数)小于0000100(减数),所以不够减。请回忆一下小学算术,如果被减数的某一位小于减数,我们怎么办?很简单,问上一位借1就可以了。
所以,0000000也问上一位借了1,也就是说,被减数其实是100000000,算式也就改写成:
100000000
-00001000
---------
11111000
进一步观察,可以发现100000000 = 11111111 + 1,所以上面的式子可以拆成两个:
11111111
-00001000
---------
11110111
+00000001
11111000
补码的两个转换步骤就是这么来的。
为什么正数加法适用于补码?
实际上,我们要证明的是,X-Y 或X+(-Y)可以用X 加上Y 的补码完成。 Y 的补码等于(11111111-Y)+1。所以,X 加上Y 的补码,就等于: X + (11111111-Y) + 1
我们假定这个算式的结果等于Z ,即 Z = X + (11111111-Y) + 1 接下来,分成两种情况讨论。
第一种情况,如果X 小于Y ,那么Z 是一个负数。这时,我们就对Z 采用补码的逆运算,求出它对应的正数绝对值,再在前面加上负号就行了。所以,
Z = -[11111111-(Z-1)] = -[11111111-(X + (11111111-Y) + 1-1)] = X - Y 第二种情况,如果X 大于Y ,这意味着Z 肯定大于11111111,但是我们规定了这是8位机,最高的第9位是溢出位,必须被舍去,这相当于减去100000000。所以,
Z = Z - 100000000 = X + (11111111-Y) + 1 - 100000000 = X - Y
这就证明了,在正常的加法规则下,可以利用补码得到正数与负数相加的正确结果。换言之,计算机只要部署加法电路和补码电路,就可以完成所有整数的加法。
(完)
精彩评论:
Z = X + (11111111-Y) + 1式子可以写为Z = X - Y +100000000,这在硬件上可以理解为两部分电路来实现,第一部分是前面的X - Y(这里姑且不管计算的结果是正还是负),第二部分是X - Y计算的结果再和100000000相加,最终得到计算的结果Z, 而在8位的计算机上
100000000是不能出现的,其实这时100000000就相当于00000000(舍去了最高位),然后我们再看一些计算的过程:
Z = X + (11111111 - Y) + 1
= X - Y + 100000000
= X - Y + 00000000
= X - Y
证毕。
这样我们就证明了X-Y 或X+(-Y)可以用X 加上Y 的2的补码完成,而不必分两种情况来证明。
转载请注明出处范文大全网 » 双字节二进制有符号数除法(补