赞
踩
以16位8086构架为主说下寄存器的名称和用途,并在16位基础上说明一下32位、64位的寄存器。
寄存器分类
16位的8086处理器共14个寄存器。32位和64位的x86,x64构架分别对寄存器进行了扩充。
通用寄存器虽然分为了三类,但是实际上对于比较新的cpu这些寄存器功能都差不多,RISC等构架通用寄存器就是直接采用数字编号的,没有再细分功能。
当然习惯上还是把不同寄存器用于不同的用途,这也是ABI的一个重要部分。比如通常默认AX就是函数返回值,有的系统默认优先把SI,DI作为函数参数。
AX、BX、CX、DX 一般用来存放数据,所以被称为数据寄存器。
现代CPU的AX,BX,CX,DX几个寄存器在功能并无区别,最常见的用途是存储操作数,函数参数和运算结果等信息。
比如通常函数返回值默认都保存在AX中。
8位寄存器
AX,BX,CX,DX在8086中为16位寄存器,每个寄存器的高位和低位均可以作为8位寄存器访问。
寄存器名称通常不区分大小写,汇编语言中通常ax,bx,cx,dx和AX,BX,CX,DX相同。
x32构架
x32架构中,通用寄存器都在16位版本的基础上扩展成为32位版本,名字加了E作为前缀。
为了兼容16位模式程序,访问AX,BX,CX,DX相当于访问32位寄存器的低16位,32位寄存器的高16位不可单独访问。
x64构架
在x64架构中,通用寄存器都扩展成为64位版本,名字也进行了升级。
为了兼容32位模式程序,使用上面的名字仍然是可以访问的,相当于访问64位寄存器的低32位。高位32位模式不可访问。
指针寄存器不可分割成8位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。
SI和DI功能和BX相同,可以用于间接寻址。主要用于存放存储单元在段内的偏移量。但是SI、DI不可分割成8位寄存器。
SI和DI两个经常搭配一起使用,执行字符串的复制等操作。有的系统默认优先把SI,DI作为函数参数。
在16为构架中,16位的指针只能访问64k的内存,为了访问更多的内存,使用段寄存器和指针配合访问内存地址。(x32,x64都采用段寄存器+指针地址方式访问内存)。
x86构架cpu,所有内存地址都是段地址+偏移
方式引用。cpu内部根据段地址和偏移地址计算物理地址。
16位系统中物理地址=段地址*16+偏移地址
通常写作段寄存器:偏移
。
CS:IP
表示要执行代码的内存地址。DS:偏移量
是数据的内存地址。SS:SP
是栈顶内存地址。计算机启动后会自动找到地址
CS:IP
地址的指令代码运行,运行后IP自动偏移下一个指令。
数据地址默认段寄存器为DS。栈默认段寄存器为SS。
x32和x64构架段寄存器名称未变,但是扩展了两个寄存器。
IP(Instruction Pointer):指令指针。是存放下次将要执行的指令在代码段的偏移量。即CS:IP
执行下一条要执行的命令。
32位CPU把指令指针扩展到32位,并记作EIP。EIP的低16位与IP作用相同。
64位CPU把指令指针扩展到64位,并记作RIP。RIP的低16位与EIP作用相同。
在具有预取指令功能的系统中,下次要执行的指令通常已被预取到指令队列中,除非发生转移情况。
CS:IP
。(x32上地址为CS:EIP
,x64上地址为CS:RIP
)常数实际上是直接放在代码中的,会在加载指令的时候,自动找到。
mov AX,80h ; 80h就被称为立即数
数据存储在寄存器中,直接用寄存器名称调用。
mov AX,BX
寄存器寻址速度非常快。数据在寄存器中,所以不存在段地址。
操作数存放在内存中,地址在指令中直接给出。
mov AX,[123H]
数据段的段寄存器默认为DS。
如果要指定访问其它段内的数据,可在指令中用段前缀的方式显式地书写出来。
mov BX,ES:[123H]
操作数在内存中,地址用SI、DI、BX和BP等寄存器之一来指定。
mov BX,[di]
mov AX,[si]
地址用SI、DI和BX等指定时,缺省的段寄存器为DS;
地址用BP来指定时,缺省的段寄存器为SS(即:堆栈段)。
操作数在内存中,地址是一个基址寄存器(BX、BP)或变址寄存器(SI、DI)的内容和一个偏移量之和。
mov BX,[si+100H]
若地址用SI、DI、BX等加偏移量计算,缺省的段寄存器为DS;
若地址用BP加偏移量计算,缺省的段寄存器为SS。
操作数在内存中,地址是一个基址寄存器(BX、BP)和一个变址寄存器(SI、DI)的内容之和。
mov BX,[BX+SI]
- 基址寄存器为BX,缺省的段寄存器为DS。
- 基址寄存器为BP,缺省的段寄存器为SS。
操作数在内存中,地址是一个基址寄存器(BX、BP)的值、一个变址寄存器(SI、DI)的值和一个偏移量之和。
mov AX,[BX+si+200H] ;mov AX,200h[BX][si]或者mov AX,200h[si][BX]也是对的,多种写法
- 基址寄存器为BX,缺省的段寄存器为DS。
- 基址寄存器为BP,缺省的段寄存器为SS。
持续更新及修订中。
未经允许请勿转载。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。