4.寄存器寻址

1.的16个寄存器:
所有寄存器都16位:
通用寄存器: 存放一般性数据: 包括数据寄存器 ,指针寄存器,索引寄存器
(AX,BX,CX,DX,BP,SP,SI,DI)
数据寄存器: AX,BX,CX,DX
AX:AX( ) :累加寄存器,主要用于输入/输出和大规模的指令运算 。常用于四则运算,函数返回值等
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
16位寄存器存储数据最大值为2^16-1 65536-1 = 65535
AX = AH + AL
AH:为高8位
8位寄存器的最大存储数据量为 2^8-1 = 256-1 = 255
15
14
13
12
11
10
9
8
AL:为低8位
7
6
5
4
3
2
1
0
AX与AH及AL的关系:
进制转换:
2000 ==> 0 0000=====>十进制转换二进制
===>4E20=====>二进制转换十六进制
AH:高8位存 4E ,AL:低8位存 20
BX:BX(Base ):基址寄存器,常用于在相对寻址(基址+偏移)中存储基址(基础访问地址) 。也常用于四则运算 。
BX=BH+BL
CX:CX(Count ):计数寄存器,CX 寄存器在迭代的操作中会循环计数
CX=CH+CL
DX:DX(Data ):数据寄存器,也用于输入/输出操作 。还与AX寄存器一起使用,用于涉及大数值的乘法和除法运算
DX=DH+DL
索引(变址)寄存器: SI,DI
SI:SI( Index):源索引寄存器 。变址寄存器 。常用于在变址寻址(基址+变址)中存储变址,也常用来拷贝源字符串 。
DI:DI( Index):目的索引寄存器 。目标变址寄存器 。常用于在变址寻址(基址+变址)中存储变址 。也常用来复制到目标字符串
指针寄存器: SP,BP
SP:SP(Stack ):栈指针,栈顶指针,只能访问栈顶
BP:BP(Base ):基础指针,栈寄存器上的偏移量,用来定位栈上变量 。用它可直接存取堆栈中的数
指针寄存器不可分割成8位寄存器 。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果 。
SI和DI功能和BX相同,可以用于间接寻址 。主要用于存放存储单元在段内的偏移量 。但是SI、DI不可分割成8位寄存器
【4.寄存器寻址】控制寄存器:IP,FLAG
IP:指令指针寄存器
32位寄存器EIP低16位相当于IP
31
30
29
.
.
.
.
.
.
2
1
0
P( ):指令指针 。是存放下次将要执行的指令在代码段的偏移量 。即CS:IP执行下一条要执行的命令 。
32位CPU把指令指针扩展到32位,并记作EIP 。EIP的低16位与IP作用相同 。
64位CPU把指令指针扩展到64位,并记作RIP 。RIP的低16位与EIP作用相同
FLAG:标志寄存器
段寄存器: CS,SS,DS,ES
16为构架中,16位的指针只能访问64k的内存,为了访问更多的内存,使用段寄存器和指针配合访问内存地址 。(x32,x64都采用段寄存器+指针地址方式访问内存
CS:CS(Code ):代码段寄存器 。CS:IP表示要执行代码的内存地址
SS:SS(Stack ):栈段寄存器 。SS:SP是栈顶内存地址 。
DS: DS(Data ):数据段寄存器 。DS:偏移量是数据的内存地址 。
ES:ES(Extra ):扩展段寄存器 。扩展的数据段寄存器 。
计算机启动后会自动找到地址CS:IP地址的指令代码运行,运行后IP自动偏移下一个指令 。
数据地址默认段寄存器为DS 。栈默认段寄存器为SS 。
x32和x64构架段寄存器名称未变,但是扩展了两个寄存器 。
PSW:
2.x32构架
x32架构中,通用寄存器都在16位版本的基础上扩展成为32位版本,名字加了E作为前缀 。
为了兼容16位模式程序,访问AX,BX,CX,DX相当于访问32位寄存器的低16位,32位寄存器的高16位不可单独访问