《编码:隐匿在计算机软硬件背后的语言》读书笔记 09

来源:互联网 发布:随机种子知乎 编辑:程序博客网 时间:2024/06/07 06:12


第十九章 两种典型的微处理器

微处理器将计算机中央处理器的所有构件整合在一起,集中在一个硅芯片上。

1971年,第一个微处理器 Intel4004系列,2300个晶体管。


1. 8080微处理器 摩托罗拉公司 8位 6000个晶体管,2MHZ 64KB 单芯片 40个管脚 (3个电源电压2个同步时钟输入16个寻址的输入信号8个输入输出信号10个控制信号)

封装为2英寸长,1/2英寸宽 1/4英寸厚 

指令集:Load  Store (助记符:STA LDA 加载和保存)

MOV :一条指令63个操作码 单字节指令(32条) MVI:传送立即数

四种基本运算方式:ADD ADC SUB SBB(加法 进位加法 减法 进位减法)

操作码   指令    操作码    指令

80    ADDA,B    90    SUBA,B

81    ADDA,C    91    SUBA,C

82    ADDA,D    92    SUBA,D

83    ADDA,E    93    SUBA,E

84    ADDA,H    94    SUBA,H

85    ADDA,L    95    SUBA,L

86    ADDA,[HL] 96    SUBA,[HL]

87    ADDA,A    97    SUBA,A

88    ADCA,B    98    SBBA,B

89    ADCA,C    99    SBBA,C

8A    ADCA,D    9A    SBBA,D

8B    ADCA,E    9B    SBBA,E

8C    ADCA,H    9C    SBBA,H

8D    ADCA,L    9D    SBBA,L

8E    ADCA,[HL] 9E    SBBA,[HL]

8F    ADCA,A    9F    SBBA,A


标志位 :CF(进位标志符) ZF(零标志符)符号标志位SF、奇偶标志位PF和辅助进位标志位AF像LDA、STA和MOV这样的指令不影响标志位,

而ADD、SUB、ADC和SBB指令却要影响标志位

程序状态字:所有标志位都保存在另一个叫作程序状态字(PSW:programstatusword)的8位寄存器中。

逻辑运算AND(与)、OR(或)和XOR(异或)。算术运算和逻辑运算都可通过处理器的算术逻辑单元(ALU)来执行

操作码   指令

SUB    A,B

ADD    A,[HL]

37        STC    置CF为1

3F        CMC    CF取反

A0    ANDA,B    B0    ORA,B

A1    ANDA,C    B1    ORA,C

A2    ANDA,D    B2    ORA,D

A3    ANDA,E    B3    ORA,E

A4    ANDA,H    B4    ORA,H

A5    ANDA,L    B5    ORA,L

A6    ANDA,[HL] B6    ORA,[HL]

A7    ANDA,A    B7    ORA,A

A8    XORA,B    B8    CMPA,B

A9    XORA,C    B9    CMPA,C

AA    XORA,D    BA    CMPA,D

AB    XORA,E    BB    CMPA,E

AC    XORA,H    BC    CMPA,H

AD    XORA,L    BD    CMPA,L

AE    XORA,[HL] BE    CMPA,[HL]

AF    XORA,A    BF    CMPA,A

MVI    A,0Fh

MVI    B,55h

AND    A,Bh

MVI    B,25h

CMP    A,B

C6    ADIA,xx    E6    ANIA,xx

CE    ACIA,xx    EE    XRIA,xx

D6    SUIA,xx    F6    ORIA,xx

DE    SBIA,xx    FE    CPIA,xx

27        DAA

2F        CMA

CMA即complementaccumulator,它对累加器中的值进行取反操作。每个0变为1,每个1变为0。如果累加器中的值为01100101,CMA指令使它变为10011010。也可以用下述指令来使累加器按位取反:

XRI    A,FFh

DAA即DecimalAdjustAccumulator,如前所述,它可能是8080中最复杂的一条指令。微处理器中有一个完整的小部件专门用于执行这条指令。

DAA指令帮助程序员用BCD码表示的数来进行十进制算术运算。在BCD码中,每一小块数据的范围在0000~1001之间,对应于十进制的0~9。利用BCD码格式,每8位字节可存储两个十进制数字。

操作码   指令  操作码        指令

04    INRB    05    DCRB

0C    INRC    0D    DCRC

14    INRD    15    DCRD

1C    INRE    1D    DCRE

24    INRH    25    DCRH

2C    INRL    2D    DCRL

34    INR[HL] 35    DCR[HL]

3C    INRA    3D    DCRA

单字节指令INR和DCR可影响除CF外的所有标志位。

8080也包含4个循环移位指令,这些指令可使累加器中的内容左移或右移1位:

操作码     指令        含义

07        RLC    累加器循环左移

0F        RRC    累加器循环右移

17        RAL   累加器带进位循环左移

1F        RAR    累加器带进位循环右移

这些指令只影响CF

把微处理器寻址的存储器叫作随机访问存储器(RAM)是有原因的:微处理器可以简单地根据提供的地址访问某一存储位置


** 堆栈  从底向上压入堆栈,从顶向下弹出堆栈,因此这也叫后进先出存储器,或LIFO

向堆栈中放入数据叫作push(压入),从堆栈中取走数据叫作pop(弹出)

操作码    指令  操作码    指令

C5    PUSH BC    C1    POP BC

D5    PUSH DE    D1    POP DE

E5    PUSH HL    E1    POP HL

F5    PUSH PSW   F1    POP PSW

PUSHBC指令把寄存器B和C的内容保存到堆栈中,POPBC指令恢复它们。最后一行的缩写PSW指的是程序状态字,前面讲过,它是包含有标志位的8位寄存器。最后一行的两条指令实际上是把累加器和PSW都压入和弹出堆栈

Call指令可有效地保存“程序从哪里跳转”的标记。处理器最终可利用此地址返回到原来的位置。这个返回指令叫Return。Return指令从堆栈中弹出两个字节,并把该值装载到PC中。

微处理器是怎样与外围设备(对于连接到微处理器而不是存储器的东西的称呼)进行通信的呢?外围设备具有与存储器相似的接口,微处理器可通过对应于外设的具体地址来对外设进行读写。在有些微处理器中,外围设备实际上占用了通常用来寻址存储器的地址,这种配置叫作内存映像I/O。

指令:OUT指令用于把累加器中的数据写到紧跟该指令的字节所寻址的I/O端口中。IN指令把端口的数据读入到累加器中。

程序必须通过执行EI(Enableinterrupts)指令来允许中断,通过执行DI(DisableInterrupts)指令来禁止中断

Restart指令,它们与CALL指令相似,也需要把当前程序计数器的值压入堆栈NOP代表noop,即nooperation(无操作)。NOP指令使微处理器什么都不做

2. 6800微处理器

6800有一个16位程序计数器PC、一个16位堆栈指针SP、一个8位状态寄存器(作为标志)以及两个8位累加器A和B有一个16位索引寄存器(indexregister),可用来保存一个16位地址

6800和8080所实现的操作相同—装载、保存、加法、减法、移位、转移、调用,但很明显的区别是:它们的操作码和助记符完全不同

操作码            指令                含义

20h                BRA                转移

22h                BHI             大于则转移

23h                BLS            小于或相同则转移

24h                BCC            进位为0则转移

25h                BCS            进位置1则转移

26h                BNE            不等则转移

27h                BEQ            相等则转移

28h                BVC            溢出为0则转移

29h                BVS            溢出置1则转移

2Ah                BPL             为正则转移

2Bh                BMI            为负则转移

2Ch                BGE            大于或等于0则转移

2Dh                BLT            小于0则转移

2Eh                BGT            大于0则转移

2Fh                BLE            小于或等于0则转移

6800没有像8080中那样的奇偶标志位PF,但它有一个8080中没有的标志位—溢出标志位(overflowflag)。上述转移指令中有些依赖于标志位的组合

8080和6800还有一个有趣的不同点:在两种微处理器中,LDA指令都是从一个特定的地址处装载到累加器

8080认为低位在前,高位在后;6800则认为高位在前,低位在后

现代处理器使用了一些技术用来提高速度,其中之一是流水线技术,处理器在执行一条指令的同时读取下一条指令。由于转移指令会改变执行流程,实际上这样达不到预期效果。现在的处理器还包含一个Cache(高速缓冲存储器),它是做在处理器内部的快速RAM阵列,用于保存最近执行的指令。因为计算机程序经常执行一些小的指令循环,因而Cache可以避免这些指令重复装载。所有这些速度提升措施都需要在处理器中有更多的逻辑器件和晶体管。



节选于 :http://course.cug.edu.cn/cugFirst/computer_culturebase/kewaidwu/kewaiduwu.htm


0 0
原创粉丝点击