预备知识:
一个典型的CPU 由运算器、控制器、寄存器构成。
内部总线:实现CPU 内部部件的联系
外部总线:实现CPU 和主板其他部件之间的联系
教材基于8086CPU 进行介绍
通用寄存器:
8086有14 个 16 位的寄存器
常用寄存器:
AX 累加寄存器 可分为AH 和AL
BX 基地址寄存器 可分为BH和BL
CX 计数器寄存器 可分为CH和CL
DX 数据寄存器 可分为DX和DL
各自可分为两个独立的8位的寄存器(寄存器之间相互独立工作) 即 各部分进行运算与另一部分无关当L(右边的)寄存器超过两个字节且有进位的情况时,不会进位到前一位。
注意:
寄存器能够写的最大的值 一个字节是255 FFH
移动数据时考虑:这个数据的长度是否能放在你要存放的寄存器中
例如:
将 2375h + BD93h 的值存放在AX寄存器中时
应分为两部分:
AH=23H+BDH=E0H
AL=75H+93H=0BH 而不是10BH
不同的CPU 生产厂商在生产CPU时如果遵循相同的ISA ,则认为这些CPU 在ISA 级别上是相同的相同系列的CPU 所支持的指令集不一定相同
段寄存器:
概念:CPU 必须通过地址线得到内存地址 例如指令段地址和数据段地址
CS 代码寄存器 用于存储质心指令的段地址
DS 数据段地址起始位
SS stack segment:存放堆段地址
标志寄存器:
IP 指令指针寄存器用于指向指令的偏移量
SP stack pointer:堆位移偏移量
字数据在寄存器中存储形式
字节 内存划分基本单位 B
字 =两个字节 字高8位存在寄存器高8位寄存器中 字的低8位存放于寄存器的低8位
8086寄存器进行数据交换的解决方式
CS&IP:
计算机工作过程:
取指令————分析指令————执行指令
内存中指令和数据都以二进制形式存放,在使用时基于上下文加以区别。8086CPU CS=FFFFH,IP=0000H
无法与早期CPU操作兼容怎么办?
8086CPU 为了解决内存在16位寄存器的表示问题 用两个8位寄存器进行加减运算就可以表示20位的内存地址
计算机如何知道下一条指令在何处读取?
以CP 为代码段地址 加上偏移地址的位数表示指令存放的内存单元
1、CPU 将 CS和IP 组合的地址翻译成指令
2、 IP = IP + 所读指令字节数
3、 执行指令缓冲器中的内容,回到步骤1 再重复过程控制读取指令
跳转指令 :jmp或 call
注意:
修改 CS&IP 指令 不能借助mov 指令实现借助,如:
jmp 2AE3:3; CS<------2AE3H
IP<-----3H
jmp AX ; IP <----AX
例题:
mov ax,bx IP《------1
sub ax,ax;IP<------1
jmp ax 读入指令IP<------1 跳转至 ax
IP<-----1
IP 的值总共会被修改4次
汇编指令 mov 和add jmp的基本用法及注意事项:
mov 和add 指令要求 两个操作数一致
两个16位可以合成一个20位的内存地址:
物理地址 = 逻辑地址 * 16 + 偏移地址
逻辑地址即为一个逻辑概念 ,是16 倍数的数作为段起始使用
可表示范围不超过64K 2(16次方)-2(10次方)
例如 物理地址 123C8h
段地址:偏移地址 1230:00C8 或123C:0008
1200:03C8 或 1000:23C8
浙公网安备 33010602011771号