知识前置
位:计算机能表示的最小数据单位
字节:一个8位二进制数成为1字节
字:一个16位二进制数称1个字
机器数:计算机中的数据,分为数值数据和非数值数据
真值:机器数代表的真正的数值
字长:处理器的二进制位数(8位处理器字长为8位)
溢出别:补码运算时,若运算结果超过其表示的数的范围,则溢出。
技巧:由于溢出只可能出现在同号相加或异号相减运算时,且采用补码减法可转变为加法,最直观、最易于理解的溢出判定方法是:若正数加正数,结果为负数或负数加负数,结果为正数,则发生溢出。
Asciil码:
数字符0-9的Ascii码为30H~39H(48)
大写字母A-Z的Ascii码为41H-5AH(65)
BCD码:十进制可采用二进制编码来表示——本质还是十进制数
压缩BCD码:一个字节表示两位十进制数 16 - 0001 0110
非压缩BCD码:一个字节表示一位十进制数 16 - 00000001 00000110
BCD码本质上是二进制编码的十进制数
带符号的机器数表示方式:原码、补码、反码
- 原码
- 最高位是符号位,0为正,1位负,范围 -127 - +127
- 反码
- 正数:原码=反码=补码
- 负数:符号位不变,数值位求反
- 范围和原码一样
- 补码
- 正数:和反码一样
- 负数:反码+1
- 范围: -128 - +127
- 运算规则:
- 符号位与数值位一起运算
- 符号位产生进位可舍去
- 微机组成
- CPU(运算器和控制器)、输入输出设备、接口电路和系统总线
- 总线
- 总线是CPU向存储器和输入/输出接口传送地址、数据和控制信息的公共通道
- 数据总线(16):传输数据
- 地址总线(20):传输地址信息
- 控制总线(16):传输控制信号
- 例:8086的数据线为16位,地址线为20位,I/O口使用16位地址线
- 总线是CPU向存储器和输入/输出接口传送地址、数据和控制信息的公共通道
8088/8086微处理器
8086:16位微处理器
8088:准16位处理器
8086和8088的区别:
- 8086 BIU中的指令队列是6字节,外部数据总线16位
- 8088 BIU中的指令队列是4字节,外部数据总线8位
EU(执行单元)
- 负责指令的译码和执行
- 负责向总线接口部件BIU它提供偏移地址
- 对通用寄存器和标志寄存器进行管理
- EU组成
- 算术逻辑单元ALU
- 标志寄存器FR
- 通用寄存器
- 数据寄存器
- 16位数据AX、BX、CX、DX
- 16位指针寄存器:SP、BP
- 16位变址寄存器:DI、SI
- 数据寄存器
- 暂存寄存器
- EU控制电路
- EU组成
BIU(总线接口单元)
- 负责CPU与内存或I/O端口传送指令或数据
- BIU从内存取指令送到指令队列缓冲器。
- 当EU执行指令时,BIU要配合EU从指定的内存单元或I/O中端口汇总读取数据,或者把EU的操作结果送到指定的内存单元或I/O端口去
- BIU的组成
- 段寄存器
- 代码段寄存器CS
- 堆栈段寄存器SS
- 数据段寄存器DS
- 附加段寄存器ES
- 指令指针寄存器IP
- 地址加法器
- 指令预取队列
- 总线控制逻辑
- 段寄存器
- 负责CPU与内存或I/O端口传送指令或数据
数据寄存器
- AX 累加器
- BX 基数寄存器 basic
- CX 计数寄存器 count
- DX 数据寄存器 data
变址寄存器:存放当前数据段的偏移地址
- SI 源变址寄存器 source
- DI 目的变址寄存器 destination
指针寄存器:用来存取位于当前堆栈段中的数据
- BP 基址指针寄存器:存放位于堆栈段中的一个数据区基址的偏移地址-表明数据区在哪里开始 basic adress Pointer
- SP 堆栈指针寄存器:给出栈顶的偏移地址 stack pointer
段寄存器
- DS 数据段寄存器 Data
- ES 附加段寄存器 Extra
- SS 堆栈段寄存器 Stack
- CS 代码段寄存器 Code
控制寄存器
- IP 指令指针寄存器:存放着BIU要取的下一条指令的偏移地址
- 下一条指令的物理地址=CSx16+IP instructions
- PSW 状态标志寄存器
- ①状态标志
- 进位标志CF:最高位产生进位/借位,CF=1
- 奇偶标志PF:运算结果低8位中个“1”的个数为偶数,则PF=1
- 辅助进位标志AF:低4位向高4位有进位,则AF=1
- 零标志ZF:运算结果为0,则ZF=1
- 符号标志SF:最高位为1,表示结果为负数,则SF=1
- 溢出标志OF:运算过程中发生“溢出”,则OF=1
- ②控制标志
- 中断允许标志IF
- IF=1,则CPU可以接受可屏蔽中断请求
- 方向标志DF direction flag
- DF=1时,地址自动递减;
- DF=0时,地址自动递增;
- 跟踪(陷阱)标志TF trick flag
- 为调试程序的方便而设置的
- TF=1,则处于单步工作方式
- TF=0,将正常执行程序
- 中断允许标志IF
- ①状态标志
- IP 指令指针寄存器:存放着BIU要取的下一条指令的偏移地址
段寄存器
- 代码段(CS):用来存放当前正在运行的程序。不能做目的操作数
- 数据段(DS):存放当前运行程序所用的数据
- 堆栈段(SS):堆栈作用是保护数据
- 附加数据段(ES):辅助的数据区
为什么要分段
- 8086/8088有20位地址线,能够寻址1MB的内存空间,但寄存器是16位,只能寻址64KB存储空间,所以要分段,把1MB的存储空间分成若干逻辑段,每个逻辑段最大具有64KB的存储空间
8086/8088 20 2^20 =1 MB 寄存器16位,2^16=64KB,分段,把1MB空间分成若干逻辑段,每个逻辑段最大具有64KB的存储空间
分段的概念:
- 把1MB的存储空间分成若干逻辑段,每个逻辑段最大具有64KB的存储空间。
物理地址形成
- 物理地址:即实际地址,例如00000H。一个存储单元的物理地址是唯一的,而逻辑地址是可以不唯一的。
- 段基址:段首址的高16位。段基址存放在段寄存器DS、ES、SS或CS中。
- 偏移地址:段内存储单元距离段首地址的偏移量,也称有效地址EA,存放在IP、BP、SI、DI或BX中。偏移地址方位:0000H~FFFFH
- 逻辑地址:通常用段基址:偏移地址的形式来描述,在程序中使用。
- 例如
- 0000H:0001H
- 物理地址=段基址x16+偏移量
- 常用:CS:IP、SS:SP
题
堆栈
- 堆栈是以“先进后出“或”后进先出“原则管理的存储区域。SS(堆栈是保护数据)给出堆栈段的段基址,SP存放栈顶地址,指出从栈顶到段首址的偏移量
PUSH AX:;入栈
- SP-2 ——> SP
- 再将数据入栈(低八位放入低字节,高八位放入高字节)
POP AX:出栈
- 先栈顶数据出栈
- 再SP+2——>SP
8086/8088 CPU 引脚
指令系统
指令格式
- 操作码 操作数/目的操作数,源操作数
寻址方式
①立即数寻址——直接给出操作数
- MOV CX, 2A50H
- 将立即数2A50H送到CX寄存器中。
②寄存器寻址
- 操作数为内部寄存器(AX/BX/CX/DX/SI/DI/SP/BP)
- MOV DX, AX
③存储器寻址
- 1、直接寻址:操作数给出有效地址(偏移地址)
- MOV AL,[2000H]
- 2、寄存器间接寻址:有效地址放在指定寄存器中
- BX、SI、DI——默认段为DS段,物理地址=DS*16+BX/SI/DI
- BP——默认段为SS段,物理地址=SS*16+BP
- 1、直接寻址:操作数给出有效地址(偏移地址)
3、寄存器相对寻址:有效地址是寄存器内容+位移
操作数的物理地址=16xDS+BX/SI/DI+位移|或者=16xSS +BP +位移
4、基址加变址寻址方式:有效地址是基址寄存器和变址寄存器内容之和
操作数的物理地址=16xDS + BX(基址寄存器)+ SI/DI(变址寄存器)|或 = 16xSS + BP +SI/DI
5、相对的基址加变址寻址方式
操作数的物理地址=16XDS+BX+SI/DI+位移|或=16XSS+BP+SI/DI+位移
语法规则
1、源操作数与目的操作数长度要一致
类型要明确
2、寄存器寻址与段地址 要对应
[]中只能使用基址和变址即BX/BP/Si/Di
4、同一组内的寄存器不能同时出现在一个[]中。
5、两个存储单元之间不能直接操作的
6、CS、IP、立即数不能做目的操作数 IP指令指针 EA偏移地址
7、当DS、ES、SS作目的操作数时,立即数不能做源操作数
8、可用段超越前缀修改默认段
数据传送指令
- MOV 目的,源
- 功能:将源操作数的内容传送到目的操作数
- PUSH 源
- 功能:将源操作数压入堆栈中
- 过程:SP新 -> SP原-2, 再入栈
- POP目的
- 功能:将堆栈中数据弹出至目的操作数
- 过程:出栈、SP新 -> SP原+2
- XCHG 目的,源
- 功能:源操作数、目的操作数交换数据
- XLAT 转换表 或:XLATT
- 功能:查表功能
- IN AX/AL, I/O地址
- I/O端口数据传输到AX、AL
- OUT I/O地址,AX/AL
- AX、AL数据传输到I/O端口
- LEA 目的操作数,源操作数 lea
- 功能:取源操作数的地址偏移量,送到目的操作数
- LDS 目的操作数,源操作数
- 取出四个字节,低地址两个字节送入目的操作数,高地址的两个字节送入DS寄存器
- 算术运算指令
- 逻辑运算
- NOT 目的 ——按位取反
- AND 目的,源——目的与源-——>目的
- OR 目的,源——目的或源——>目的
- XOR 目的,源 —— 目的异或源——>目的
- TEST 目的,源 ——目的与源,并修改标志位,但不回送结果
- MOV 目的,源
串操作指令
基础知识
汇编语言程序设计
- 汇编语言有三种基本语句:指令语句、伪指令语句、宏指令语句
存储器
1 | data segment |