微机原理与接口技术--西安电子科技大学-笔记一
程序员文章站
2022-05-13 23:51:17
...
微机原理与接口技术—西安电子科技大学
绪论
微型计算机系统组成
- 硬件子系统与软件
- 早期计算机硬件组成–ALU-----控制器控制ALU运算–ALU运算的数据
- 存储器中的数据被控制器控制器送到ALU
- 输入设备(IO)-----控制器控制输入设备
- 信息------数据信息、控制信息、地址信息
- 总线-----用来传送信息的通道
- 数据总线(DB)、地址总线(AB)、控制总线(CB)
- 现代微型计算机硬件组成
- 引脚------复用引脚–分时复用
- 指令-----一种二进制代码(机器码)
- 存储器按字节组织的-------寻址-----地址总线条数的多少----数据总线----可管理的数据的大小
计算机中的数制和码制
- 十进制 <-----> 二进制 (字长n=8)
- 逼近法-----位置加权法
- 十进制 <-----> 十六进制
- 在程序设计当中,都会遇到把十进制转换成二进制
- 二进制 <-----> 十进制 (除10取余法)
- 比较法
二进制数的运算
- 算数运算 ±*/
- 字长n 8–字节,16—字,
- 8位寄存器----暂存数据
- AX(16) BX CX DX------AH AL
- 助记符 目的操作数 源操作数
- 数字0打头
- 结果溢出
- 处理器状态字寄存器PSW----标志寄存器----运算才可能影响PSW
- 逻辑运算
- 与 AND DST,SRC 应用场合:位清零AND0,有些位置不变
- 或 OR DST,SRC 应用场合:位置1Or1,某些位置不变
- 异或 XOR DST,SRC 应用场合:取反XOR1,某些位置不变
- 非 NOT DST(不影响状态标志位)
(无符号数)
- 8位数据范围:0~255; 16位数据范围: 0~65535
有符号数的表示方法以及溢出问题
- D0-D6–数值,D7----符号(机器码)
- 原码-----[X]原
- 补码-----X>=0,本身;X<0,2^n+X;
- 负数的原码----符号位不变–取反+1
- 在计算机中,有符号数均用补码表示
- 补码的运算
- n=8,-128~+127; n=16,-32768~+32767
- [X+Y]补 = [X]补+[Y]补
- 加法是前两位要进都进,减法是要借都借
- [X-Y]补 = [X]补-[Y]补
- 补码运算结果还是补码,再次求补就是原码
- 变补/求负----[Y]补----[-Y]补
- BCD码
- 组合BCD数—一个字节
- 分离BCD数—两个字节
- BCD运算—后四位超过9+6调整
- 计算机上的字符用ASCII码表示
- 可显字符—‘0’----‘9’ ‘a’----‘f’ ‘A’----‘F’
- 字符---->数字 -30H || AND 0FH
- 大写---->数字 -37H ||
- 大写---->小写 20H || 逻辑运算 AND 0DFH||ADN 5FH
- 0100~0101------> 0110~0111
- 小写----> 大写 OR 20H
CPU的结构与功能(第二章)
微型处理器的外部结构
- 表现为数量有限的输入输出引脚
- 输入输出引脚构成了微处理器总线
- 数据总线、地址总线、控制总线
- 8086(16-16)/8088(16-8)共40个引脚
- A19-A16,A15-A0-----给外部存储器提供地址,2^20=1M
- A15-A0-----同时给外部IO提供地址—M/^IO
- 一个IO端口至少占用一个IO地址----IO端口地址
- 统一编址—缺点:浪费了存储器的空间;优点:IO驱动程序灵活
- 独立编制—优点:节约存储器的空间;缺点:,指令记忆复杂,IO编程不灵活
微处理器的内部结构(一般)–效率较低
- ALU–算数逻辑运算
- 工作寄存器—数据寄存器只可以提供数据–地址寄存器可以提供地址也可以提供数据—
- 控制器—*指挥机关—取指令–指令寄存器(指令队列)—译码
- IO控制逻辑电路
- 外部存储器
- 控制器
- 程序计数器(PC)–16
- 指令寄存器(IR)–8
- 指令译码器(ID)–
- 控制逻辑部件
- 堆栈-----先进后出原则组织的一段存储器区域----在外部存储器
- 8086:堆栈必须按字操作
- SP—堆栈指针寄存器(16)----栈底+1的地址----SP—>SP-2;一个字单元的数据压入
- SP----指向的地址是栈顶
- 堆栈溢出就出现死机状态
- pop---->取出数据;SP+2
8086/8088CPU的内部结构—8086/8088***
- 虚线分为两大部分—BIU 和 EU
- BIU
- CS\SS\ES\DS\IP(相当于PC)
- 为了16位的地址可以寻找1M的空间,内存分为段管理
- 内部只提供16位地址,寻址16,把外部分为多个64K段地址,段地址(16)+偏移—>地址产生—>20
- 指令队列 REG(IR)----6个字节----效率提高—8088(4个字节)
- BIU—主要职责:从外部存储器取指令,并将取回的指令放到指令队列中,直至6个字节
- EU----主要负责从指令队列获取指令—遵循先进先出原则—并译码分析并指令
- 图–时序周期–EU如果使用总线执行命令,BIU暂停取指令
8086CPU的寄存器组织
- 共有14个16位的寄存器
- 通用寄存器–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
- 段寄存器(4个)
- CS—代码段寄存器----与外部存储器的段联系,段地址–初始化由系统完成
- DS—数据段寄存器----可以人为初始化
- ES—附加数据段寄存器—可以人为
- SS—
- 控制寄存器(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组织
存储器地址空间与数据存放格式
- 地址空间
- A19-A16,A15-A10,A9-A0
- 给外部变址20-1M,IO:16-64k
- 在pc机中,给IO分配A9-A0–10–1K—前512(主板上的IO)(000H-1FFH)–后512(给插件板上)(200H-3FFH)
- 数据存放格式
- 字节型、字型、双字型
- 字节型数据:一个地址单元,定义在存储器中的DS段,DB(字节型定义伪指令)—如何编译
- 字型数据:DW------对准(高低同时写/读)与未对准(在各个时序中通过)–时间周期是2倍
- [BX BP SI DI]----所存的地址;BX BP SI DI—它本身
- 存储器的分段与物理地址的形成
- 为什么要分段----20根地址线—16位地址寄存器
- 如何分—每个逻辑段最大64K,每个逻辑段的起始地址必须可以被16整除
- 物理地址—实际存在的地址----0000 0–0001 0----0段、1段、2段、。。。65535段
- 段的段首单元的地址----段基址:偏移地址(段内偏移地址、相对于段基址偏移)----0 0000:0000H
- 由于段相互有叠加,所以一个单元的逻辑地址可能不同,但是物理地址一定
- 程序、调试都是逻辑地址
- 物理地址(PA)的形成----> 物理地址=段基址X16(左移加个0)+段内偏移地址(段内有效地址)
- 取指令操作
- CS(段基地址)X16+IP(段内偏移地址)------>取指令所存储的PA----无条件转移
- 堆栈操作(SS:SP+2) 和 数据操作(DS+IP)
- 各类指令的地址信息
- 实际上汇编后在存储器内不会重叠----当前段
8086指令系统
汇编语言指令
- 名词解释
- 指令—一种二进制代码(机器码)
- 指令系统–CPU能识别的所以指令集合
- 机器语言–指令代码语言
- 机器语言程序–
- 汇编语言–符号化语言 如:B0 12—MOV AL,12
- 汇编语言源程序
- 汇编–将汇编语言翻译机器语言的过程–masm.exe
- 反汇编–将机器语言翻译成汇编语言
- .ASM—.OBJ–(连接)----.exe
- 8086汇编语言程序中语句的种类
- 指令语句—CPU可以执行的语句(汇编后可以汇编成二进制)
- 伪指令语句–CPU不可以执行的语句(不会成二进制)
- 宏指令语句–本身是8086指令系统没有的指令,是用户用宏定义伪指令的指令语句–类似于函数
- 汇编语言中语句的组成
- 变量名(标号名:) 助记符 操作数 ;注释
- 地址符号化 DATA1—变量名
- 汇编语言中的常数及表达式
- 十进制常数、十六进制常数、字符常数、字符串常数、?(随机数)
- 表达式–操作符—算数操作符、逻辑操作符、关系操作符、属性操作符、其他操作符
- 标号、变量及伪指令
- 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
- 指令的分类(课本P31)
- 数据与转移地址的寻址方式
- 寻址方式:求操作数所在地(寄存器、立即数)或所在存储器单元地址的方法
- 求得的操作数当作成数据 或 用作转移地址用(IP:段内、IP+CS:段间)
- 寻找数据的寻址方式(取操作数—源操作数,存数据–目的操作数)
- 立即数寻址–常数形式;MOV AX,1234H;立即数–只能做源操作数
- 寄存器寻址—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
- 存储器寻址—书上的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位;以变量位置为准
- 隐含寻址:PUSH AX;(SP)-2---->SP;(SS:(SP))<----(AX);
- 变量不可以在指令中运算
本篇截止于第三章数据与指令的寻址方式
下一篇: java中static修饰符你真的懂吗?