奎克的藏经阁 · 原书印刷页

编码 隐匿在计算机软硬件背后的语言 · 第 289 页

PDF 物理页索引 305 · 编码隐匿在计算机软硬件背后的语言

书名
编码 隐匿在计算机软硬件背后的语言
作者
未记录
印刷页
289
PDF 物理页
305(从 0 开始)
章节
编码隐匿在计算机软硬件背后的语言
UUID
38270854-596f-4a26-8183-db8c968c6020
来源类型
original_book
页面 SHA-256
e07df9e97400b10fabe6f1e6e15edb8612fec1f38033dd66b9d5d99411fcf92b

CMA 是 Complement Accumulator的简写。它对累加器中的数按位取反,即把0 变为1,1变为0。例如,累加器中的数如果是01100101,使用CMA命令后,累加器中的数按位取反,得到10011010。我们还可以使用如下指令对累加器中的数取反:

XRI A, FFh

前面提到过,DAA是Decimal Adjust Accumulator的缩写,即十进制调整累加器,它可能是8080中最复杂的一条指令。在8080微处理器中专门设计了一个完整的小部件用来执行该指令。

DAA指令提供了一种用二进制码表示十进制数的方法,称为 BCD码(binary-codeddecimal),程序员可以在该指令的帮助下实现十进制数的算术运算。BCD码采用的表示方式为,每4位为一段,每段所能表示数的范围是:0000\~1001,对应十进制数的0\~9。因为1字节有8位故可分割为2个段,因此在BCD码格式下,一个字节可以表示两位十进制数。

假设累加器A存放的是BCD码表示的27h,显然它就对应十进制数的27(通常,十六进制的27h 对应的十进制数是39)。同时假设寄存器B 中存放着 BCD 码表示的 94h。假如执行如下指令:

MVI A, 27h MVI B, 94h ADD A, B

累加器中存放的最终结果是 BBh,当然,这肯定不是 BCD码。因为BCD码中每4位组成的段所能表示的十进制数不会超过9。然而,当我们执行指令:

DAA

那么累加器最后所保存的值是21h,而且进位标志位CF置1。因为十进制的27与94相加的结果为121。由此可以看到,使用BCD码进行十进制的算术运算是很方便的。

在8080程序中,经常会对一个数进行加1或减1运算。在第17章的乘法程序中,为了实现对一个数减1,我们把该数与FFh相加,它是-1的补码。8080提供了专门的指令用来对寄存器或存储器中的数进行加1(称作增量)或减1(称作减量)操作。

19 两种典型的微处理器

289