微机原理与接口技术--西安电子科技大学-笔记一

微机原理与接口技术—西安电子科技大学

绪论

微型计算机系统组成

  1. 硬件子系统与软件
  2. 早期计算机硬件组成–ALU-----控制器控制ALU运算–ALU运算的数据
  3. 存储器中的数据被控制器控制器送到ALU
  4. 输入设备(IO)-----控制器控制输入设备
  5. 信息------数据信息、控制信息、地址信息
  6. 总线-----用来传送信息的通道
  7. 数据总线(DB)、地址总线(AB)、控制总线(CB)
  8. 现代微型计算机硬件组成
  9. 引脚------复用引脚–分时复用
  10. 指令-----一种二进制代码(机器码)
  11. 存储器按字节组织的-------寻址-----地址总线条数的多少----数据总线----可管理的数据的大小

计算机中的数制和码制

  1. 十进制 <-----> 二进制 (字长n=8)
  2. 逼近法-----位置加权法
  3. 十进制 <-----> 十六进制
  4. 在程序设计当中,都会遇到把十进制转换成二进制
  5. 二进制 <-----> 十进制 (除10取余法)
  6. 比较法

二进制数的运算

  1. 算数运算 ±*/
    • 字长n 8–字节,16—字,
  2. 8位寄存器----暂存数据
    • AX(16) BX CX DX------AH AL
  3. 助记符 目的操作数 源操作数
  4. 数字0打头
  5. 结果溢出
  6. 处理器状态字寄存器PSW----标志寄存器----运算才可能影响PSW

  1. 逻辑运算
    • 与 AND DST,SRC 应用场合:位清零AND0,有些位置不变
    • 或 OR DST,SRC 应用场合:位置1Or1,某些位置不变
    • 异或 XOR DST,SRC 应用场合:取反XOR1,某些位置不变
    • 非 NOT DST(不影响状态标志位)
      (无符号数)
  2. 8位数据范围:0~255; 16位数据范围: 0~65535

有符号数的表示方法以及溢出问题

  1. D0-D6–数值,D7----符号(机器码)
  2. 原码-----[X]原
  3. 补码-----X>=0,本身;X<0,2^n+X;
    • 负数的原码----符号位不变–取反+1
  4. 在计算机中,有符号数均用补码表示

  1. 补码的运算
  2. n=8,-128~+127; n=16,-32768~+32767
  3. [X+Y]补 = [X]补+[Y]补
  4. 加法是前两位要进都进,减法是要借都借
  5. [X-Y]补 = [X]补-[Y]补
  6. 补码运算结果还是补码,再次求补就是原码
  7. 变补/求负----[Y]补----[-Y]补

  1. BCD码
  2. 组合BCD数—一个字节
  3. 分离BCD数—两个字节
  4. BCD运算—后四位超过9+6调整

  1. 计算机上的字符用ASCII码表示
  2. 可显字符—‘0’----‘9’ ‘a’----‘f’ ‘A’----‘F’
  3. 字符---->数字 -30H || AND 0FH
  4. 大写---->数字 -37H ||
  5. 大写---->小写 20H || 逻辑运算 AND 0DFH||ADN 5FH
    • 0100~0101------> 0110~0111
  6. 小写----> 大写 OR 20H

CPU的结构与功能(第二章)

微型处理器的外部结构

  1. 表现为数量有限的输入输出引脚
  2. 输入输出引脚构成了微处理器总线
  3. 数据总线、地址总线、控制总线
  4. 8086(16-16)/8088(16-8)共40个引脚
  5. A19-A16,A15-A0-----给外部存储器提供地址,2^20=1M
  6. A15-A0-----同时给外部IO提供地址—M/^IO
  7. 一个IO端口至少占用一个IO地址----IO端口地址
  8. 统一编址—缺点:浪费了存储器的空间;优点:IO驱动程序灵活
  9. 独立编制—优点:节约存储器的空间;缺点:,指令记忆复杂,IO编程不灵活

微处理器的内部结构(一般)–效率较低

  1. ALU–算数逻辑运算
  2. 工作寄存器—数据寄存器只可以提供数据–地址寄存器可以提供地址也可以提供数据—
  3. 控制器—中央指挥机关—取指令–指令寄存器(指令队列)—译码
  4. IO控制逻辑电路

  1. 外部存储器

  1. 控制器
    • 程序计数器(PC)–16
    • 指令寄存器(IR)–8
    • 指令译码器(ID)–
    • 控制逻辑部件

  1. 堆栈-----先进后出原则组织的一段存储器区域----在外部存储器
  2. 8086:堆栈必须按字操作
  3. SP—堆栈指针寄存器(16)----栈底+1的地址----SP—>SP-2;一个字单元的数据压入
  4. SP----指向的地址是栈顶
  5. 堆栈溢出就出现死机状态
  6. pop---->取出数据;SP+2

8086/8088CPU的内部结构—8086/8088***

  1. 虚线分为两大部分—BIU 和 EU
  2. BIU
    • CS\SS\ES\DS\IP(相当于PC)
  3. 为了16位的地址可以寻找1M的空间,内存分为段管理
  4. 内部只提供16位地址,寻址16,把外部分为多个64K段地址,段地址(16)+偏移—>地址产生—>20

  1. 指令队列 REG(IR)----6个字节----效率提高—8088(4个字节)
  2. BIU—主要职责:从外部存储器取指令,并将取回的指令放到指令队列中,直至6个字节
  3. EU----主要负责从指令队列获取指令—遵循先进先出原则—并译码分析并指令
  4. 图–时序周期–EU如果使用总线执行命令,BIU暂停取指令

8086CPU的寄存器组织

  1. 共有14个16位的寄存器
  2. 通用寄存器–8个

    数据寄存器(4个16位)

    • AX—累加器(特殊功能)| AH AL
    • BX—基址寄存器(特)—段内的–DS段的
    • CX—计数器
    • DX—数据寄存器(IO)

    地址指针寄存器 (2)与变址寄存器(2)-----16位

    • SP—堆栈指针寄存器(段内–偏移)
    • BP—地址指针寄存器—类似于BX做基址寄存器
      在段内讲偏移地址–64K—逻辑段
      MOV BX,0002H—DS
      MOV BP,0002H—SS
      MOV DS:[BP],AL//段超越前缀,存储到不属于自己的逻辑段内
    • SI—源变址寄存器
    • DI—目的变址寄存器—SI、DI对字符串的操作体现变\自动变
    • BX,SI,DI—DS段
    • 字符串操作指令—源在DS–SI提供---->目的必须在ES段–DI提供首地址
    • MOVSB

  1. 段寄存器(4个)
    • CS—代码段寄存器----与外部存储器的段联系,段地址–初始化由系统完成
    • DS—数据段寄存器----可以人为初始化
    • ES—附加数据段寄存器—可以人为
    • SS—
  2. 控制寄存器(2个)
    • IP—指令指针寄存器(16)—与CS配合
    • PSW—处理器状态寄存器(16)—有用的只有9—3.8标志位操作指令(CF\DF\IF)
      状态标志(ZF、CF、PF、OF、AF、SF)–运算才影响----反应的是ALU运算后、结果的状态
      控制标志-----用来控制CPU的运行状态
      • DF(方向控制)—CLD;DF=0----STD;DF=1
      • IF(中断允许)—外部可屏蔽----
      • TF(陷阱、单步标志)–DEBUG

存储器和IO组织

存储器地址空间与数据存放格式

  1. 地址空间
    • A19-A16,A15-A10,A9-A0
    • 给外部变址20-1M,IO:16-64k
    • 在pc机中,给IO分配A9-A0–10–1K—前512(主板上的IO)(000H-1FFH)–后512(给插件板上)(200H-3FFH)
  2. 数据存放格式
    • 字节型、字型、双字型
    • 字节型数据:一个地址单元,定义在存储器中的DS段,DB(字节型定义伪指令)—如何编译
    • 字型数据:DW------对准(高低同时写/读)与未对准(在各个时序中通过)–时间周期是2倍
    • [BX BP SI DI]----所存的地址;BX BP SI DI—它本身
  3. 存储器的分段与物理地址的形成
    • 为什么要分段----20根地址线—16位地址寄存器
    • 如何分—每个逻辑段最大64K,每个逻辑段的起始地址必须可以被16整除
    • 物理地址—实际存在的地址----0000 0–0001 0----0段、1段、2段、。。。65535段
    • 段的段首单元的地址----段基址:偏移地址(段内偏移地址、相对于段基址偏移)----0 0000:0000H
    • 由于段相互有叠加,所以一个单元的逻辑地址可能不同,但是物理地址一定
    • 程序、调试都是逻辑地址
    • 物理地址(PA)的形成----> 物理地址=段基址X16(左移加个0)+段内偏移地址(段内有效地址)

  1. 取指令操作
    • CS(段基地址)X16+IP(段内偏移地址)------>取指令所存储的PA----无条件转移
    • 堆栈操作(SS:SP+2) 和 数据操作(DS+IP)
  2. 各类指令的地址信息
  3. 实际上汇编后在存储器内不会重叠----当前段

8086指令系统

汇编语言指令

  1. 名词解释
  • 指令—一种二进制代码(机器码)
  • 指令系统–CPU能识别的所以指令集合
  • 机器语言–指令代码语言
  • 机器语言程序–
  • 汇编语言–符号化语言 如:B0 12—MOV AL,12
  • 汇编语言源程序
  • 汇编–将汇编语言翻译机器语言的过程–masm.exe
  • 反汇编–将机器语言翻译成汇编语言
  • .ASM—.OBJ–(连接)----.exe
  1. 8086汇编语言程序中语句的种类
  • 指令语句—CPU可以执行的语句(汇编后可以汇编成二进制)
  • 伪指令语句–CPU不可以执行的语句(不会成二进制)
  • 宏指令语句–本身是8086指令系统没有的指令,是用户用宏定义伪指令的指令语句–类似于函数
  1. 汇编语言中语句的组成
  • 变量名(标号名:) 助记符 操作数 ;注释
  • 地址符号化 DATA1—变量名
  1. 汇编语言中的常数及表达式
  • 十进制常数、十六进制常数、字符常数、字符串常数、?(随机数)
  • 表达式–操作符—算数操作符、逻辑操作符、关系操作符、属性操作符、其他操作符
  1. 标号、变量及伪指令
  • NEXT:----标号–一定定义了,就具有3个属性—段地址属性(SEG)—段内偏移地址属性(OFFSET)—类型属性(TYPE)
  • MOV BX,OFFSET NEXT //属性表达式的值是十六位的常表达式
  • TYPE:NEAR—近程(段内转)-- -1;FAR–远程(段间)-- -2;
  • 变量:DB–定义字节型—1;DW—字型----2;DD—双字型—4;
  • 变量一定定义就有五个属性:段地址属性、段内偏移地址属性(OFFSET)、类型属性、长度属性(LENGTH)、大小属性(SIZE)
  • 在MASM.EXE中有一个$位置计数器,汇编过程中指向存储的位置,16位
  • DATA6 DW DATA3—DATA的OFFSET;–DD—OFFSET+SEG
  • DATA8 DB 4 DUP(?);DUP操作符:重复操作符,允许嵌套
  • 长度属性: 在变量名定义语句中,所定义的变量的个数,8086规定如果有GUP操作,长度就是DUP的前的数值;其他的变量定义就是1
  • 大小属性:所有变量所占的总的字节数,变量数字节数(TYPELENGTH)
  • 其他操作符就是PTR操作符----MOV AL,DATA1+2;类型不一致,汇编会出错–类型要强制转换,属性临时修改操作符
  • MOV [BX] 10H;错误----MOV TYPE PTR [BX] 10H

  1. 指令的分类(课本P31)
  2. 数据与转移地址的寻址方式
  • 寻址方式:求操作数所在地(寄存器、立即数)或所在存储器单元地址的方法
  • 求得的操作数当作成数据 或 用作转移地址用(IP:段内、IP+CS:段间)
  • 寻找数据的寻址方式(取操作数—源操作数,存数据–目的操作数)
    1. 立即数寻址–常数形式;MOV AX,1234H;立即数–只能做源操作数
    1. 寄存器寻址—MOV AX,BX—数据在BX寄存器中; MOV AX,CL;类型不一致,错误—寄存器寻址类型要一致
      MOV [0200H],56H;错误,没有明确给出存储单元的类型—MOV WORD PTR [0200H],56H;
      MOV DS,1500H;错误----==当DS\ES\SS做DST时,SRC不能为立即数,立即数寻址;==MOV AX,1500H;MOV DS AX;
      MOV CS;CS\IP不能做DST;人为无法改变;程序自动改变;但是可以做SRT
    1. 存储器寻址—书上的3-7;要寻找的OPR在存储器某单元中;要知道这个单元的地址,存储操作数的单元的EA(有效地址),可以由以下5种寻址方式求得
 > 1. 直接寻址
 > 2. 寄存器(REG)间接寻址  [BX\SI\DI]:操作数
 > 3. REG相对寻址 [BX\BP\SI\DI]+8\16位DISP(相对位移量)
 > 4. 基址、变址选址  --两部分组成---[BS\BP][SI\DI]
 > 5. 基址、变址且相对寻址--三部分组成--[BS\BP][SI\DI]+8\16位DISP

 > 1. 直接寻址:操作数所在存储单元的有效地址(EA)指令中直接给出
 > 1. MOV AL,[2000H];把DS:2000H存储单元的操作数直接给AL,一般会把操作数所在的存储单元符号化---也就是变量---变量具有5个属性
 > 1. ==两个存储器单元之间不能直接操作,传送、算数都不可以;需要通用寄存器作为桥梁过渡==
 > 1. PTR临时改变属性操作,会影响相邻存储单元,MOV WORD PTR DATA1(DB) AX;
 
 > 2. 寄存器间接寻址:EA = 地址寄存器间接给[BX\SI\DI]----默认在DS段内
 > 2. MOV BX,OFFSET DATA1;----(BX)<---DATA1的有效地址
 > 2. MOV AL,[BX];REG间接寻址
 > 3. REG相对寻址:EA = [BX\BP\SI\DI]+8\16位DISP(相对位移量);DISP为常数时[BX\SI\DI]默认DS;[BP]默认SS;
 > 3. EA = [BX]+3;[BX+3];3[BX];
 > 3. MOV BX,0;MOV AL,00H;MOV DATA1[BX] AL;  DS:(OFFSET DATA1(16位) + (BX))就是EA
 > 3. BP的相对寻址默认在SS段可以在堆栈中读取数据,而不破环SP
 > 4. 基址、变址寻址:EA = [BX\BP][SI\DI];数据默认看[BS\BP]
 > 4. MOV [BX][SI],AL;
 > 5. 基址、变址且相对寻址:EA = [BX\BP][SI\DI]+8\16位DISP;DISP为常量,以[BX\BP]为准;DISP为变量时,OFFSET DATA 16位;以变量位置为准
    1. 隐含寻址:PUSH AX;(SP)-2---->SP;(SS:(SP))<----(AX);
    1. 变量不可以在指令中运算

本篇截止于第三章数据与指令的寻址方式

你可能感兴趣的:(专业学习笔记)