画布 1
微机原理
  计算机系统概述
    数与数制
      十进制转r进制
        整数部分
          除以r取余（倒序）
        小数部分
          乘以r取整（顺序）
      数据格式
        机器码
          一个数在计算机中的表示形式
        真值
          一般书写的实际数值数据
      二进制编码及运算
        原码、反码、补码
        为了区别指令码和数据，A-F开始的数据前面必须加0
        若有符号数字长n位，则其除了符号位外只有n-1位
        运算时，符号位与数值位同等对待，符号位产生的进位丢掉不管
        BCD码
          压缩BCD码（组合BCD码）
            一个字节中存放2位十进制数的BCD码
          非压缩BCD码（非组合BCD码）
            一个字节中进存放1位十进制数的BCD码
            高4位没有意义
          运算结果大于9
            加6修正
        ASCII码
          0
            48（30H）
          A
            65（41H）
          a
            97（61H）
          32个控制字符、94个可印刷字符
    微型计算机的逻辑电路基础
      译码器
      触发器
        电位触发
        边沿触发
        主从触发
      寄存器
        缓冲寄存器
          数据缓冲寄存器
          地址缓冲寄存器
        移位寄存器
          具有数据存储和移位两个功能
        计数器
        累加器
          暂存每次在ALU中计算的中间结果
      三态电路
        当选通E为高电平时，呈现高阻态
        否则输出信号等于输入信号
        双向三态缓冲器
        4位缓冲寄存器
    计算机系统概述
      分类
        用途
          专用计算机
          通用计算机
        使用方式
          嵌入式计算机
          桌面计算机
          服务器
        结构
          冯诺依曼结构
            由五大硬件组成
            采用储存程序的方式，程序和数据存放在同一寄存器中
            指令在存储器中按其执行顺序存放，由程序计数器指名要执行的指令地址
            以运算器为中心
          非冯诺依曼结构
          现代微型计算机系统
            以储存器为中心
            总线
            I/O接口
              通用可编程接口
            三级存储结构（总称为内存）
              ROM（存储BIOS）
              RAM
              Cache
        规模
          超级计算机
          大型机
          服务器
          微型机
          单片机
      系统组成
        硬件
          主机
            CPU
              运算器
              控制器
            储存器
              ROM
              RAM
          外部输入输出设备
        软件
          系统软件
          应用软件
      性能指标
        字长
          字长越长，性能越高
          包括32位，64位等等
          8086字长位为16位
        内存容量
        运算速度
          计算方法
            最短指令法（以执行时间最短的指令计算速度）
            平均速度
        时钟频率
  微型计算机系统基础
    指令系统
      程序设计语言
        机器语言
          由机器指令构成
        汇编语言
          由汇编指令构成，汇编指令与机器指令一一对应
          汇编程序
            将汇编源程序翻译成机器语言的过程
        高级语言
          也叫算法语言
      处理体系结构
        复杂指令系统计算机（CISC）
          有庞大的指令系统，复杂的指令格式
          CPU结构复杂，设计成本高
          “二八定律”
            简单指令占指令总数的20%，但在程序中出现的频率占80%
          Intel、AMD
        精简指令集计算机（RISC）
          仅支持简单指令
          通过减少指令和规范化的方式，大幅度的提高了计算机的总性能
          IBM、ARM、MIPS
    微型计算机系统结构
      系统结构
        微处理器
        微型计算机
        微型计算机系统
      主要寄存器
        指令寄存器（IR）
          保存当前指令
          指令译码器
            对指令寄存器中的操作码进行译码，产生控制信号
        程序计数器（PC）
          保存下一条将要执行的指令的地址
          执行时自增
        地址寄存器（AR）
          保存CPU当前访问的主存储单元地址
        数据寄存器（DR）
        通用寄存器（R0~Rn）
        程序状态寄存器（PSW）
          保存状态条件
          包括进位/借位、溢出、中断等
      储存器与地址分配
        I/O端口编址
          统一编址
            在内存中划出一定区域用于I/O端口
          独立编址
            I/O独立于内存
            Intel主要采用此种方式
        流水线技术
        哈佛结构
        Cache计数
        虚拟储存管理技术
        多核处理器结构
    输入/输出系统
      信息交换方式
      程序中断方式
        基本思想
          当CPU需要进行I/O操作时，先启动外设工作，然后继续执行主程序；外设准备好后，发出中断请求，CPU暂停主程序，执行I/O操作；I/O操作完成后，CPU返回继续执行主程序
        中断源
          内部中断
          外部中断
        处理过程
          中断请求
          中断响应
          中断处理
          中断返回
    嵌入式系统
      可裁剪软硬件的专用计算机系统
      特点
        专用性强
        技术融合
        集成度高
        实时性好
        资源受限
      交叉编译
        编译出来的程序可以放在另一种体系结构的目标平台上运行，但是在本平台上不行
        举例：x86（宿主机）可以编译ARM（目标机）程序并移植到ARM平台上运行，但是这个程序不能在x86平台上运行
  8086微处理器
    极端重要
    CPU内部结构
      总线结构部件（BIU）
        段寄存器
          CS：代码段
          DS：数据段
          SS：堆栈段
          ES：附加段
        指令指针寄存器（IP）
          下一条指令对现行代码段基址的偏移量
        20位地址加法器
        6字节指令队列缓冲器
          BIU从内存中取指令，放在指令队列中，EU从其中取指令执行
      执行单元（EU）
        数据寄存器
          AX：累加器
            所有I/O指令用AX与外设传送信息
          BX：基址寄存器
          CX：计数器
          DX：数据寄存器
            与AX联合使用
        地址指针与变址寄存器
          SP：堆栈指针
          BP：基址指针
          SI、DI：源地址，目的地址指针
        算术逻辑单元ALU
        标志寄存器（9位）
          状态标志（6位）
            CF：进位标志位
            PF：奇偶标志位
              运算结果中“1”的个数为偶数则PF=1
            AF：辅助进位标志位
              第3位向第4位进位/借位时AF=1
            ZF：零标志位
              运算结果为“0”时ZF=1
            SF：符号标志位
              与运算结果的最高位相同，补码运算时能反映符号
            OF：溢出标志位
              补码运算有溢出时OF=1
              字节运算为-128~127，字运算时为-32768~32767
          控制标志（3位）
            DF：方向标志位
              DF=0时地址加1，反之减1
            IF：中断允许标志
              IF=1允许中断
            TF：跟踪标志
              TF=1为单步执行方式
          16位只用了9位
    存储器组织
      寻址空间
        20位，寻址能力1MB
      组织及寻址
        按字节编址
          从00000H到FFFFFH
        规则字
          地址=N+1（奇地址）存放D15-D8（高字节）
          地址=N（偶地址）存放D7-D0（低字节）
      存储器结构
      存储器分段结构
        使用两个16位的数据表示20位地址
        段地址：偏移地址
          段起始地址低4位必须为0，高16位为段地址（或段基地址）
        物理地址=段地址×10H+偏移地址
    工作周期
      指令周期
        执行一条指令的时间
      总线周期
        对存储器或者I/O端口进行一次读/写的过程
        四个组成（合成一个总线周期）
          T1
          T2
          T3
          (Tw)
            等待状态：可以没有或若干个
          T4
          (Ti)
            空闲状态：可以没有或若干个
      时钟周期
        时钟频率的倒数
      一个指令周期由若干个总线周期组成，一个总线周期由若干个时钟周期T组成
    中断系统
      中断类型
        硬件中断
          可屏蔽中断INTR
            高电平触发
          非屏蔽中断NMI
            固定中断类型码为2
            上升沿触发
        软件中断
      中断向量表
        从00000H到003FFH，共1KB
        一个中断类型码对应4B空间
        中断向量表中储存中断程序地址
        以类型码0（除法错）为例，000H-001H储存中断程序的IP偏移量，002H-003H储存中断程序的CS基地址
      中断步骤
        1. 由INTR或NMI或软件发起中断请求
        2. 判断IF是否为1，即允许中断
          NMI请求无需判断
        3. 发出中断类型码
          INTR的中断类型码需要由硬件向数据总线发出
          NMI中断类型码固定为2
          软件可由INT n发出中断类型码
        4. 标志寄存器入栈、IF和TF清零、寄存器CS和IP入栈
        5. 调用中断类型码在中断向量表中对应的入口地址，执行中断服务程序
        6. 返回断点，进行出栈
    外部引脚
      公用信号
        AD15-AD0
          地址/数据总线
        A19/S6-A16/S3
          地址/状态总线
        BHE'/S7
          高数据总线允许/状态复用
        MN/MX'
          最小/最大模式控制
        RD'
          读控制
        TEST'
          等待测试控制
        READY
          等待状态控制
        RESET
          系统复位
        NMI
          不可屏蔽中断请求
        INTR
          可屏蔽中断请求
        CLK
          系统时钟
        VCC
          +15V电源
        GND
          接地
      最小模式信号
        HOLD
          保持请求
        HLDA
          保持响应
        WD'
          写控制
        M/IO'
          与存储器/IO设备传输
        DT/R'
          数据发送/接收
        DEN'
          数据允许传输
        ALE
          地址锁存允许
        INTA'
          中断响应
      最大模式信号
        S2'、S1'、S0'
          代码组合产生存储器/IO端口的控制命令
        QS1、QS0
          代码组合控制队列指令
        RQ'/GT1'、RQ'/GT0'
          请求/允许总线访问控制
        LOCK'
          总线优先权锁定控制
  寻址方式与指令系统
    汇编语言格式
      标号:操作码 操作数;注释
    寻址方式
      立即寻址
        举例
          MOV AX, 251
MOV AL, '5'
MOV AL, 0E8H
      寄存器寻址
        可以使用16位通用寄存器、8位通用寄存器、段寄存器、FLAGS标志寄存器
        举例
          MOV AX, CX
MOV DL, BL
      存储器寻址
        通过逻辑地址计算而来
        指令地址码给出的地址，称为形式地址或位移量（DISP）
        直接寻址
          举例
            等价案例
MOV AL, TABLE
MOV AL, [TABLE]
MOV AL, [1000H]
            等价案例
MOV AL, ES: TABLE
MOV AL, ES: [TABLE]
MOV AL, ES: 1000H
MOV AL, ES: [1000H]
        寄存器间接寻址
          [基址寄存器名或变址寄存器名]
          操作数的有效地址被放在一个寄存器中，可以使用EA=[BX]/[BP]/[SI]/[DI]
          这些基址寄存器或变址寄存器需要加括号，为了与寄存器寻址区别
          BX, SI, DI的默认段基地址是DS，BP的默认段基地址是SS
          举例
            MOV AX, [BX]; 物理地址=DS×10H+BX
MOV AL, [BP]; 物理地址=SS×10H+BP
MOV AX, ES: [DI]; 物理地址=ES×10H+DI
        寄存器相对寻址
          位移量[基址寄存器名或变址寄存器名]
位移量±基址寄存器名或变址寄存器名
          举例
            MOV AX, 20H[SI]
MOV CL, [BP+2000H]
MOV AX, TABLE[SI]
MOV AL, ES: TABLE[SI]
        基址加变址寻址
          [基址寄存器名][变址寄存器名]
[基址寄存器名+变址寄存器名]
          组合有规定为EA=[BX]/[BP]+[SI]/[DI]
          举例
            MOV AX, [BX][SI]
MOV AX, [BX+SI]
        相对基址加变址寻址
          位移量[基址寄存器][变址寄存器]
[基址寄存器+变址寄存器+位移量]
          组合规定为EA=[BP]/[BX]+[SI]/[DI]+DISP
          举例
            等价指令
MOV AL, TABLE[BX][SI]
MOV AL, TABLE[BX+SI]
MOV AL, [TABLE+BX+SI]
            MOV AX, [BX+SI+20H]
MOV AX, ES: 1000H[BP][SI]
    指令系统
      数据传送指令
        通用数据传送指令
          MOV
            什么可以什么不可以
            MOV不能对直接实现两个存储单元之间地址的传送，但是可以通过两条指令进行传送
            说明
              两个操作数不能同为存储器操作数
              CS不能为目标操作数
              段寄存器之间不能互相传送
              立即数不能直接送入段寄存器
              MOV指令不影响标志位
        堆栈操作指令
          PUSH
            堆栈指针SP自减2
          POP
            堆栈指针SP自增2
          SP越小栈中数据越多
          堆栈的压入和弹出操作必须以“字”为单位进行
          先出栈或进栈，再修改SP
        地址传送指令
          LEA
            有效地址传送指令
            LEA REG, MEM
            将MEM的有效地址传递至REG中
          LDS
            数据段寄存器传送指令
            LDS REG, MEM
            从MEM中取出四个字节的数据，将前两个字节（低16位）送入REG中，将后两个字节（高16位）送入DS中
          LES
            附加段寄存器传送指令
            LES REG, MEM
            与LDS功能类似，只不过将高16位送入了ES之中
        数据交换指令
          XCHG
            必须有一个是寄存器寻址方式
            所有段寄存器和IP不允许使用XCHG
            不影响标志位
        换码指令
          XLAT
            无操作数指令
            不影响标志位
            将[BX+AL]内存单元中的一个字节送入AL之中
            步骤
              1. 在数据段建立代码转换表，并将该表首地址的偏移地址存入BX寄存器
              2. 将带转换的数据在表中对应的位移量存入AL寄存器
              3. 执行XLAT指令，将[BX+AL]内存单元中的一个字节送入AL中
        标志寄存器传送指令
          全部面向16位只用了9位的标志寄存器
          LAHF
            将FR的低8位送入AH中
          SAHF
            将AH送入FR的低8位中
          PUSHF
            FR压栈
          POPF
            出栈至FR
        输入/输出指令
          IN
          OUT
          使用的数据寄存器必须是AL或AX；间接寻址的寄存器必须是DX
      算数运算指令
        加法与减法指令
          ADD DST, SRC
            不带进位加法指令
          ADC DST, SRC
            带进位加法指令
            即DST←SRC+DST+CF
          INC DST
            自增指令
          SUB DST, SRC
            不带借位减法指令
          SBB DST, SRC
            带借位减法指令
            即DST←DST-SRC-CF
          DEC DST
            自减指令
          NEG DST
            取负指令
            所有位（包括符号位）按位取反加1
          CMP DST, SRC
            比较指令
            设置标志位
          对6个标志位均有影响
          计算机中储存的负数就是补码
        乘法与除法指令
          IMUL SRC
            带符号乘法
            字节运算 AX←AL×SRC
            字运算 (DX:AX)←AX×SRC
          MUL SRC
            不带符号乘法
          IDIV SRC
            带符号除法
            字节运算
AL←AX/SRC的商
AH←AX/SRC的余数
            字运算
AX←(DX:AX)/SRC的商
DX←(DX:AX)/SRC的余数
          DIV SRC
            不带符号除法
          只改变OF和CF，其他表示位无定义
          对于CF、OF而言，若结果的高半部分有非符号有效数字，则CF=OF=1，否则CF=OF=0
        符号扩展指令
          CBW
            将AL的符号扩展到AH中，扩展后，AH只有00H和0FFH两种可能
          CWD
            将AX的符号扩展到DX中，扩展后，DX只有0000H和0FFFFH两种可能
        十进制算术运算指令
          DAA
            压缩BCD加法调整
          DAS
            压缩BCD减法调整
          AAA
            非压缩BCD加法调整
          AAS
            非压缩BCD减法调整
          AAM
            非压缩BCD乘法调整
          AAD
            非压缩BCD除法调整
          除AAD外，其他调整指令执行之前必须先进行一次对应的二进制算术指令（AAM只能执行MUL），并将结果存入AL之中
          AAD在除法运算之前执行
        逻辑运算指令
          AND
          OR
          XOR
          TEST
            与AND完全相同，但不会把结果送入DST
          NOT
            不影响标志位
          均是按位进行运算
          除NOT外， 其余的指令都使CF=OF=0，按运算结果设置SF、PF、AF，对AF无定义
        移位指令
      串操作指令
      程序控制指令
        转移指令
          直接转移指令
            JMP
              段内直接转移
                JMP SHORT OPR
                JMP NEAR PTR OPR
              段内间接转移
                JMP OPR1
              段间直接转移
                JMP FAR PTR OPR
              段间间接转移
                JMP DWORD PRR OPR
          条件转移指令
            简单条件转移指令
              JC、JNC、JS、JNS、JO、JNO、JZ/JE、JNZ/JNE、JP/JPE、JNP/JPO
            无符号数条件转移指令
              JA/JNBE、JAE/JNB、JB/JNAE、JBE/JNA
            带符号数条件转移指令
              JG/JNLE、JGE/JNL、JL/JNGE、JLE/JNG
            都是具有SHORT属性的段内相对转移
          循环控制指令
            LOOP OPR
              CX自减，CX不为0时，转到OPR
            LOOPZ/LOOPE OPR
              CX自减，CX不为0且ZF=1时，转到OPR
            LOOPNZ/LOOPNE OPR
              CX自减，CX不为0且ZF=0时，转到OPR
            JCXZ OPR
              CX=0时转到OPR
        子程序调用与返回
          CALL OPR
            段内调用
          CALL FAR PTR OPR
            段间直接调用
          CALL DWORS PTR OPR
            段间间接调用
          RET
RETF
            段内/段间子程序返回
          RET n
RETF n
            带偏移量n的段内/段间子程序返回
      处理器控制指令
        HLT
          暂停
        WAIT
          等待
        LOCK
          总线锁定前置
        NOP
          空操作
        ESC DATA, SRC
          外部设备换码
  汇编语言程序设计
    汇编语言过程
      asm→obj→exe
    汇编语言数据
      常量
        举例
          COUNT EQU 3
COUNT = 3
      变量
        定义伪指令
          DB, DW, DD, DF, DQ, DT
          从一个字节到十个字节
        DUP操作符
          使用格式 N DUP (EXP)
          代表将定义EXP的操作重复N次
          举例
            DATA3 DB 2 DUP(2 DUP(4), 15)
            定义结果，04H, 04H, 15H, 04H, 04H, 15H
        合成运算符PTR
          可以临时改变变量类型
          举例
            对于字节变量AB和字变量AW
            MOV CX, WORD PTR AB
MOV CL, BYTE PTR AW
均可以成立
        三种属性
          段属性
            SEGMENT
          偏移属性
            OFFSET
          类型属性
            TYPE
    运算符与表达式
      算术运算符
        +、-、*、/、MOD
      逻辑运算符
        AND、OR、XOR、NOT
      关系运算符
        EQ、LT、LE、GT、GE、NE
      取值运算符
        SEG、OFFSET、TYPE、LENGTH、SIZE
      合成运算符
        PTR
        THIS
          举例
            组合使用
            DNUM EQU THIS WORD
NUM DB 1, 3, 5, 7
          新的符号名称指向下一条语句
    伪指令
      不在程序运行期间执行，而在汇编期间由汇编处理，相当于一个程序运行的预处理
      符号定义伪指令
        EQU
          不允许重复定义
        =
          允许重复定义
        LABEL
          举例
            DATW LABEL WORD
DATB DB 20 DUP(0)
            两条语句一起使用，其中DATW是DATB的别名，他们拥有着一样的存储空间，但是DATW是以字形式存储的，但是DATB是以字节形式存储的
        PURGE
          解除定义伪指令
      段定义伪指令
        段寄存器指派伪指令
          ASSUME 段寄存器: 段名[，段寄存器: 段名，……]
          指派哪个段对应哪个寄存器
      地址计数器与对准伪指令
        取当前地址伪指令
          $
        移动地址指针伪指令
          ORG
            指定当前存放地址
        EVEN
          使下一变量开始于偶字节
        ALIGN
          使下一变量或指令开启与特定位置
        .RADIX
          基数控制伪指令
            将默认基数从十进制改为其他进制，改后写十进制数要加D
    系统功能调用
      方法
        INT n
      BIOS调用
        固定的程序调用
      DOS调用
        将功能号移入AH中，再调用INT 21H
        功能号
          01H
            键盘单字符输入AL
          02H
            输出AL单字符
          07H、08H
            不带显示的单字符键盘输入AL
            07H对Ctrl+C和Tab无反应
          09H
            字符串输出DS:DX
          0AH
            字符串输入DS:DX
          4CH
            返回操作系统
    宏指令
      定义
        宏指令名 MARCO[形式参数1, ...,形式参数n]
... ;宏指令体
ENDM
      调用
        宏指令名 [实际参数1, ..., 实际参数n]
    程序设计举例
      顺序结构程序设计
      选择结构程序设计
        可以采用跳跃表代替case
      循环结构程序设计
      子程序设计
        定义
          过程名 PROC[NEAR/FAR]
... ; 过程体
RET
过程名 ENDP
        调用
          CALL 过程名
        参数传递
          使用通用寄存器、存储单元、地址表、堆栈进行参数传递
        最好需要保护现场和恢复现场
  半导体存储器
    概述
      性能指标
        存储容量
          存储器芯片容量=存储单元数×位数
        存取周期
        功耗
        可靠性
        集成度
      分级结构
    随机读/写存储器
      SRAM组成
      读出过程
        1. 地址码A0-A11加载到RAM芯片的地址输入端，通过译码选中某一存储单元，经过一段时间，出现在I/O端口的右向输入端。I/O电路对信号进行放大、整形，送至输出缓冲寄存器上。但由于缓冲寄存器的三态特性，此时一般不能直接送至DB
        2. 送上地址码的同时，还要送上读/写控制信号和片选信号，R/W'=1、CS'=0，这方才能将信息读出
      写入过程
        1. 地址吗加在RAM芯片的地址输入端，选中响应存储单元
        2. 将要写的数据放在DB上
        3. 加上片选信号CS'=0以及写入信号R/W'=0，就可以写入存储单元了
      SRAM芯片举例
        2114
          容量：1K×4位
          寻址空间：10条数据线，可寻址1024个存储单元，同时有4条双向数据线，相当于4倍
        6264
          容量：8K×8位
          共有13条地址线
      SRAM与CPU的连接
        位扩展法
          使用8K×1的芯片扩展成为8K×8的芯片
          所有芯片没有片选区别，都被选中
          连接8条数据总线
          扩展了字的位数
        字扩展法
          使用16K×8的芯片扩展成为64K×8的芯片
          需要使用译码器对片选段进行控制，保证每时每刻只能读写一块芯片
          片选需要使用多余的地址选择线进行控制
        字位同时扩展
      在连接中，A0-An用来传送地址，即需要选择哪个地址单元的数据，D0-Dm用来传送数据，即选择的m-1位数据通过这些导线输入或输出CPU
  输入/输出技术
    输入/输出接口
      分类
        按通用性
          专用接口
          通用接口
        按传送格式
          并行接口
          串行接口
        按可否编程
          可编程接口
          不可编程接口
        按时序控制方式
          同步接口
          异步接口
      I/O端口
        数据端口
        状态端口
        控制端口
      标准输入输出语句
        IN AL, DX
OUT DX, AL
  常用接口芯片
    8255
      引脚
        一起控制如何读写
        端口A
          PA7-PA0
          由A组控制
          可以工作在方式0、1、2
        端口B
          PB7-PB0
          由B组控制
          可以工作在方式0、1
        端口C
          PC7-PC4
            由A组控制
          PC3-PC0
            由B组控制
          只能工作在方式0
        D7-D0
          双向三态数据线
          传送数据、控制字和状态字
          直接与系统数据总线相连
        RESET
        A1、A0
          端口选择信号
          A1 A0
0 0 A口
0 1 B口
1 0 C口
1 1 控制寄存器（只能写）
        RD'
          读信号
        WR'
          写信号
        CS'
          片选信号
      运行逻辑
        1. CPU通过D7-D0的数据总线，在A1=A0=1的状态下，写入控制寄存器
        2. 改变A1和A0与RD'和WR'至目标状态
        3. 通过数据总线和目标状态与A、B、C上的元件传送数据
      工作方式
        方式0
          基本输入/输出方式
            无需使用握手信号
        方式1
          选通输入/输出方式
        方式2
          双向传送方式
        控制字
          D7=1（始终为1）
          D6
            与D5联合控制A口工作方式
          D5
            与D6联合控制A口工作方式
          D4控制A口输入输出
          D3控制C口高4位输入输出
          D2控制B口工作方式
          D1控制B口输入输出
          D0控制C口低4位输入输出
          1代表输入，0代表输出