一个典型的CPU(此处讨论的不是某一具体的CPU)由运算器、控制器、寄存器(CPU工作原理)等器件构成,这些器件靠内部总线相连。前一章所说的总线,相对于CPU内部来说是外部总线。内部总线实现CPU内部各个器件之间的联系,外部总线实现CPU和主板上其他器件的联系。简单地说,在CPU中:
运算器进行信息处理;
寄存器进行信息存储;
控制器控制各种器件进行工作;
内部总线连接各种器件,在它们之间进行数据的传送。
对于一个汇编程序员来说,CPU中的主要部件是寄存器。寄存器是CPU中程序员可以用指令读写的部件。程序员通过改变各种寄存器中的内容来实现对CPU的控制。
64位CPU中的寄存器
x86-64CPU中共有16个存储64位值的通用目的寄存器,这些寄存器用来存储整数数据和指针。
64位CPU的前8个寄存器是从32位CPU中的%eax到%esp的8个寄存器,从32位扩展为64位,同时,名称也变为了从%rax到%rsp。
另外的8个寄存器是新增的,标号从%r8到%r15。
//rax中的r代表register
标号 作用
%rax 返回值
%rbx 被调用者保存
%rcx 第4个参数
%rdx 第3个参数
%rsi 第2个参数
%rdi 第1个参数
%rbp 被调用者保存
%rsp 栈指针
%r8 第5个参数
%r9 第6个参数
%r10 调用者保存
%r11 调用者保存
%r12 被调用者保存
%r13 被调用者保存
%r14 被调用者保存
%r15 被调用者保存
32位CPU中的寄存器
Intel的32位CPU中的8个寄存器是从8086的16位CPU中的8个16位寄存器扩展而来的,寄存器标号从%ax到%sp变为%eax到%esp。
标号 作用
%eax 返回值--累加器add--Extended accumulator register
%ebx 被调用者保存--基地址寄存器base
%ecx 第4个参数--计数寄存器count
%edx 第3个参数--存放数据data
%esi 第2个参数--源变址寄存器source index
%edi 第1个参数--目标变址寄存器destination index
%ebp 被调用者保存--基指针寄存器base pointer
%esp 栈指针--栈指针寄存器stack pointer
————————————————
为什么累加寄存器要叫eax呢?Extended accumulator register,就是扩展累加寄存器的意思。
其实是有一段历史的
a, 8位累加器。8080。b 基址,c 计数,d数据
ax,16位累加器,由ah,al 组成。x就是h加l,没特别意义,8086。bx=bh+bl,cx=ch+cl,dx=dh+dl
eax,32位累加器,80386
rax,64位累加器。X86-64
————————————————