Asm入门之一 CPU 寄存器
本帖最后由 叮当 于 2016-2-9 21:14 编辑8086CPU 14个寄存器 :
寄存器名称:AX BX CX DX SI DI SP BP IP CS SS DS ES PSW
---------------
数据寄存器:
AX:可以分为 AH 和 AL
BX:可以分为 BH 和 BL用于在[]中指明偏移地址 默认段地址存放在DS中
CX:可以分为 CH 和 CL用于loop指令循环检测
DX:可以分为 DH 和 DL
---------------
特殊寄存器:
BP:用于在[]中指明偏移地址 与BX寄存器类似 但默认段地址存放在SS中
SI:变址和指针寄存器 用于在[]中指明偏移地址 但不能分成两个8位寄存器来使用
DI:变址和指针寄存器 用于在[]中指明偏移地址 但不能分成两个8位寄存器来使用
IP:指令指针寄存器 在任意时刻 CS:IP指向的内容都当作指令执行 读取一条指令后 IP中的值自动增加 以使CPU可读取下一条指令
SP:栈顶指针寄存器 在任意时刻 SS:SP指向栈顶元素
---------------
段寄存器:
CS:代码指令段寄存器 在任意时刻 CS:IP指向的内容都当作指令执行
DS:内存数据段寄存器 向内存读写数据时 DS寄存器内存储的是默认段地址
SS:栈段寄存器 在任意时刻 SS:SP指向栈顶元素
ES:临时段寄存器 可以当作临时备用
---------------
标志寄存器:
PSW:具体查看标志寄存器文档介绍
---------------
1:8086CPU一共有14个寄存器 每个寄存器都是16位 可以存放两个字节
2:AX BX CX DX 存放一般性数据 被称为 通用寄存器
3:为保证向前兼容(8位寄存器的CPU) 有部分寄存器可以分为两个独立使用的8位寄存器来用 分为低8位L 和 高8位H
4:8086CPU可以一次处理两种尺寸数据 Byte 和 word
5:CS IP中的内容当作指令 如果某条指令被执行过 那么它所在的内存单元必然被CS:IP指向过
6:每次CPU开始工作 CS=FFFFH IP=0000H因此FFFF0H是8086PC开机后执行的第一条指令
7:CS IP读取指令流程:
:从CS:IP指向的内存单元读取指令进入指令缓存器
:(IP)=(IP)+所读指令长度 指向下一条指令
:执行指令 转到 重复该过程
---------------
16位结构 或者说 16位机 描述了一个CPU具有以下几方面的结构特性:
1:寄存器最大宽度16位2:运算器一次最多处理16位数据3:寄存器和运算器之间通路为16位
8086是16位结构的CPU 因此在8086内部一次性处理 传输 存储的信息最大长度是16位的
---------------
8086CPU 寻址方式:
8086CPU内部有20根地址总线 寄存器是16位 无法正常使用寄存器内部的数值做20位的寻址
根据1位16进制值=4位2进制值的特性 8086的寻址方法为:
物理地址 = 段地址 * 16 + 偏移地址
例如 段地址=1230H 偏移地址=00C8H 因此运算结果为
1230H * 16 + 00C8H = 12300H + 00C8H = 123C8H
编程中可以根据需要 将地址连续 起始位置为16的倍数(因为段地址要*16)的任何一组内存单元定义为一个段
说明:
1:段地址确定了一个段的起始位置 而偏移地址为16位 16位的寻址能力为64KB个内存单元 所以一个段的最大长度为64KB
2:CPU可用不同的段地址和偏移地址组成同一物理地址
例如:段地址2000H 偏移地址1F60H与段地址2100H 偏移地址0F60H代表的地址是相同的
---------------
8086CPU 寻址工作流程:
1:提供两个16位地址 即段地址和偏移地址
2:通过内部总线送入一个称为地址加法器的部件
3:地址加法器通过运算将两个16位地址合成为一个20位的物理地址
4:地址加法器通过内部总线将20位物理地址送入输入输出控制电路
5:输入输出控制电路将20位物理地址送入地址总线:
6:20位物理地址被地址总线传送到存储器
持续更新ASM系列 这是干嘛的{:5_188:} {:5_118:}膜拜会汇编的 和arm有啥区别? Asm 台服蠻常用到的 學習 持续更新ASM系列 好啊,学习学习,感谢老师分享
页:
[1]