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

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

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

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

假如累加器A存放的字节是35h,累加器B存放的字节是22h,经过减法运算:SUB A, B

累加器中的值变为22h,即两个字节的差。

如果累加器A中的值为35h,寄存器H和L中的值分别是10h和7Ch,而存储器地址107Ch处的字节为4Ah,指令:

ADD A, [HL]

把累加器中的值(35h)与寄存器对HL寻址(107Ch)存储器得到的数值(4Ah)相加,并把计算结果(7Fh)保存到累加器。

在8080中,使用ADC指令和SBB指令可以对16位数、24位数、32位数甚至更高位的数进行加法、减法运算。例如,假设现在寄存器对BC和DE各自保存了一个16位的数,我们要把这两个数相加,并且把结果保存在寄存器对BC中。具体做法如下:

MOV A, C ;低字节操作
ADD A, E
MOV C, A
MOV A, B ;高字节操作
ADC A, D
MOV B, A

在上面的计算中,用ADD指令对低字节相加,用ADC指令对高字节相加。低字节相加产生的进位会进入高字节的运算中。在这段简短的代码中,我们用到了4个MOV指令,这是因为在8080中只能利用累加器进行加法运算,操作数在累加器和寄存器之间来回地传送,因此在8080的代码中会大量使用MOV指令。

现在我们来讨论8080的标志位(flag)。第17章设计的处理器已经有了CF(进位标志位)和ZF(零标志位)两个标志位,在8080中又新增了3个标志位,包括符号标志位SF,奇偶标志位PF和辅助进位标志位AF。在8080中,用一个专门的8位寄存器来存放所有标志位,该寄存器称做程序状态字(Program Status Word,PSW)。不同的指令对标志位有不同的影响,LDA、STA或MOV指令始终都不会影响标志位,而ADD、SUB、ADC以及SBB指令会影响标志位的状态,具体情况如下。

编码—隐匿在计算机软硬件背后的语言

286