📄 page270.html
字号:
<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=gb2312">
<title>第10章 细节补充</title>
</head>
<body>
<style type="text/css">
body {
background-color: #c0c0c0;
}
table {
background-color: #c0c0c0;
line-height: 24px;
}
</style>
<!导航条>
<p><a href="content1.html">目录</a> <a href="page269.html">上一页</a> <a href="page271.html">下一页</a> <a href="page291.html">下一章</a></p>
<table border=0 align="center" width=800 frame="box" rules="none">
<!标尺行>
<tr>
<td width=3%></td><td width=6%></td><td width=1%></td>
<td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td>
<td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td><td width=5%></td>
<td width=1%></td><td width=6%></td><td width=3%></td>
</tr>
<!页眉行>
<tr height=60 valign="bottom">
<td></td><td>-270-</td><td></td> <!页码>
<td colspan=6>PC机汇编语言实战精解</td><td colspan=4></td><td colspan=6 align="right"><img src="icons/flag.gif"></td> <!书名>
<td></td><td></td><td></td> <!右侧空白>
</tr>
<!页眉线>
<tr valign="top">
<td></td><td colspan=20><hr></td><td></td>
</tr>
<!正文>
<font face="宋体" lang="ZH-CN" size=3>
<tr height=20><td colspan=22></td></tr> <!顶部空白>
<tr>
<td></td><td></td> <!左边距>
<td colspan=18>
个位的8。其它的十进制数都可以仿照这个方法处理。<br>
上面所讨论的这样一种编码方式一般被称为二-十进制编码(Binary Coded Decimal),简称为BCD编码。PC电脑实际所用的BCD编码规则稍微复杂一些,分为压缩BCD码与非压缩BCD码两种。压缩BCD编码就是上面我们讨论的编码方法,4位二进制数对应1位十进制数。非压缩BCD编码只是将4位二进制数扩展成了8位,但是高4位可以是任意数。以78为例,用压缩BCD码表示是01111000,而用非压缩BCD编码则是????0111????1000,?既可以是1也可以是0,没有任何关系。<br>
这里出现了这样一个奇妙的规律,既然非压缩的BCD码高4位没有意义,那么78不妨可以表示为0011011100111000。细想一下00110111其实是一个字符对应的ASCII码,这个字符是什么呢?查一下ASCII码表即可得知这个字符就是7。同样00111000就是字符8。由来看来我们通过键盘输入的字符0-9所对应的ASCII码其实就是一种非压缩的BCD码。<br>
BCD码与二进制数形式一样,含义不同。给出一个二进制数00111000,它究竟是用压缩BCD码表示的38呢?还是十进制数56呢?为了区别它们,在书写时应注意BCD码的末尾应加上"BCD"后缀。如同十六进制数后加"H",二进制数后加"B"一样。不过这种写法只是为便于我们加以区分,不能用在源程序中。例如在源程序中BCD码00111000仍然要写成00111000B,不能写00111000BCD。这其中的原因很简单,那就是编译程序并不需要区分二进制数与BCD码,00111000BCD最终的编译结果仍然是38H,和00111000B一样。<br>
至于BCD码的运算,8086/88没有使用新的指令,仍然采用ADD、SUB这些二进制运算指令。这些指令只用于二进制数运算,它们不能处理BCD码。举例来说,如果计算56BCD+34BCD的话,使用ADD指令所得到的结果是8AH,而不是应该得到的90BCD。所以BCD码在进行了运算之后要使用一些指令对结果进行必要的调整才行。<br>
压缩BCD码与非压缩BCD码的调整指令不一样,而且不同的运算之后采用的调整指令也不相同。我们举几个压缩的BCD码运算实例,看看调整指令应该遵循的一些规则。<br>
(1)23BCD+36BCD<br>
很明显这两个数相加之后所得的结果59H是不需要进行调整的。<br>
(2)23BCD+37BCD<br>
这两个数相加之后将得结果5AH,而我们需要的结果应该是60H,可见此结果需要调整。调整方法很简单,将5AH的低4位加上一个6就能得出正确的结果。<br>
(3)63BCD+51BCD<br>
这两个数相加应得的结果应该是114H,实际运算结果是0B4H,此结果也要调整。调整方法是将此结果加上60H。0B4H+60H=114H。<br>
<font face="楷体_GB2312">
由(2)、(3)两例可以得出调整指令遵循的第一个规律:当运算结果的高4位或低4位出现了A-F中的数,则结果需要调整。调整方法是在出现了A-F的4位上加6。<br>
</font>
(4)29BCD+57BCD<br>
这两个数相加应得结果是86H,实际运算结果是80H,故此结果需要调整。调整方法与例(2)相同,低4位加6即可。<br>
(5)74BCD+83BCD<br>
这两个数相加应得结果是157H,实际结果是0F7H,需要调整。调整方法与例(3)相同,高4位加6。<br>
<font face="楷体_GB2312">
通过例(4)、(5)可以看出即使运算结果中没有出现值为A-F的数位,但是如果出现
</font>
</td>
<td></td><td></td> <!右边距>
</tr>
</font>
<!页脚线>
<tr valign="top">
<td></td><td colspan=20><hr></td><td></td>
</tr>
<!页脚>
<tr height=60 valign="top">
<td></td><td></td>
<td colspan=9><i>Copyright © 2004-2005 <a href="mailto:webmaster@nucstorm.com">Chunk Lee</a></i></td>
<td colspan=9 align="right"><i><a href="http://www.nucstorm.com" target="_top">www.nucstorm.com</a></i></td>
<td></td><td></td>
</tr>
</table>
<!导航条>
<p align="right"><a href="content1.html">目录</a> <a href="page269.html">上一页</a> <a href="page271.html">下一页</a> <a href="page291.html">下一章</a></p>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -