1 short si=-32768;
第 3 版 · OCR 辅助 · 原书检索 · 文字用于定位,公式与图表请回原页核验 · 本次导入快照
### 1 short si=-32768;
### 2 unsigned short usi=si;
### 3 int i=si;
### 4 unsigned ui=usi;
执行上述程序段,并在32位大端方式机器上输出变量si、usi、i、ui的十进制和十六进制
值,可得到各变量的输出结果为:
si=-32768 8000
usi=32768 8000
i=-32768
FF FF 80 00
ui=32768
### 00 00 80 00
由此可见,-32768的补码表示和32768的无符号整数表示具有相同的16位0/1序
列,分别将它们扩展为32位后,得到的32位位序列的高位不同。因为前者是符号扩展,高
16位补符号1,后者是0扩展,高16位补0。
位截断发生在将长数转换为短数时,例如,对于下列代码:
### 1 int i=32768;
### 2 short si=(short) i;
### 3 int j=si;
在一台32位大端方式机器上执行上述代码段时,第2行要求强行将一个 32 位带符号
第3章
53
<!-- page: 71 -->
计算机组成与系统结构(第3版)
54
整数截断为16位带符号整数,32768的32位补码表示为00008000H,截断为16位后变成
8000H,它是-32768的16位补码表示。再将该16位带符号整数扩展为32位时,就变成
了FF FF8000H,它是一32768的32位补码表示,因此j为一32768。也就是说,原来的i
(值为32768)经过截断、再扩展后,其值变成了一32768,不等于原来的值了。
从上述例子可以看出,截断一个数可能会因为溢出而改变它的值。因为长数的表示范
围远远大于短数的表示范围,所以当一个长数足够大到短数无法表示的程度,则截断时就会
发生溢出。上述例子中的32768大于16位补码能表示的最大数32767,所以就发生了截断
错误。这里所说的截断溢出和截断错误只会导致程序出现意外的计算结果,并不导致任何
异常或错误报告,因此,错误的隐蔽性很强,需要引起注意。
3.1.2MIPS 指令中涉及的运算
高级语言中的所有运算通过运算指令实现,一个指令系统中涉及运算的指令有很多,
表 3.1列出了 MIPS指令系统中大部分涉及运算的指令。
表3.1 MIPS指令系统中涉及运算的部分指令
指令
类型
逻辑
运算
指 令 名 称
and
or
nor
and immediate
or immediate
shift left logical
shift right logical
汇编形式举例
and $1,$2,$3
or $1,$2,$3
nor $1,$2.$3
andi $1.$2.100
ori $1,$2,100
sll $1,$2,10
srl $1.$2,10
含 义
$1=$2 8.$3
$1=$2|$3
$1=~($2|$3)
$1=$28100
$1=$2|100
$1=$2<<10
$1=$2>>10
所 需 运 算
按位与
按位或
按位或非
按位与
按位或
逻辑左移
逻辑右移
定点
算术
运算
定点
数据
传送
shift right arithmetic
add
subtract
add immediate
sub immediate
add unsigned
subtract unsigned
add immediate unsigned
multiply
multiply unsigned
divide
divide unsigned
load word
store wor
load half unsigned
store half
load byte unsigned
store byte
load upper immediate
sra $1,$2.10
add $1,$2,$3
sub $1,$2,$3
addi $1.$2,100
subi $1,$2,100
addu $1,$2,$3
subu $1,$2,$3
addiu $1,$2,100
mult $2,$3
multu $2.S3
div $2.$3
divu $2,$3
lw $1,100($2)
sw $1,100($2)
lhu $1.100($2)
sh $1,100($2)
lbu $1,100($2)
sb $1,100($2)
lui $1,100
$1=$2>>10
$1=$2+$3
$1=$2-$3
$1=$2+100
$1=$2-100
$1=$2+$3
$1=$2-$3
$1=$2+100
Hi,Lo=$2×$3
Hi,Lo=$2×$3
Lo=$2÷$3
Hi=$2 mod $3
Lo=$2÷$3
Hi=$2 mod $3
$1=mem[$2+100]
mem[$2+100]=$1
$1=mem[$2+100]
mem[$2+100]=$1
$1=mem[$2+100]
mem[$2+100]=$1
$1=100×21*
算术右移
整数加(判溢出)
整数减(判溢出)
符号扩展、整数加(判溢出)
符号扩展、整数减(判溢出)
整数加(不判溢出)
整数减(不判溢出)
0扩展、整数加(不判溢出)
带符号整数乘
无符号整数乘
带符号整数除
Lo=商,Hi=余数
无符号整数除
Lo=商,Hi=余数
符号扩展并整数加
符号扩展并整数加
符号扩展并整数加,0扩展
符号扩展并整数加,符号扩展
符号扩展并整数加,0扩展
符号扩展并整数加,符号扩展
逻辑左移 16位
<!-- page: 72 -->
运算方法和运算部件
续表
指令
类型
指 令 名 称
汇编形式举例
含义
所需 运 算
浮点
算术
运算
FP add single
FP subtract single
FP multiply single
FP divide single
FP add double
FP subtract double
FP multiply double
FP divide double
add.s $f2,$f4,$f6
sub,s $f2,$f4,$f6
mul.s $f2,$f4,$f6
div.s $f2,$f4,$f6
add,d Sf2,$f4,$f6
sub,d $f2,$f4,$f6
mul.d $f2,$f4,$f6
div.d $f2,$f4,$f6
$f2=$f4+$f6
$f2=$f4-$f6
$f2=$f4×$f6
$f2=$f4÷$f6
$f2=$f4+$f6
$f2=$f4-$f6
$f2=$f4×$f6
$f2=$f4÷$f6
单精度浮点加
单精度浮点减
单精度浮点乘
单精度浮点除
双精度浮点加
双精度浮点减
双精度浮点乘
双精度浮点除
浮点
数据
传送
load word corp.1
store word corp.1
lwel $f1,100($2)
swel $f1,100($2)
$fl=mem[$2+100]
mem[$2+100]=$fl
符号扩展并整数加
符号扩展并整数加
注*:add和addu指令的执行结果相同,只是add指令需要检测是否发生溢出,而addu指令无须判断溢出。addi
和addiu除了在溢出判断上有差别外,立即数的扩展也有差别,addi中的立即数被看成带符号整数,采用符号扩展,而
addiu中的立即数被看成无符号整数,采用0扩展。减法的情况与加法一样,而乘、除法指令都不判断溢出(通过新增的
伪指令来实现溢出判断)。
从表3.1可以看出,MIPS指令系统涉及的运算有按位逻辑运算、逻辑移位、算术移位、
带符号整数的加减乘除、无符号整数加减乘除、带符号整数的符号扩展、无符号数的0扩展、
单精度浮点数加减乘除、双精度浮点数加减乘除等。MIPS指令中没有专门的算术左移指
令。因为对于左移来说,逻辑移位和算术移位的结果都一样,都是丢弃k个最高位,并在低
位补k个0,所以,带符号整数和无符号整数的左移都可用逻辑左移指令实现。很明显,利
用MIPS 提供的这些运算指令完全能够实现C语言所需要的各种运算要求。
3.2基本运算部件
一般情况下,用一个专门的算术逻辑部件(arithmetic and logic unit,ALU)来完成基本
逻辑运算和定点数加减运算,各类定点乘除运算和浮点数运算则可利用加法器或ALU 和
移位器来实现,因此基本的运算部件是加法器、ALU 和移位器,而ALU 的核心部件是加
法器。
3.2.1全加器和加法器
全加器用来实现两个本位数加上低位进位生成一位本位和以及一位向高位的进位。第
i位的加法运算是指第i位的加数X,、Y,和低位来的进位C;-1三者相加,得到本位和F,和
第i位的进位输出C。
F,和C,的逻辑表达式如下:
c-XQM49C+xy}
(3-1)
式中,F、C,被分别称为“全加和”和“全加进位”。图3.1和图3.2分别是“全加和”和“全加
进位”生成电路。从图3.2可看出,进位C-到C,的延迟是两级门。
第3章
55
<!-- page: 73 -->
计算机组成与系统结构(第3版)
56
X?-
Y-
C
F
图3.1 全加和 F,的生成
X-
Y?-
C
图3.2 全加进位C,的生成
C
图3.3是全加器的符号表示。将n个全加器相连可得n位加法器,如图3.4 所示的加
法器实现了两个n位二进制数X=X,X-⋯X,和Y=Y,Y,-⋯Y,逐位相加的功能,得到
的二进制和为F=F,F,-,⋯F?,进位输出为C。。例如,当X=11⋯11,Y=00⋯01时,最后
的输出为F=00⋯00且C。=1。由于只有有限位数,高位自动丢失,所以实际上是在模 2"
运算系统下的加法运算,可以实现n位无符号整数加法和n位补码加法。
对于图3.4所示的n位加法器,X与Y逐位相加,位间进位串行传送,因此称为串行进
位方式。众所周知,一块小石头扔进平静的水中,泛起的波纹会向外一圈一圈逐步扩散,串
行进位加法器中最低进位C。就像一块小石头,它把进位逐步从低位扩展到最高位,所以,
这种串行进位加法器也被称为行波进位加法器(carry ripple adder,CRA)。
F
F?
F
F
C
FA
C-L
C,
FA
CL
FA
.C?
C?
FA C
X, Y
图 3.3 全加器符号
X, Y,
X?Y
图3.4 n位串行进位加法器
xY
这种结构所用元件较少,但进位传递时间较长。从图3.2可以看出,全加器内从进位输
入到进位输出,共经过2级门延迟,所以,n位串行加法器从C。到C,的延迟时间为2n级门
延迟。假定一个异或门为3级门延迟,则最后一位和数F。的延迟时间为2n+1级门延迟。
加法运算时间随两个加数位数n的增加而增加。当n较大时,串行进位的加法器速度将显
著变慢。
前面说过,几乎所有的算术运算都要用到ALU或加法器,ALU 的核心还是加法器,因
此要提高运算速度,加法器的速度非常关键。由于串行进位加法器速度慢的主要原因是进
位按串行方式传递,高位进位依赖低位进位。为了提高加法器的速度,必须尽量避免进位之
间的依赖关系。
3.2.2并行进位加法器
由全加器公式(3-1)可知,对于一个4位加法器,其进位C、C?、C?和C,的产生条件为
C?=X?Y?+(X?+Y)C。
C?=X?Y?+(X?+Y?)C;
=X?Y?+(X?+Y?)X?Y?+(X?+Y?)(X?+Y)C。
<!-- page: 74 -->
运算方法和运算部件
C?=X?Y?+(X?+Y?)C?
=X?Y?+(X?+Y?)[X?Y?+(X?+Y?)X?Y?+(X?+Y?)(X?+Y?)C?]
=X?Y?+(X?+Y?)X?Y?+(X?+Y?)(X?+Y?)X?Y?+
(X?+Y?)(X?+Y?)(X?+Y?)C?
C?=X?Y?+(X?+Y)C?
=X?Y?+(X?+Y)[X?Y?+(X?+Y?)X?Y?+(X?+Y?)(X?+Y?)X?Y?+
(X?+Y?)(X?+Y?)(X?+Y?)C?]
=X?Y?+(X?+Y)X?Y?+(X(+Y)(X?+Y?)X?Y?+(X?+Y?)(X?+Y)
(X?+Y?)X?Y?+(X?+Y)(X?+Y?)(X?+Y?)(X?+Y?)C。
从以上公式来看,每个进位表达式中都含有(X;+Y,)和X,Y,,所以,定义两个辅助函数
如下:
t:-Xx*}
(3-2)
P,称为进位传递函数,其含义是:当X,、Y,中有一个为1时,若有低位进位输入,则一定被
传递到高位。这个进位可看作低位进位越过本位直接向高位传递。G,称为进位生成函数,
其含义是:当X,、Y,均为1时,不管有无低位进位输入,本位一定向高位产生进位输出。
将 P,、G,代入前面C?~C、式中,可得:
C?=G?+P?C?
C?=G?+P?G?+P?P?C?
(3-3)
C?=G?+P?G?+P?P?G?+P?P?P?C?
C.=G.+P.G.+P.P.G。+
—(Ja
从上述表达式可以看出,C,仅与X,、Y,和C。有关,相互间的进位没有依赖关系。只要
X?~X?、Y?~Y?和C。同时到达,就可几乎同时形成C?~C,并同时生成各位的和。
实现上述逻辑表达式(3-3)的电路称为先行进位部件(carry lookahead unit,CLU)。通
过这种进位方式实现的加法器称为全先行进位加法器(carry lookahead adder,CLA)。因为
各个进位是并行产生的,所以是一种并行进位加法器。图3.5为4位CLU和4位CLA示
意图。
由图3.5可看出,从X,、Y,到产生P、G,需要1级门延迟,从P,、G,、C。到产生所有进
位C?~C,需要2级门延迟,产生全部和需要1+2+3=6级门延迟(假定一个异或门等于3
级门延迟)。所以4位全先行进位加法器的关键路径长度为6级门延迟。
从式(3-3)可知,更多位数的CLA只会增加逻辑门的输入端个数,而不会增加门的级
数,因此,如果用全先行进位方式构建更多位数加法器,从理论上讲,应该还是6级门延迟。
但是由于CLA部件中连线数量和输入端个数的增多,使得实现电路中需要具有大驱动信
号和大扇入门。因而,当位数较多时,全先行进位实现方式不太现实。例如,对于一个 32 位
全先行进位加法器,其生成C。的与门和或门有多达30 多个输入端。
更多位数的加法器可通过将CLU或全先行进位加法器串接起来实现,例如,对于16位
加法器,可以分成4位一组,组内为4位先行进位,组间串行进位。为了进一步提高加法器
的运算速度,也可以进一步采用组内和组间都并行的进位方式。因为两级先行进位加法器
组内和组间都采用先行进位方式,其延迟和加法器的位数没有关系,不会随着位数的增加而
第3章
57
<!-- page: 75 -->
计算机组成与系统结构(第3版)
C?
C?
C?
C?
58
C?
G?
P?
G?
P
(a)4位 CLU
G?
P?
G? P?
4位CLA
G P?
F?
C?
FA
G P?
F
C?
FA
G? P?
F?
C?
FA
G P?
F
C;
FA
C?
xY
X?Y
X?Y?
(b)4位 CLA
图3.5 4位CLU和4位CLA
X?Y?
延长时间。所以,计算机内部大多采用两级或多级先行进位加法器。
3.2.3带标志加法器
n位无符号数加法器只能用于两个n位二进制数相加,不能进行无符号整数的减运算,
也不能进行带符号整数的加/减运算。要能够进行无符号整数的加/减运算和带符号整数的
加/减运算,还需要在无符号数加法器的基础上增加相应的逻辑门电路,使得加法器不仅能
计算和/差,还要能够生成相应的标志信息。图3.6是带标志加法器实现电路示意图,其中
图3.6(a)中是符号表示,图3.6(b)中给出用全加器构成的实现电路。
F
OFSF ZF CF
n
IOF
(SF)F !ZF
F
CF F?
加法器
C(C)
C
Cm
out
FA
FA
C
C?
C
n
n
A
B
A。B
A?B?
(a)带标志加法器符号
(b)带标志加法器的逻辑电路
图3.6 用全加器实现n位带标志加法器的电路
FA C
A?1B?
如图3.6所示,溢出标志的逻辑表达式为OF=C,④C。-i;符号标志就是和的符号,即
SF=F;零标志ZF=1,当且仅当F=0;进位/借位标志CF=C④C,即当C=0时,
CF为进位C,当Cm=1时,CF为进位C取反。
<!-- page: 76 -->
运算方法和运算部件
需要说明的是,为了加快加法运算的速度,真正的电路一定使用多级先行进位方式,
图3.6(b)主要是为了说明如何从加法运算结果中获得标志信息,因而使用全加器简化了加
法器电路。
##### 3.2.4 算术逻辑部件
ALU 是一种能进行多种算术运算与逻辑运算的组合逻辑电路,其核心部件是带标志加
法器,多采用先行进位方式。通常用图3.7所示的符号来表示。其中A和B是两个n位操
作数输入端,C。是进位输入端,ALUop是操作控制端,用来决定ALU所执行的处理功能。
例如,ALUop选择 add运算,ALU 就执行加法运算,输出的结果就是A 加B 之和。
ALUop的位数决定了操作的种类,例如,当位数为3时,ALU最多只有8种操作。
图3.8给出了能够完成3种运算“与”“或”和“加法”的一位ALU结构图。其中,一位加
法用一个全加器实现,在ALUop的控制下,由一个多路选择器(MUX)选择输出3种操作
结果之一。这里有3种操作,所以 ALUop至少要有两位。
C
ALUop
2
A-
and
00
ALUop Cm
s‘
or
MUX
F,
A-
01
n
蛋
ALU
F
n
一位
add
10
B-
全加器
n
B-
IC
C
图3.7 ALU 符号
图3.8 一位 ALU 结构
ALU 中也可实现左(右)移一位和两位的操作,当然也可用一个移位寄存器实现移位。
但这两种方式每次都只能固定移动一位或两位,有时移位指令要求一次移动若干位,对于这
种一次左移或右移多位的操作,通常用一个在 ALU 之外的桶型移位器实现。桶形移位器
不同于普通移位寄存器,它利用大量多路选择器来实现数据的快速移位,移位操作能够一次
完成。在ALU外单独设置桶型移位器,还可简化ALU的控制逻辑,并实现移位和ALU 运
算的并行操作。
3.3定点数运算
从3.1节介绍的有关高级语言和机器指令涉及的运算来看,定点运算主要包括按位逻
辑运算、逻辑移位运算、无符号整数的位扩展和截断运算、无符号整数的加减乘除运算、带符
号整数的算术移位运算、带符号整数的扩展和截断运算、带符号整数的加减乘除运算等。
按位逻辑运算可用逻辑门电路实现,无符号整数的逻辑移位运算可用专门的移位器实
现,带符号整数的移位运算、无符号整数和带符号整数的位扩展运算和截断运算也可用简单
电路较容易地实现。
因此,对于无符号整数和带符号整数的运算,主要是加、减、乘、除运算方法以及对应的
第3章
59
<!-- page: 77 -->
计算机组成与系统结构(第 3版)
60
运算部件。计算机内部带符号整数用补码表示,所以带符号整数的运算就是补码运算。
浮点数由一个定点小数和一个定点整数表示,大多数机器采用IEEE 754标准来表示
浮点数,IEEE 754标准用定点原码小数表示尾数,因而浮点数运算涉及原码定点小数的加、
减、乘、除运算。
3.3.1补码加减运算
若两个补码表示的n位定点整数为[x]n=X。-1X,-⋯X。,[y]=Y。-Y,⋯Y。,则
[x+y]。和[x-y]的运算表达式如下:
&=yh-E4+。?)}
式(3-4)的正确性可以从补码的编码规则得到证明。从式(3-4)中可看出,在补码表示方式
下,无论x、y是正数还是负数,加、减运算统一采用加法来处理,而且[x]。和[y]的符号位
(最高有效位)可以和数值位一起参与运算,加、减运算结果的符号位也在求和运算中直接得
出,这样,可以直接用3.2节介绍的加法器实现[x]。+[y](mod 2")和[x]#+[-y]
(mod 2")。最终运算结果的高位丢弃,保留低n位,相当于对和数取模2"。因此,实现减法
的主要工作在于求[一y]#。
根据第2章介绍的补码运算的特点可知,一个数的负数的补码可以由其补码“各位取
反,末位加1”得到。即已知一个数的补码表示为Y,则这个数负数的补码为Y+1,因此,只
要在原加法器的Y输入端,加n个反向器以实现各位取反的功能,然后加一个2选1多路
选择器,用一个控制端 Sub来控制选择将原码Y输入到加法器还是将Y输入到加法器,并
将控制端 Sub同时作为低位进位送到加法器,如图3.9所示。该电路可实现补码加减运算。
当控制端Sub为1时,做减法,实现X+Y+1=[x]n+[-y]n;当控制端Sub为0时,做加
法,实现X+Y=[x]n+[y]。
Sub;
Cm
X-
n
加法器
y-
0
MUX
n°
y
y
n
n
1Cow
ZF
OF
SFn
CF
F
图3.9 补码加减运算部件
图3.9所示电路可以实现整数加、减运算,其中的加法器就是图3.6所示的带标志加法
器。因为无符号整数相当于正整数,而正整数的补码表示等于其二进制表示本身,所以,无
符号整数的二进制表示相当于正整数的补码表示,因此,该电路同时也能实现无符号整数的
加/减运算。对于带符号整数x和y来说,图中X和Y就是x和y的补码表示;对于无符
号整数x和y来说,图中X和Y就是x和y的二进制表示。
可通过标志信息来区分带符号整数运算结果和无符号整数运算结果。
零标志 ZF=1表示结果F为0。不管作为无符号整数还是带符号整数来运算,ZF 都
(3-4)
<!-- page: 78 -->
运算方法和运算部件
有意义。
符号标志SF表示结果的符号,即F的最高位。对于无符号数运算,SF没有意义。
进/借位标志CF表示无符号数加/减运算时的进/借位。加法时,若CF=1则表示无符
号数加法溢出;减法时,若CF=1则表示有借位,即不够减。因此,加法时CF就应等于进位
输出C;减法时 CF 就应将进位输出C取反来作为借位标志。综合起来,可得CF=
Sub+Cu。对于带符号整数运算,CF 没有意义。
溢出标志OF=1表示带符号整数运算时结果发生了溢出。对于无符号整数运算,OF
没有意义。
对于n位补码整数,它可表示的数值范围为—2"-1~2*-1-1。当运算结果超出该范
围,则结果溢出。补码溢出判断方法有多种,先看两个例子。
例3.1 用4位补码计算一7—6和-3-5的值。
解:[-7]=1001 [-6]n=1010 [-3]#=1101 [-5]=1011
[-7-6]#=[-7]w+[-6]n=1001+1010=0011(+3)
[-3-5]+=[-3]w+[-5]=1101+1011=1000(-8)
进位
1
0
进位 1
1
1
1
加数
0
0
1
加数
0
1
十
1
\0
1
0
1
0
1
+
1
和
1
1
0
0
1
1
和
1
0
0
0
因为4位补码的可表示范围为一8~+7,而-7-6=-13<—8,所以,结果0011(+3)
一定发生了溢出,是一个错误的值。考查-7-6的例子后,发现以下两种现象:
(1)最高位和次高位的进位不同;
(2)和的符号位和加数的符号位不同。
对于例子-3-5,结果1000(一8)没有超出范围,因而没有发生溢出,是一个正确的值。
此时,最高位的进位和次高位的进位都是1,没有发生第(1)种现象,而且和的符号和加数的
符号都是1,因而也没有发生第(2)种现象。
通常根据上述两种现象是否发生来判断有无溢出。因此,有以下两种溢出判断逻辑表
达式。
(1)若符号位产生的进位C。与最高数值位向符号位的进位C。,不同,则产生溢出,即
OF=C-iC
(2)若两个加数的符号位X。-和Y,相同,且与和的符号位F,-不同,则产生溢出,即
OF=X-Y,-F+X,-Y,F
根据上述溢出判断逻辑表达式,可以很容易实现溢出判断电路。图3.6(b)中OF的生成采
用了上述第(1)种方法。
*3.3.2原码加减运算
浮点数多采用IEEE754标准,其尾数用原码表示,故在浮点数加减运算中涉及原码加
减运算。原码加减运算规则如下。
(1)比较两个操作数的符号,对加法实行“同号求和,异号求差”,对减法实行“异号求
第3章
61
<!-- page: 79 -->
计算机组成与系统结构(第3版)
62
和,同号求差”。
(2)求和时,数值位相加,若最高位产生进位则结果溢出。和的符号位取被加数(或被
减数)的符号。
(3)求差时,被加数(或被减数)数值位加上加数(或减数)数值位的补码。若最高数值
位产生进位,则说明加法结果为正,所得数值位正确,差的符号位取被加数(被减数)的符号;
若最高数值位没有产生进位,则说明加法结果为负,得到的是数值位的补码形式,需要对结
果求补,还原为绝对值形式的数值位。
3.3.3原码乘法运算
原码作为浮点数尾数的表示形式,需要计算机能实现定点原码小数的乘法运算。根据
每次部分积是一位相乘得到还是两位相乘得到,可以有原码一位乘法和原码两位乘法,根据
原码两位乘法的原理推广,可以有原码多位乘法。
1.原码一位乘法
用原码实现乘法运算时,符号位与数值位分开计算,因此,原码乘法运算分为两步。
(1)确定乘积的符号位。由两个乘数的符号异或得到。
(2)计算乘积的数值位。乘积的数值部分为两个乘数的数值部分之积。
原码乘法算法描述如下:已知[x]w=X?.X,⋯X。,[y]w=Y?.Y⋯Y。,则[x×y]w=
Z?.Z?⋯Z?,其中Z?=X。④Y?,Z?⋯Z?。=(0.X,⋯X,)×(0.Y;⋯Y,)。
可以不管小数点,事实上在机器内部也没有小数点,只是约定了一个小数点的位置,小
数点约定在最左边就是定点小数乘法,约定在右边就是定点整数乘法。因此,两个定点小数
的数值部分之积可以看成是两个无符号数的乘积。
下面是一个手算乘法的例子,以此可以推导出两个无符号数相乘的计算过程。