微机原理及应用学习记录


微机原理及应用

第一章 微处理器

1.1 微处理器的基本功能和基本组成

1.1.1 微处理器的基本功能

微处理器是微机运算和控制处理部件,也是指挥微机各部件协调工作的控制中心。主要

的基本功能包括:

  1. 指令控制功能,即控制程序 顺序执行 的功能

  2. 操作控制功能,程序是由有序指令的集合而成,CPU执行程序就是要逐条执行程序中

    的指令,一条指令的执行往往由若干操作信号的组成来实现,CPU根据指令操作码和

    时序信号,产生各种操作控制信号,以便正确的选择数据通路,从而完成取指令和执行

    指令的控制。

操作控制器的组成类型分为两类:

  1. 硬布线控制器,它是采用时序逻辑技术来实现的。
  2. 微程序控制器,它是采用存储逻辑来实现的。

1.1.2 微处理器的基本组成

从早期的微处理器看,它主要包括运算器和控制器两大部分。随着大规模集成电路技术的快速发展,

目前CPU内部最基本的组成部分为三大部分,即运算器、控制器和高速缓冲存储器。

1. 运算器:

AX,BX,CX,DX CPU中的寄存器

ALU:算数逻辑部件

C1,C2 :操作信号,相当于开关

标志寄存器:算完以后的状态,大于0,小于0?越界问题

!!! 数据不能两个都来自内存中。

2. 高速缓冲存储器

由于CPU的速度远大于内存的速度,所以使用cache,将CPU所需要的数据提前从内存读入cache中,

使得CPU在近期一段时间片段不需要访问内存,而是只需访问CPU内部的高速缓冲存储器,称其为
访问CPU内部cache的 命中率 很高

3. 控制器

控制器最基本的部件由指令指针,指令寄存器,指令译码器及操作控制器组成。

为什么会CPU会顺序执行:

指令指针中存放存储器地址,为了保证程序顺序执行,CPU必须自动记忆下一条指令存放在内存中

的地址,所以指令指针又称为指令计数器,他有 自动加一 功能

选择,循环结构时,操作系统会给指令指针赋值 (我们写代码过程中不能操作指令指针)

1.1.3 冯·诺依曼思想

  1. 五大模块:运算器,控制器,存储器,输入 /出设备
  2. 计算机采用二进制
  3. 在程序运行过程中,代码和数据存放在 内存

存储器包括内存跟硬盘,一般说存储器单指内存

​ 为什么:cpu不能直接访问硬盘

1.2 微处理器内部的寄存器

1.2.1 8086 CPU 内部的寄存器组

8086CPU包含

数据线:16

地址线:20

最大存储空间:64KB

​ 2^16 byte =2^6KB 1个二进制位表示1位,即 1bit,8bit=1byte(字节)

最多可接内存:1M

​ 2^20byte


4个16位 段寄存器

CS,代码段寄存器

DS,数据段寄存器 冯诺依曼思想第三句,主要是操作数据 important

SS,堆栈段寄存器

ES,附加段寄存器

代码在3楼:CS

数据在6楼:DS


数据寄存器
  1. AX:累加器,用于算数运算、逻辑运算以及在输入/输出指令中做数据寄存器使用等。
  2. BX:基址寄存器,在间接寻址中做基址寄存器,常用作偏移地址访问数据段。
  3. CX:计数寄存器,作为循环和串行操作等指令中的隐含计数器。
  4. DX:数据寄存器,常用来存放双字节长数据的高16位或存放 外设端口 的地址。

4个16位寄存器,分别可拆分为8个8位寄存器

AH,AL

BH,BL

CH,CL

DH,DL

在写代码过程中,要灵活运用这些寄存器

0~255 用8位


通用寄存器

SP,堆栈指针,SP用于指示栈底或栈顶的偏移地址

BP,基址指针,常用作偏移地址访问堆栈段 访问堆栈段—–SS

SI,源变址寄存器

DI,目的变址寄存器

SI和DI通常与 DS数据段寄存器一起使用,用来确定数据段中某一存储单元的地址。在进行

**字符串**操作时,SI用来存放源操作数的偏移地址,DI用来存放目的操作数的偏移地址,SI与

DI联用,DI与ES连用,分别寻址数据段和附加数据段。


标志寄存器

ZF:零标志,当前运算后,运算结果为0时,ZF=1,表示0成立,否则ZF=0.

DF:方向标志,该标志用于控制串操作指令中地址指针的变化方向

DF=0:每执行一次串操作,存储器地址自动增加

DF=1:没执行一次串操作,存储器地址自动减少

IF:中断允许标志,该标志用于控制8086CPU是否响应外部可屏蔽中断请求

TF:陷阱标志,常称为单步标志。


汇编语言采用减法计数

INC AL INC:increase

DEC BH DEC:decrease

1.3 用汇编语言实现 3 + 4

打开桌面快捷方式 输入命令
DEBUG    ;(输完回车)
R    ;(输完回车)

a    ;(输完回车)
MOV AX,3    ;(输完回车)
MOV BX,4    ;(输完回车)
ADD AX,BX    ;(输完回车)

最后直接回车

三次连续输入T 回车 单步执行

测试完成

1.3 微处理器对存储器的管理

1.3.1 实模式存储器地址空间的划分

从00000H~003FFH是中断向量表去,共计有1024字节,1024/4=256 ,用于存放

256个中断向量(中断服务程序的入口地址)—–>CS:IP,即每个中断向量包含4字节:

2字节的代码段值,2字节的偏移地址

1.3.2 实模式物理地址的产生

数据线小于地址线,所以CPU内部的地址加法器,能将16位的逻辑地址装换成

20位的物理地址

段基地址:偏移地址

物理地址的计算公式:

​ 物理地址=段基地址x16+偏移地址

1.3.2 段寄存器与偏移地址寄存器的固定搭配

总结:除了SP,BP,CS 其余的都跟数据段搭配


1.4 8086系统中的存储器组织

在8086系统中,把1MB的存储器分为两个存储体,偶地址存储体和奇地址存储体,其存储容量

各位512KB,在每个存储体内的字节地址是不连续的,而在两个存储体之间的字节地址是连续

的,构成了两个存储体之间的地址交叉,如图:

BHE 和A0的组合操作

BHE A0 操 作 指 令 列
0 0 从偶地址读/写一个字 MOV BX,[9900H]
0 1 从奇地址读/写一个字节 MOV AL,[8801H]
1 0 从偶地址读/写一个字节 MOV CH,[7700H]
1 1 无存储器操作

第二章 指令系统与汇编语言程序设计

1.1 8086CPU的寻址方式

2.1.1 指令一般格式

1. 8086CPU指令的格式

操作码 操作数

例如:指令 MOV AL,29H

8086CPU指令的格式可以细分为以下几种:

  1. 零地址指令

    格式:操作码

    零地址指令中不提供操作数,也不提供操作数的地址,只有操作码,例如 空操作指令

    NOP

  2. 单地址指令

    格式:操作码 操作数

    单地址指令也成为一般地址指令,指令中之提供一个操作数(或一个操作数的地址),例如:

    INC AH

    INC BYTE PTR[1100H]

  3. 两地址指令

    格式:操作码 目的操作数,源操作数

    指令中包含两个操作数,由操作码确定这两个操作数所进行的操作后,结果存入目的操作数中。例如:

    MOV AH,BL ;AH<——(BL)

    MOV BH,[1100H] ;BH<——(1100H)

    说明:

    1. 目的操作数和源操作数应具有相同的数据类型,即必须同时是8位或者16位。

    2. 目的操作数不能是立即数。

    3. 操作结束后,其操作结果送入目的操作数中,而源操作数并不会改变。

    4. 源操作数和目的操作数不能同时为存储器操作数,例如:

      ADD [BX],[2000H]

    5. 立即数不能作为目的操作数。

2. 操作数的类型
  1. 数据操作数
    1. 立即操作数
      imm,代表8 、16位立即数

      immn:n(n为8或16)位立即操作数

    2. 寄存器操作数

      reg:寄存器,代表8和16位

      regn:n(n为8或16)位寄存器

    3. 存储器操作数

      mem:存储器操作数,

      memn:n(n为8或16)位存储器操作数

    4. 输入/输出操作数

  2. 转移地址操作数

    转移地址操作数来自具体的指令,且指令中转移地址只有一个,他就是指令的目的操作数

2.2.2 8086 CPU寻址方式

1.立即寻址

操作数位置:内存代码段

立即寻址所提供的操作数直接放在指令中,它是紧跟在指令操作码后面的一个可用的8位或16位 补码 表示的由有符号数,也就是说,操作数的存放地址就是指令操作码的下一单元地址。

例: 立即数传送到寄存器中

MOV BH,10H ;将立即数10H传送到BH中

MOV BX,2345H ;将立即数2345H传送给BX

说明:立即数在所有指令中都不可能用作目的操作数。

2. 寄存器寻址

操作数位置:在CPU的某个寄存器中。

寄存器中寄存的内容就是要寻找的操作数。

例:增1指令

INC CX ;CX<——(CX)+1

例:寄存器之间的传送指令

MOV CX,AX ;CX<——–AX

3. 存储器寻址

在8086、80286微处理器中,默认的段寄存器与16位寄存器的固定搭配如表4-2所示

  1. 直接寻址

    MOV BL,[3330H]

    PA=DS x 16 + 3330H

  2. 基址寻址

    MOV AL,[BX]

    PA=DS x 16 + BX

  3. 相对基址寻址

    MOV AL,[BX+30H]

    PA=DS x 16 + BX + 30H

  4. 变址寻址

    MOV BL,[SI]

    PA=DS x 16 + SI

  5. 相对变址寻址

    MOV AL,[SI-56H]

    PA=DS x 16 + SI - 56H

  6. 基址加变址寻址

    MOV AL,[BX+SI]

    PA=DS x 16 + BX + SI

  7. 相对基址加变址寻址

    MOV AL,[BX+DI+90H]

    PA=DS x 16 + BX + DI + 90H

1.2 16位微处理器指令系统

为了方便介绍,对几个符号的规定如下:

OPS:源操作数,代表8位和16位二进制数据

OPSn:n(n为8或16)位源操作数

OPD:目的操作数,代表8和16位二进制数据

OPDn:n(n为8或16)位目的操作数

seg:段寄存器 (segment)

(reg):表示寄存器中寄存的数值

1.2.1 数据传送指令

1.一般数据传送指令

数据传送指令是将数据、地址或立即数传送到寄存器或存储器中,可以分为一般数据传送指令、堆栈操作指令、地址传送指令和输入 /输出指令

  1. 传送指令

    指令格式: MOV OPD,OPS

    MOV有如下五中具体形式:

    1. MOV reg,reg ; 两个寄存器之间的数据传送,如 MOV AL,BH

    2. MOV reg,mem ; 内存单元数据传送给寄存器,读内存,如 MOV BX,[SI]

    3. MOV mem,reg ; 寄存器的数据传送给内存单元,写内存,如 MOV [DI],BX

    4. MOV reg,imm ; 立即数传送给寄存器,如 MOV AX,3

    5. MOV mem,imm ; 立即数传送给内存单元,如 MOV WORD PTR[SI],1122H

      特别说明:WORD是指明两个字节,BYTE 指明一个字节

    用于段寄存器的传送指令有三种形式:

    1. MOV seg,reg ; 寄存器数据传送给数据段寄存器,如 MOV DS,AX
    2. MOV reg,seg ; 段寄存器数据传送给寄存器,如 MOV AX,DS
    3. MOV mem,seg ; 段寄存器数据传送给内存单元,如 MOV [DI],DS

    说明:当段寄存器作为目的操作数时,不允许是CS和SS段寄存器,但所有段寄存器都可以作为源操作数

  2. 数据交换指令

    指令格式:XCHG OPD,OPS

    XCHG一般有如下三种格式:

    XCHG reg,reg XCHG AL,AH

    XCHG reg,mem XCHG AL,[BX]

    XCHG mem,reg XCHG [1000H],BX

2.堆栈操作指令

堆栈是在内存RAM这种开辟的一段特殊的存储空间。它的主要功能包括:

  1. 用来暂时存放程序的(断电)地址(CS和IP的值)。
  2. 用以临时存放CPU寄存器和存储器中暂时不用的数据 (寄存器不够用)

堆栈操作指令:

  1. 数据入栈指令

    指令格式:PUSH OPS16

    将OPS中的16位数据压入堆栈中,且堆栈指针SP中的值减2,PUSH一般有两种形式:

    1. PUSH reg16
    2. PUSH mem16
  2. 数据出栈指令

    指令格式: POP OPD16

    将SS:IP所指定的一个字弹出给某一16位通用寄存器、数据段寄存器或某一字存储单元中。OPS一定是16位,弹出栈的数据也是16位,POP OPD16指令执行后,SP加2。

    POP一般有三种形式:

    1. POP reg16
    2. POP seg
    3. POP mem16

    注:高字节存放高地址、低字节存放低地址

  3. 地址传送指令

    1. 传送偏移地址

      指令格式: LEA reg16,OPS

    说明:(1)目的操作数一定是一个16通用寄存器。

    (2)OPS 所提供的一定要是内存的一个偏移地址,可以是存储器的各种寻址方式。例如:

    ​ LEA BX,[SI+2]

    (3)OPS通常是变量名,取其偏移地址到reg16中。例如:

    LEA SI,VAR

  4. 输入/输出指令

    输入 /输出设备接口电路中有三种类型的寄存器 此处寄存器跟前面所指寄存器并不同 每一个设备寄存器都在I/O空间中被指定一个固定地址

    1. 基本输入指令

      IN AL,DX

      通常用作查询状态,数据采集

    2. 基本输出指令

      OUT DX,AL

      给300H发数据80H

      MOV AL,80H

      MOV DX,300H

      OUT DX,AL

1.2.2 算数运算指令

1.加法指令
  1. 不带进位的加法指令

    指令格式: ADD OPD,OPS

    ADD有以下5种形式:

    ADD reg,reg

    ADD reg,mem

    ADD mem,reg

    ADD reg,imm

    ADD imm,reg 例:ADD WORD PTR[1000H],2233H

  2. 带进位的加法指令

    指令格式:ADC OPD,OPS

2.减法指令
  1. 不带借位减法指令

    指令格式:SUB OPD,OPS

  2. 带借位减法指令

    指令格式: SBB OPD,OPS

  3. 减1指令

    指令格式:DEC OPD

    DEC有两种形式:

    DEC reg

    DEC mem DEC WORD PTR[DI]

    例:求1-100的累加和

    MOV AX,0

    MOV CX=64

    ABC:ADD AX,CX

    DEC CX

    JNZ ABC

  4. 比较指令

    指令格式:CMP OPD,OPS; (OPD)-(OPS)

3.乘法指令
  1. 无符号的乘法指令

    指令格式:MUL OPS

    字节乘法: AX<—-(AL)*(OPS8)

    字乘法: DX:AX<—-(AX)*(OPS16)

  2. 带符号数乘法指令

    指令格式:IMUL OPS

    字节乘法: AX<—-(AL)*(OPS8)

    字乘法: DX:AX<—-(AX)*(OPS16)

4.除法指令
  1. 无符号的除法法指令

    指令格式:DIV OPS

    字节除法: (AX)/(OPS8) 商—->AL,余数—->AH

    字除法: DX:AX/(OPS16)

  2. 带符号数除法指令

    指令格式:IDIV OPS

    字节除法: (AX)/(OPS8) 商—->AL,余数—->AH

    字除法: DX:AX/(OPS16)

1.2.3逻辑运算

1.求补指令

指令格式:NEG OPD

将OPD中的内容逐位取反,且末尾加一后送入OPD中

2.求反指令

指令格式:NOT OPD

将OPD中的内容逐位取反后,送入OPD中

3.逻辑与指令

指令格式:AND OPD,OPS OPD<—-OPD^OPS

4.逻辑测试指令

指令格式: TEST OPD,OPS OPS^OPD

注:用来查询状态

5.逻辑或指令

指令格式:OR OPD,OPS OPD<—-OPDvOPS

6.逻辑异或指令

指令格式: XOR OPD,OPS

1⊕1=0,0⊕0=0,0⊕1=1

1.2.4 移位指令

1. 算术移位指令
  1. 算数左移

    SAL OPD,1

    SAL OPD,CL

    这两条指令的差别是当移位次数为1时,可以直接使用SAL OPD,1指令,当移位次数大于1时,必须先将移位次数送入CL中,然后使用SAL OPD,CL指令。

  2. 算数右移

    SAR OPD,1

    SAR OPD,CL

2.逻辑移位指令
  1. 逻辑左移指令

    SHL OPD,1

    SHL OPD,CL

  2. 逻辑右移指令

    SHR OPD,1

    SHR OPD,CL

3.循环移位
  1. 不带进位的循环左移指令

    ROL OPD,1

    ROL OPD,CL

    ROL WORD PTR[BX],1 ;内存中临近的两个字节组成一个字循环左移一位

  2. 不带进位的循环右移指令

    ROR OPD,1

    ROR OPD,CL


文章作者: 史祖威
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 史祖威 !
 上一篇
win10 安装Visual Studio 2015 win10 安装Visual Studio 2015
一、安装Visual Studio 20151、下载安装包复制磁力链接,打开迅雷,下载安装包,没有迅雷的先安装迅雷。 ed2k://|file|cn_visual_studio_enterprise_2015_x86_x64_dvd_684
2020-11-13
下一篇 
win10 彻底关闭杀毒软件 win10 彻底关闭杀毒软件
win10家庭版方法一:1、打开windows+R组合键打开运行,输入regedit回车后打开注册表 2、打开注册表找到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Secur
2020-11-03
  目录