天天看點

通用寄存器和IP和辨別寄存器

8086、8088、80286,16位CPU

80386,32位CPU

32位CPU中,通用寄存器一般分為三類:16位通用寄存器,32位擴充通用寄存器,8位的半寄存器。

8個16位通用寄存器:ax,bx,cx,dx,bp,si,di,sp(8086、8088、80286)

8個32位通用寄存器:eax,ebx,ecx,edx,ebp,esi,edi,esp(x86體系結構CPU)

16位指針寄存器:ip

32位指針寄存器:eip

擴充方式:

                31位                                 16-15                                         0位

                xxxxxxxxxxxxxxxxxxxxxxxx     xxxxxxxxxxxxxxxxxxxxxxxxx

                             高16位                                        低16位

                整個32位寄存器的名字eax,低16位的寄存器的名字ax

32位的寄存器的低16位有自己的名字,但是高16位沒有自己的名字,如果想要使用高16位的資料,則必須引用整個32位的寄存器。

ax,bx,cx,dx,16位寄存器被分成高8位和低8位(僅這四個寄存器可以分成高/低8位寄存器)

                15位                     8-7                   0位

                 xxxxxxxxxxxxxxxx  xxxxxxxxxxxx

                          高8位                   低8位

低8位半寄存器al,高8位半寄存器ah

指令指針寄存器

ip(16位)或eip(32位)專門用來存放下一條即将執行的機器指令的偏移位址

ip的值在執行完一條指令後自動遞增,指令的大小不同,其大小是1~6位元組。

cs和ip或cs和eip一起構成了下一條即将執行的指令的完整位址。

ip和eip寄存器是唯一即不能直接讀出,也不能直接寫入的寄存器。

辨別寄存器

8086、8088、80286的CPU中标記寄存器的大小是16位,名稱是flags

80386及更高的CPU中辨別寄存器的大小是32位,且起名字變為eflags

辨別寄存器是按位使用的,每一位在CPU中都有特殊的含義。每一個位都有自己的名字。

程式執行測試時,測試的就是辨別寄存器中的某個辨別位的值。

辨別位隻能存儲0或1,是以用于訓示那些非此即彼的決策。

繼續閱讀