微机原理基础

一、数值信息

编码

  1. 编码是指将多种形式转换成一种特定形式(高低电平去表示图像、数字、音频等)
  2. BCD:以4位二进制数表示一位十进制数,再拼凑起来表示十进制数。
  3. 一个存储单元常有8个二进制码、相当于2个BCD
  4. ASCLL:有效位只有7位,一位符号位。校验:约定8位ASCLL中的1的个数是奇/偶,若符合,则去掉符号位的ASCLL为传输的字符。
  • 位、比特、字节
    1. 带宽即位、即比特。1B(Byte)=8b
    2. 1K=1024b;1KB=1024*8b 例:16位的寄存器:(2^16)/1024=64K

  1. 无符号数:
    • 首位也算在所表示的真值中。每当乘或除2时,二进制整体向左/右移动一位。
    • 溢出判断:最高位有向下一位的进位时,溢出到标志寄存器中。
  2. 有符号数:
    • 原码:第一位符号位,其余数值位。但0的表示不唯一,不用。
    • 反码:当原码表示复数时,原码符号位不变,其余取反。0不唯一,不用。
    • 补码:正数时,原码=反码=补码;复数时,补码=反码+1。0唯一,计算机使用。(补码使减法等效于加法于移位的操作,省钱省空间。X-Y=[X+(-Y)]补=[X]补+[-Y]补)(特殊:补码10000000表示-128);补码表示负数时,想求其真值可通过再求补码的方式,而不是通过-1取反。
    • 溢出:次高位进位异或最高位进位,为1即溢出。

逻辑运算

  • 与算术运算的区别:逻辑运算不产生进位

  • 在这里插入图片描述

    在这里插入图片描述

  • 在这里插入图片描述

    在这里插入图片描述

  • 异或 相同为0相异为1

    在这里插入图片描述

  • 同或 是对异或进行一个非运算

二、微型机基本原理

构成

  1. CPU

    • 运算器、寄存器(如5+4+3=9+3,9先放在CPU中)、控制器
  2. 存储器

    • 分为内存储器(内存条)和外存储器(U盘-脱机外存、固态/机械硬盘-联机外存)
    • 存储方式:RAM随机存储器(需要后备电源-大部分电脑的内存都是);ROM只读存储器(不需-U盘)
  3. I/O接口

    • 作用:1.协调CPU的高速与外设的低速(数据缓存)。2.作为不同信号的翻译。
  4. 总线

    • what:是导线与控制、驱动电路的集合。
    • why:信息的总类主要有三:地址、数据、控制。因此总线也有不同的传输单元。

工作过程

  1. 指令需要放在内存中(于CPU直接相连)
  2. 指令执行:CPU取指令-CPU分析指令-CPU取数据-CPU执行指令-CPU送回数据(取数据和送回不一定发生)(分为顺序于并行执行)
  3. 并行在于高效地利用了总线(分析指令时,让总线去取下一条指令-总线忙碌)
  4. 冯·诺依曼机:加入了程序计数器PC,用于存储内存中指令所在的地址,每次传给地址寄存器AR后,PC自动加一。之后总线把地址由AR传给内存,并将其地址译码。CPU发出读命令。由数据总线取出指令操作码传至数据寄存器DR-指令寄存器IR-指令译码器IL (顺序存储)

8088/8086

  • 区别:主要体现在外部的数据总线的宽度,前者有8位,8086有16位
  1. 结构

    • 为什么可以并行?因为BIU中指令队列缓存器与(?)实现的指令与数据预取加之现在软件对转移、循环指令的处理使得流水线“不断流”。
    • 为什么可以存储分段?好处?
    • 支持协处理器。Q:什么是协处理器?
  2. 工作模式

    • 最小模式/最大模式:1.切换方式:MN/MX引脚;2.区别:否/是使用协处理器。
  3. 引脚

    • 地址位有16位,AD0~AD7位地址和数据的分时复用线(地址先、数据后)。A8~A15为8位的地址线。A16~A19分时复用地传输地址与#状态信号(看ALE)。
    • 引脚的上划线#表示低电平(0)有效
    • #DEN数据允许信号,IO/#M,区分接口/存储器访问
    • #WR读,#RD写,不可同时为1。针对储存器或IO
    • DT/#R是CPU的写/读
    • ALE地址锁存信号,1时表示已经取到地址,准备去取数据
    • 总线保持信号:
    • 中断信号:
  4. 寄存器
    在这里插入图片描述

    • 通用寄存器:用于暂时存储运算的数据
      • 都是16位的,可以拆分成两个8位,但只有16位可以存地址,因为8088是16位的,它最小的地址也是16位的
      • AX累加器:AH、AL
      • BX基地址寄存器
      • CX计数寄存器
      • DX数据寄存器:存I/O地址或存16位数据。
    • 标志寄存器FLAGS:反应运算结果与特征
      • CF、PF、AF、ZF、SF、OF、DF、IF、TF
    • 段寄存器:用于存放段地址
      1. 类型:CS-代码段寄存器、DS数据、ES附加、SS堆栈~
      2. 同一个内存单元可以分属于多个段(分时复用;储存时用的是逻辑内存-会浮动)
      3. 20位逻辑段表示 eg:

在这里插入图片描述

  1. 堆栈段:栈底→栈顶(指针SP)→栈首/段首;SS的值是栈首地址,栈顶是偏移地址;从下向上存入。
  • 扩充内存
    • 如何让16位带宽的处理器管理1M的地址?(1M需要20位)
      1. 每单元运用16位段(基)地址+16位段内地址可以获得32位的存储空间(利用分时复用)。
      2. 如何压缩?每单元用前段基地址*16(二进制右移4位)+偏移地址表示,即段前16+4=20位,对齐相加也20位
  1. 总线

    • 应用多总线通道的原因
      1. 单通道使得接口与内存共用一条到CPU的通道,会造成等待与争抢
      2. 双通道导致内存与接口没有通道,导致每次都需要通过CPU
    • 基本功能
      1. 数据传送
        • 同步:同时传给多个,不需要知道对方是否收到
        • 异步:一个个传,需要应答信号
      2. 仲裁控制
        • 用于处理争抢
      3. 出错处理
      4. 总线驱动
    • 总线带宽(单位时间的可传输数据量)=位宽(bit)*工作频率

三、80X86指令系统

数与地址

  1. 指令形式:操作码 目标操作数,源操作数

  2. 源操作数分类:

    • 立即数 MOV AL,22H
    • 来自寄存器(速度最快-在cpu中) MOV AH,AL
    • 来自存储器(速度最慢):MOV AL,[1200H] (ps:带有[]必在内存中,1200H表示偏移地址,AL是8位故取8位地址即1字长,若取到AX,取出16位)
  3. 寻址方式:表示了运算对象的来源或去向

    • 立即寻址:源操作数参与到运算中:MOV AX,1200H,MOV AX,'B'(此时,B是字符,ASCLL码为42H)
    • 寄存器寻址:寄存器中的值参与运算:MOV AX,BX
    • 直接寻址:利用[]表明偏移地址,默认在数据段中寻找操作数,可以修改:MOV AX,ES:[1200H]
    • 寄存器的间接寻址
      • 以寄存器中的数值为地址(相当于指针p),MOV AX [BX]
      • 可存储地址的寄存器:BX、BP、SI、DI (除BP默认在堆栈段外,其他都默认数据段)
      • 好处:用BX+1配合循环来减少指令长度。
    • 寄存器相对寻址:使用间接寻址的地址再加上常数表示要寻址的地址 MOV AX,[BX]5(后面那相当于[BX+5])
    • 基址、变址寻址:利用BX、BP作为基址,使它们值不变,改变SI/DI来改变地址。默认寻址段看基址。MOV AX,[BX+SI]MOV AX,[BX][SI]
    • 基址、变址、相对寻址
    • 隐含寻址:操作数为默认,将其省略了

    8086CPU指令

    数据传送

    1. MOV 格式:MOV DST,SRC
      1. 功能:实现数据从右向左传送
      2. 注意:
        • 不能对CS、IP(代码段、指针寄存器)操作
        • 两个段寄存器(CS、DS、SS、ES)间无法传送、段寄存器不可用立即寻址赋值
        • 不允许两个寄存器间传送(即不允许两个数都是间接寻址)
    2. 栈指令
      1. 要求:不可使用立即数(因为栈顶指针按字存储,对源操作数字长有要求)、不能用CS
      2. PUSH 格式 PUSH 源操作数
        • 过程:源操作数有2B及空栈时,SP指向栈底,PUSH后SP=SP-2,将低位传入SP,高位传入(SP+1)
      3. POP 格式 POP 源操作数
        • 过程:SP累加取数
    3. 交换指令 XCHG 格式 XCHG DST,SRC
    4. 查表指令 XLAT 格式 XLAT
      1. 说明:表头需先存放于BX、偏移量需先存于AL
      2. 操作:读出表格数据存于AL (猜测:用于初始化某些表格)
    5. 有符号数的拓展:CBW(8→16)与CWD(16→32 )
    6. 地址传送指令
      1. 同一内存中传送:LEA REG16, SRC
        • 说明:目标操作数需是16位,原操作数可以是表示偏移地址的变量/间接寻址。
        • 传输后,目标操作数相当于指针,当INC(累加)时,是按照一个字节单元累加
      2. 不同内存传送:LES、LDS
    7. 标志位传送
      1. LAHF(load AH form flag) 、SAHF(Store AH to flag)分别是:将flag低八位(flag高八位为空闲位)存到AH、AH存到flag
      2. PUSHF(push flag into stack)、POPF(pop flag off stake)
    8. 输入输出指令
      1. 作用:进行端口地址数据(PORT-以8位立即数表示)与数据累加器(AL/AX)的读入或输出
      2. 输入IN AL/AX,PORT
      3. 输出OUT PORT,AL/AX

    算术运算类

    1. 加法
      1. ADD DST,SCR (DST=DST+SCR)
      2. ADC DST,SCR (DST=DST+SCR+CF)
      3. INC DST +1指令,常用于指针 (不会影响标志位)
    2. 减法
      1. SUB DST,SCR,对标ADD(DST=DST-SCR)
      2. SBB DST,SCR,对标ADC (DST=DST-SCR-CF)
      3. DEC DST,对标INC ,常用于修改计数值
      4. NEG DST 求补指令(DST=0-DST)
      5. CMP SCR1,SCR2 比较指令:执行SCR1-SCR2,仅改变标志位CF(有借位时CF=1)(两操作数相等时ZF=1)
    3. 乘法
      1. 无符号:MUL SCR 。有符号:IMUL SCR
      2. 注意:存放空间需是SCR的双倍字长,如SCR是1B(1字节,8位)则执行后AX=ALSCR;如SCR是2B,则执行后DXAX=AXSCR
    4. 除法
      1. 无符号:DIV SCR。有符号:IDIV SCR
      2. 注意:被除数是SCR的双倍字长:如SCR是1B则AX/SCR后AL为商,AH为余数;如SCR是2B,执行DXAX/SCR,AX为商,DX为余数。

    逻辑运算和移位类

    • 逻辑运算
      1. 逻辑运算对大多标志位无影响,除了每一次操作会使CF、OF为0
      2. AND DST,SRC 结果放到DST中,每次操作都会将CF、OF清0
      3. OR DST,SRC
      4. NOT DST,SRC
      5. 异或 XOR DST,SRC 此外,由于逻辑运算相比数值运算快,因此最好的清零方式是异或自己。
      6. 测试 TEXT DST,SRC 用于测试某位的状态:将两数向与,但结果不返回到DST,可以接着用JZ WATT(当ZF=1时转移)等跳转指令
    • 移位
      1. 目标操作数都为要移位的单元,源操作数都为移位次数
      2. 移位次数需要存放在CL中。当仅移位一次时,1 可直接写出
      3. 向左移位时最高位放入到CF中,右移时最低位送到CF。
      4. 移位指令的分类:非循环/循环、逻辑/算术(区别在于它们用于无符号数/有符号数)、带进位/不带进位、左移/右移
      5. 非循环类(用于实现乘除运算):移动后会补零。具体指令:算术左移/右移:SAL/SAR 、逻辑左移/右移:SHL/SHR
      6. 循环类:相当于整个数在转圈。分类:带进位(相当于CF的值放在最左/最右,一起转圈),不带进位(目标数转圈,但从最高/低位跑到最低/高位的数拷贝一份给CF)具体指令:带进位左/右:RCL/RCR; 不带进位左右:ROL/ROR
      7. 算术移位(有符号数移位):将最高位(符号位)copy,待整体移位后再把最高位附上原来的数值。

    串操作

    • 初始化
      1. 设立源串与目标串:源串一般放在数据段,指定SI指针的数据。目标串必须放在附加段,指定指针DI。(除非进行串重设)
      2. 串需指定方向:DF=0表示增地址方向、DF=1表示减地址方向
      3. 串长度由CX指定。
      4. 重复前缀:如CX不断递减,当CX=0时停止(串操作实际上还是字节操作的重复执行,毕竟总线是有带宽的)具体有指令REP(CX!=0)、REPE/RRPZ、REPNE/REPNZ
    • 指令
      1. 串传送 MOVS DST,SRC(需要串重设,即初始化工作) 、MOVSB(按字节)、MOVSW(按字传) 如: REP MOVSB是将SI所指的1字节单元数据放到DI所指位置。
      2. 串比较:CMPS DST,SRC、CMPSB、CMPSW。与CMP一样:相减→看CF位。例如:REPE CMPSB;JZ STOP;...;STOP :HLT (两数相等是ZF=1,REPE当CX=0或ZF=0时取消重复,第二条指令意味着ZF=1时跳转。)
      3. 串扫描:SCANS SRC(查附加段中是否有该数)、SCANSB(源操作数在AL)、SCANSW(源操作数在AX)。串扫描与CMPS类似,相减→看ZF位。
      4. 串装入:LODS SRC(同样地,需要串重设,不常用)、LODB(将[DS:SI]装入AL)、LODW(将[DS:SI]装入AX)。可以用于显示/输出到外设。
      5. 串存储:STOS SRC、STOSB(AL传到[ES:DI])、STOSW(AX传到[ES:DI])在这里插入图片描述

    程序控制

    转移

    • 前言:
      1. CS(代码段寄存器)用于存放指令的地址,将其左移4位(变为段基地址),加上存在IP(指令指针)中的偏移地址,即可得到待执行指令的地址。
      2. 程序控制的要义在于改变CS、IP
    • 分类:无条件转移/有条件转移(条件一般指标志位)、近地址/远地址(即:段内/段间)、直接/间接(体现在执行的源操作数上,一个是立即数,一个是寄存器)
    • 无条件:
      1. 段内直接:JMP Label LabelLabel是个在程序中出现两次的标号,偏移量=Label所指指令的地址-IP,执行后IP = IP+偏移量
      2. 段内间接: JMP BX (源操作数需是16位的)需要实现定义BX的值,执行后IP = BX
      3. 段间直接:JMP FAR Label
      4. 段间间接: JMP DWROD PTR[BX] 由于源操作数需是4字节数(4*8=32位),高16位存CS、低16存IP,因此要用DWORD PTR[指针],取出该地址下的数据作为地址。
    • 条件转移: 示例:JZ LabelZF=1时跳转。
      在这里插入图片描述

    循环

    • 循环经由CX判断次数,分为无条件循环/有条件循环(此处条件是指ZF),只能将IP在-128~+127的范围内移动
    • 无条件循环LOOP Label,会自动DEC CX
    • 有条件循环LOOPZ Label,继续循环的条件:CX!=0 && ZF = 1 .可类推LOOPNZ Label

    调用

    • 调用子程序其实就是把指针修改到子程序的入口处,之后一路执行子程序,子程序最后都要写一个RET指令,用来返回断点。
    • 所谓断点,就是主程序发生跳转的位置,在调用前,断点地址会被存入堆栈段保护起来。
    • 段内调用:CALL TIMERCALL WORD PTR[SI] 前者时直接调用,后者是间接调用
    • 段间调用:CALL FAR TIMERCALL DWORD PTR[SI] 前者时直接调用,后者是间接调用

    中断

    • 区别于子程序调用的地方:1.子程序近地址调用不需要存段基地址,而中断都要存下段基与偏移地址(还要存flags)。2.中断被认为是异常,不知道发生的时间。
    • 指令 INT n n是一个立即数,0~255H范围内,成为中断码。
    • 执行前:系统会将flags、段基地址CS、偏移地址IP依次压入堆栈段中。
    • 执行时:CPU按中断码去取指令IP=n*4;CS=(n*4)+2;
    • 结束:中断子程序的出口是IRET

    处理器控制

    • 是CPU对自己内部的控制 在这里插入图片描述

四、程序设计

前言

  • 每个.ASM都要经历:编译(生成obj)-链接(生成.exe)的过程。
  • 语句分为两类:指令语句、指示性语句(CPU不执行)。
    1. 指令语句的构成:[标号:] 助记符 操作数 [;注释] 例如 NEXT: CMP SUM,100
    2. 指示性语句:[名称] 伪助记符 操作数 [;注释] 作用:用于提前声明空间等预处理操作。如DATA1 DB 30H

指令助记符

取值类

  • SEG 取出段地址
  • OFFSET 取偏移地址
  • TYPE 取类型
  • LENGTH 取长度
  • SIZE 取大小

伪指令助记符

  • 数据定义:DB、DW、DD声明存储空间 ,可配合重复运算符定义: DATA1 DB 5 DUP(?)

  • 符号定义:用一个符号表达一个数/符号,符号名 EQU 表达式特点:只可以定义一次、不占用内存空间 如:CONSTANT EQU 100

  • 段声明:

    段名 SEGMENT
    			ASSUME 寄存器:段名
    			...
    段名 ENDS
    		END
    
    1. 段定义 段名 SEGMENT...段名 ENDS 段名是一个符号地址,作为源操作数时,它是个立即数。
    2. 说明当前定义的段的性质 ASSUME 段寄存器:段名,段寄存器:段名,…
    3. 段完整的使用方式是:段定义-声明类型-写入寄存器在这里插入图片描述
  • 结束:END标志汇编程序的结束。

  • 过程(子程序)定义:

    过程名 PROC [类型]
    			PUSH 寄存器 ;不一定写,用于保护数据
    			...
    			PUSH 寄存器 ;不一定写,用于保护数据
    			RET
    过程名 ENDP
    
    1. 调用时,用CALL 过程名,原理与RET一样是修改CX、IP
    2. 类型有NEAR、FAR,主要看调用处和过程是否在同一个代码段中。
  • 宏定义:很像高级语言了的函数定义!宏与过程的不同之处在于: 宏需要写在主程序中,不能跨程序。

    宏命名 MACRO <形式参数>
    		...
    		ENDM
    
  • 调整偏移量指令:ORG 下个偏移量 使得下一个定义的变量偏移地址改变。

操作数

运算符

  • 重复:重复次数 DUP(表达式)
  • 合成(将某变量作为某类型使用):类型 PTR 表达式 类型可以是BYTE、WORD之类

DOS系统功能调用

前言

  • DOS与BIOS一样都是嵌在ROM中
  • 对DOS的调用相当于产生中断:INT 21H;DOS的功能号需事先存放于AH中

DOS的输入输出

  • 凡是输入都会存放在AL中,输出时是输出存放在DL的数据

  • 字符串输出/输出会用到缓存区,由于缓存区的容量是用一个字节变量表示,因此,字符串长度最多为255

  • 定义字符串需要以‘$’结尾,若输入字符串,还需要填上功能号‘0A’(输入字符串)‘0D’(以回车结束)如

    MESS DB 'Plz input:', 0DH , 0AH, '$' 
    BUFF DB 20,?,20,DUP(?) ;BUFF的第一个单元存放着长度(即20的ASCLL),第二个单元存放着实际敲下的(目前是?)
    

五、半导体存储器与接口技术

概述

  • 微机中的存储器(底层→顶层):通用寄存器组及栈(ROM\RAM→都属半导体存储器)、高速缓存(Cache)、主存储器、联机外存、脱机外存
  • Cache也称‘快表’,用于协调CPU与主存之间的传输速度差距。主存中最常用的指令会被映射到Cache中。目的:加快访问速度
  • 虚拟存储器系统:由主内存和部分磁盘构成,可以加大存储空间。
  • 半导体存储器的容量指标=单元个数*每单元位数

内存单元编址

  • 地址的高位为片选位,用于选择存储的范围,可由译码电路更改。

存储器接口

在这里插入图片描述

RAM

  • A?表示地址线、D?表示数据线;#OE输出(读)允许,#WE写允许;CS片选
  • 全地址译码:以CPU的8根地址线(A?)作为译码器的输入,让它们仅在某一状态下通过译码器输出低电平
  • 部分地址译码:用少于8根的地址线作为译码器的输入

ROM

  • 读取随意,写操作需要脉冲与电压
  • 擦除需用紫外光

Flash

  • 通过寄存器状态来确定读写操作
  • 擦除有:字节、块、片擦除。擦除挂起(暂停)。

六、输入输出技术

  • 16
    点赞
  • 88
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值