【转载】汇编语言–32位寄存器详解

转载自:https://blog.csdn.net/Yun_Ge/article/details/85158670

寄存器概述

4个数据(通用)寄存器:(EAX、EBX、ECX、EDX)。
6个段寄存器:(ES、CS、SS、DS、FS、GS)。
2个变址寄存器:(ESI、EDI)。
2个指针寄存器(ESP、EBP)。
1个指令指针寄存器:EIP。
1个标志寄存器:  EFlags。

通用寄存器

相较于8086的16位寄存器(AX,BX,CX,DX)前面多了一个e

在16位CPU中,AX、BX、CX和DX不能作为基址和变址寄存器来存放存储单元的地址,但在32位CPU中,其32位寄存器EAX、EBX、ECX和EDX不仅可传送数据、暂存数据、保存算术逻辑运算结果,而且也可作为指针寄存器,所以,这些32位寄存器更具有通用性。

段寄存器

32位有6个段寄存器,分别如下:

CS:代码段寄存器 ES:附加段寄存器
DS:数据段寄存器 FS:附加段寄存器
SS:堆栈段寄存器 GS:附加段寄存器

相较于8086的16位寄存器多了FS和GS

变址寄存器

32位CPU有2个32位通用寄存器ESI和EDI,其低16位对应8086CPU中的SI和DI,对低16位数据的存取,不影响高16位的数据。
ESI、EDI、SI和DI称为变址寄存器,它们主要用于存放存储单元在段内的偏移量,用它们可实现多种存储器。

指针寄存器

32位CPU有2个32位通用寄存器EBP和ESP,其低16位对应先前CPU中的BP和SP,对低16位数据的存取,不影响高16位的数据。
EBP、ESP、BP和SP称为指针寄存器,主要用于存放堆栈内存储单元的偏移量,用它们可实现多种存储器。

BP为基指针寄存器,用它可直接存取堆栈中的数据。
SP为堆栈指针寄存器,用它只可访问栈顶。

指令指针寄存器

32位CPU把指令指针扩展到32位,并记作EIP,EIP的低16位与先前CPU中的IP作用相同。
指令指针EIP、IP是存放下次将要执行的指令在代码段的偏移地址。

标志寄存器

32位地址的寻址方式

注意:在用16位寄存器来访问存储单元时,只能使用基地址寄存器(BX和BP)和变址寄存器(SI和DI)来作为偏移地址的一部分,但在用32位寄存器寻址时,不存在上述限制,所有32位寄存器(EAX、EBX、ECX、EDX、ESI、EDI、EBP、和ESP)都可以是偏移地址的一个组成部分。

比如,指令:mov ebx, [eax+edx*2+300]
eax就是基址寄存器,edx就是变址寄存器,300H就是偏移常量。

注意:

地址中寄存器的书写顺序决定该寄存器是基址寄存器还是变址寄存器。如:[ebx+ebp]中的ebx是基址寄存器,ebp是变址寄存器,而[ebp+ebx]中的ebp是基址寄存器,ebx是变址寄存器,可以看出,左边那个是基址寄存器,另一个是变址寄存器。

默认段寄存器的选用取决于基址寄存器。

基址寄存器是ebp或esp时,默认的段寄存器是SS,否则,默认的段寄存器是DS。

在指令中,如果显式地给出段寄存器,那么显式段寄存器优先。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇