请问什么是段寄存器、指针变址寄存器?
它们的功能是什么?是怎样联系的?
å¯åå¨ï¼Registerï¼æ¯CPUå
é¨çå
件ï¼æ以å¨å¯åå¨ä¹é´çæ°æ®ä¼ éé常快ãç¨éï¼1.å¯å°å¯åå¨å
çæ°æ®æ§è¡ç®æ¯åé»è¾è¿ç®ã2.åäºå¯åå¨å
çå°åå¯ç¨æ¥æåå
åçæ个ä½ç½®ï¼å³å¯»åã3.å¯ä»¥ç¨æ¥è¯»åæ°æ®å°çµèçå¨è¾¹è®¾å¤ã8086 æ8个8ä½æ°æ®å¯åå¨ï¼è¿äº8ä½å¯åå¨å¯åå«ç»æ16ä½å¯åå¨ï¼AH&ALï¼AXï¼ç´¯å å¯åå¨ï¼å¸¸ç¨äºè¿ç®ï¼BH&BLï¼BXï¼åºåå¯åå¨ï¼å¸¸ç¨äºå°åç´¢å¼ï¼CH&CLï¼CXï¼è®¡æ°å¯åå¨ï¼å¸¸ç¨äºè®¡æ°ï¼DH&DLï¼DXï¼æ°æ®å¯åå¨ï¼å¸¸ç¨äºæ°æ®ä¼ éã为äºè¿ç¨ææçå
å空é´ï¼8086设å®äºå个段å¯åå¨ï¼ä¸é¨ç¨æ¥ä¿å段å°åï¼CSï¼Code Segmentï¼ï¼ä»£ç 段å¯åå¨ï¼DSï¼Data Segmentï¼ï¼æ°æ®æ®µå¯åå¨ï¼SSï¼Stack Segmentï¼ï¼å æ 段å¯åå¨ï¼ESï¼Extra Segmentï¼ï¼éå 段å¯åå¨ãå½ä¸ä¸ªç¨åºè¦æ§è¡æ¶ï¼å°±è¦å³å®ç¨åºä»£ç ãæ°æ®åå æ åè¦ç¨å°å
åçåªäºä½ç½®ï¼éè¿è®¾å®æ®µå¯åå¨ CSï¼DSï¼SS æ¥æåè¿äºèµ·å§ä½ç½®ãé常æ¯å°DSåºå®ï¼èæ ¹æ®éè¦ä¿®æ¹CSãæ以ï¼ç¨åºå¯ä»¥å¨å¯å¯»å空é´å°äº64Kçæ
åµä¸è¢«åæä»»æ大å°ã æ以ï¼ç¨åºåå
¶æ°æ®ç»åèµ·æ¥ç大å°ï¼éå¶å¨DS ææç64Kå
ï¼è¿å°±æ¯COMæ件ä¸å¾å¤§äº64Kçåå ã8086以å
åå为æåºï¼ç¨å¯åå¨å为åäºåºå°ï¼ä»¥å éå·¥ä½ãé¤äºåé¢ææçå¯åå¨å¤ï¼è¿æä¸äºç¹æ®åè½çå¯åå¨ï¼IPï¼Intruction Pointerï¼ï¼æ令æéå¯åå¨ï¼ä¸CSé
å使ç¨ï¼å¯è·è¸ªç¨åºçæ§è¡è¿ç¨ï¼SPï¼Stack Pointerï¼ï¼å æ æéï¼ä¸SSé
å使ç¨ï¼å¯æåç®åçå æ ä½ç½®ãBPï¼Base Pointerï¼ï¼åºåæéå¯åå¨ï¼å¯ç¨ä½SSçä¸ä¸ªç¸å¯¹åºåä½ç½®ï¼SIï¼Source Indexï¼ï¼æºååå¯åå¨å¯ç¨æ¥åæ¾ç¸å¯¹äºDS段ä¹æºååæéï¼DIï¼Destination Indexï¼ï¼ç®çååå¯åå¨ï¼å¯ç¨æ¥åæ¾ç¸å¯¹äº ES 段ä¹ç®çååæéãè¿æä¸ä¸ªæ å¿å¯åå¨FRï¼Flag Registerï¼,æä¹ä¸ªææä¹çæ å¿(
ãã
ããOF: 溢åºæ å¿ä½OFç¨äºåæ æ符å·æ°å åè¿ç®æå¾ç»ææ¯å¦æº¢åºãå¦æè¿ç®ç»æè¶ è¿å½åè¿ç®ä½æ°æè½è¡¨ç¤ºçèå´ï¼å称为溢åºï¼OFçå¼è¢«ç½®ä¸º1ï¼å¦åï¼OFçå¼è¢«æ¸ 为0.
ãã
ããDF: æ¹åæ å¿DFä½ç¨æ¥å³å®å¨ä¸²æä½æ令æ§è¡æ¶æå ³æéå¯åå¨åçè°æ´çæ¹åã
ãã
ããIF: ä¸æå 许æ å¿IFä½ç¨æ¥å³å®CPUæ¯å¦ååºCPUå¤é¨çå¯å±è½ä¸æååºçä¸æ请æ±ãä½ä¸ç®¡è¯¥æ å¿ä¸ºä½å¼ï¼CPUé½å¿ é¡»ååºCPUå¤é¨çä¸å¯å±è½ä¸ææååºçä¸æ请æ±ï¼ä»¥åCPUå é¨äº§ççä¸æ请æ±ãå ·ä½è§å®å¦ä¸ï¼
ãã
ãã(1)ãå½IF=1æ¶ï¼CPUå¯ä»¥ååºCPUå¤é¨çå¯å±è½ä¸æååºçä¸æ请æ±ï¼
ãã
ãã(2)ãå½IF=0æ¶ï¼CPUä¸ååºCPUå¤é¨çå¯å±è½ä¸æååºçä¸æ请æ±ã
ãã
ããTF: ç¶ææ§å¶æ å¿ä½æ¯ç¨æ¥æ§å¶CPUæä½çï¼å®ä»¬è¦éè¿ä¸é¨çæ令æè½ä½¿ä¹åçæ¹å
ãã
ããSF: 符å·æ å¿SFç¨æ¥åæ è¿ç®ç»æç符å·ä½ï¼å®ä¸è¿ç®ç»æçæé«ä½ç¸åãå¨å¾®æºç³»ç»ä¸ï¼æ符å·æ°éç¨è¡¥ç 表示æ³ï¼æ以ï¼SFä¹å°±åæ è¿ç®ç»æçæ£è´å·ãè¿ç®ç»æ为æ£æ°æ¶ï¼SFçå¼ä¸º0ï¼å¦åå ¶å¼ä¸º1ã
ãã
ããZF: é¶æ å¿ZFç¨æ¥åæ è¿ç®ç»ææ¯å¦ä¸º0ãå¦æè¿ç®ç»æ为0ï¼åå ¶å¼ä¸º1ï¼å¦åå ¶å¼ä¸º0ãå¨å¤æè¿ç®ç»ææ¯å¦ä¸º0æ¶ï¼å¯ä½¿ç¨æ¤æ å¿ä½ã
ãã
ããAF: ä¸åæ åµä¸ï¼è¾ å©è¿ä½æ å¿AFçå¼è¢«ç½®ä¸º1ï¼å¦åå ¶å¼ä¸º0ï¼
ãã
ãã(1)ãå¨åæä½æ¶ï¼åçä½åèåé«åèè¿ä½æåä½æ¶ï¼
ãã(2)ãå¨åèæä½æ¶ï¼åçä½4ä½åé«4ä½è¿ä½æåä½æ¶ã
ãã
ããPF: å¥å¶æ å¿PFç¨äºåæ è¿ç®ç»æä¸â1âç个æ°çå¥å¶æ§ãå¦æâ1âç个æ°ä¸ºå¶æ°ï¼åPFçå¼ä¸º1ï¼å¦åå ¶å¼ä¸º0ã
ãã
ããCF: è¿ä½æ å¿CF主è¦ç¨æ¥åæ è¿ç®æ¯å¦äº§çè¿ä½æåä½ãå¦æè¿ç®ç»æçæé«ä½äº§çäºä¸ä¸ªè¿ä½æåä½ï¼é£ä¹ï¼å ¶å¼ä¸º1ï¼å¦åå ¶å¼ä¸º0ã)
ãã
ããOF: 溢åºæ å¿ä½OFç¨äºåæ æ符å·æ°å åè¿ç®æå¾ç»ææ¯å¦æº¢åºãå¦æè¿ç®ç»æè¶ è¿å½åè¿ç®ä½æ°æè½è¡¨ç¤ºçèå´ï¼å称为溢åºï¼OFçå¼è¢«ç½®ä¸º1ï¼å¦åï¼OFçå¼è¢«æ¸ 为0.
ãã
ããDF: æ¹åæ å¿DFä½ç¨æ¥å³å®å¨ä¸²æä½æ令æ§è¡æ¶æå ³æéå¯åå¨åçè°æ´çæ¹åã
ãã
ããIF: ä¸æå 许æ å¿IFä½ç¨æ¥å³å®CPUæ¯å¦ååºCPUå¤é¨çå¯å±è½ä¸æååºçä¸æ请æ±ãä½ä¸ç®¡è¯¥æ å¿ä¸ºä½å¼ï¼CPUé½å¿ é¡»ååºCPUå¤é¨çä¸å¯å±è½ä¸ææååºçä¸æ请æ±ï¼ä»¥åCPUå é¨äº§ççä¸æ请æ±ãå ·ä½è§å®å¦ä¸ï¼
ãã
ãã(1)ãå½IF=1æ¶ï¼CPUå¯ä»¥ååºCPUå¤é¨çå¯å±è½ä¸æååºçä¸æ请æ±ï¼
ãã
ãã(2)ãå½IF=0æ¶ï¼CPUä¸ååºCPUå¤é¨çå¯å±è½ä¸æååºçä¸æ请æ±ã
ãã
ããTF: ç¶ææ§å¶æ å¿ä½æ¯ç¨æ¥æ§å¶CPUæä½çï¼å®ä»¬è¦éè¿ä¸é¨çæ令æè½ä½¿ä¹åçæ¹å
ãã
ããSF: 符å·æ å¿SFç¨æ¥åæ è¿ç®ç»æç符å·ä½ï¼å®ä¸è¿ç®ç»æçæé«ä½ç¸åãå¨å¾®æºç³»ç»ä¸ï¼æ符å·æ°éç¨è¡¥ç 表示æ³ï¼æ以ï¼SFä¹å°±åæ è¿ç®ç»æçæ£è´å·ãè¿ç®ç»æ为æ£æ°æ¶ï¼SFçå¼ä¸º0ï¼å¦åå ¶å¼ä¸º1ã
ãã
ããZF: é¶æ å¿ZFç¨æ¥åæ è¿ç®ç»ææ¯å¦ä¸º0ãå¦æè¿ç®ç»æ为0ï¼åå ¶å¼ä¸º1ï¼å¦åå ¶å¼ä¸º0ãå¨å¤æè¿ç®ç»ææ¯å¦ä¸º0æ¶ï¼å¯ä½¿ç¨æ¤æ å¿ä½ã
ãã
ããAF: ä¸åæ åµä¸ï¼è¾ å©è¿ä½æ å¿AFçå¼è¢«ç½®ä¸º1ï¼å¦åå ¶å¼ä¸º0ï¼
ãã
ãã(1)ãå¨åæä½æ¶ï¼åçä½åèåé«åèè¿ä½æåä½æ¶ï¼
ãã(2)ãå¨åèæä½æ¶ï¼åçä½4ä½åé«4ä½è¿ä½æåä½æ¶ã
ãã
ããPF: å¥å¶æ å¿PFç¨äºåæ è¿ç®ç»æä¸â1âç个æ°çå¥å¶æ§ãå¦æâ1âç个æ°ä¸ºå¶æ°ï¼åPFçå¼ä¸º1ï¼å¦åå ¶å¼ä¸º0ã
ãã
ããCF: è¿ä½æ å¿CF主è¦ç¨æ¥åæ è¿ç®æ¯å¦äº§çè¿ä½æåä½ãå¦æè¿ç®ç»æçæé«ä½äº§çäºä¸ä¸ªè¿ä½æåä½ï¼é£ä¹ï¼å ¶å¼ä¸º1ï¼å¦åå ¶å¼ä¸º0ã)
温馨提示:答案为网友推荐,仅供参考
第1个回答 2006-03-04
寄存器(Register)是CPU内部的元件,所以在寄存器之间的数据传送非常快。用途:1.可将寄存器内的数据执行算术及逻辑运算。2.存于寄存器内的地址可用来指向内存的某个位置,即寻址。3.可以用来读写数据到电脑的周边设备。8086 有8个8位数据寄存器,这些8位寄存器可分别组成16位寄存器:AH&AL=AX:累加寄存器,常用于运算;BH&BL=BX:基址寄存器,常用于地址索引;CH&CL=CX:计数寄存器,常用于计数;DH&DL=DX:数据寄存器,常用于数据传递。为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址:CS(Code Segment):代码段寄存器;DS(Data Segment):数据段寄存器;SS(Stack Segment):堆栈段寄存器;ES(Extra Segment):附加段寄存器。当一个程序要执行时,就要决定程序代码、数据和堆栈各要用到内存的哪些位置,通过设定段寄存器 CS,DS,SS 来指向这些起始位置。通常是将DS固定,而根据需要修改CS。所以,程序可以在可寻址空间小于64K的情况下被写成任意大小。 所以,程序和其数据组合起来的大小,限制在DS 所指的64K内,这就是COM文件不得大于64K的原因。8086以内存做为战场,用寄存器做为军事基地,以加速工作。除了前面所提的寄存器外,还有一些特殊功能的寄存器:IP(Intruction Pointer):指令指针寄存器,与CS配合使用,可跟踪程序的执行过程;SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置。BP(Base Pointer):基址指针寄存器,可用作SS的一个相对基址位置;SI(Source Index):源变址寄存器可用来存放相对于DS段之源变址指针;DI(Destination Index):目的变址寄存器,可用来存放相对于 ES 段之目的变址指针。还有一个标志寄存器FR(Flag Register),有九个有意义的标志(
OF: 溢出标志位OF用于反映有符号数加减运算所得结果是否溢出。如果运算结果超过当前运算位数所能表示的范围,则称为溢出,OF的值被置为1,否则,OF的值被清为0.
DF: 方向标志DF位用来决定在串操作指令执行时有关指针寄存器发生调整的方向。
IF: 中断允许标志IF位用来决定CPU是否响应CPU外部的可屏蔽中断发出的中断请求。但不管该标志为何值,CPU都必须响应CPU外部的不可屏蔽中断所发出的中断请求,以及CPU内部产生的中断请求。具体规定如下:
(1)、当IF=1时,CPU可以响应CPU外部的可屏蔽中断发出的中断请求;
(2)、当IF=0时,CPU不响应CPU外部的可屏蔽中断发出的中断请求。
TF: 状态控制标志位是用来控制CPU操作的,它们要通过专门的指令才能使之发生改变
SF: 符号标志SF用来反映运算结果的符号位,它与运算结果的最高位相同。在微机系统中,有符号数采用补码表示法,所以,SF也就反映运算结果的正负号。运算结果为正数时,SF的值为0,否则其值为1。
ZF: 零标志ZF用来反映运算结果是否为0。如果运算结果为0,则其值为1,否则其值为0。在判断运算结果是否为0时,可使用此标志位。
AF: 下列情况下,辅助进位标志AF的值被置为1,否则其值为0:
(1)、在字操作时,发生低字节向高字节进位或借位时;
(2)、在字节操作时,发生低4位向高4位进位或借位时。
PF: 奇偶标志PF用于反映运算结果中“1”的个数的奇偶性。如果“1”的个数为偶数,则PF的值为1,否则其值为0。
CF: 进位标志CF主要用来反映运算是否产生进位或借位。如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。)
以上是8086寄存器的整体概况, 自80386开始,PC进入
32bit时代,其寻址方式,寄存器大小, 功能等都发生了变化, 要想学习这方面知识请参考相应资料.
关于寄存器就写这么多了,学习汇编和学习别的语言一样
要多想,多练,多看, 这样才会有提高.
下面是一些汇编书籍和网站, 对你学习会有帮助的.
网站:
x86汇编小站
Aogo汇编小站
罗云彬的编程乐园
里面有汇编学习资料.
书籍:
1. IBM-PC 汇编语言程序设计(2th)
2. <<80x86 IBM PC及兼容计算机(卷I和II) — 汇编语言、设计与接口技术>>; 这本书很牛, 建议入手;
中文的汇编好书比较少,如果你英语不错的话,可以看看
下面这些(都很经典!!!):
01. <<Mastering Turbo Assembler>>
02. <<Using Assembly Language>>
04. <<Assembly Language Primer for the IBM PC/XT>>
05. <<Assembly Language from Square One>>
06. <<Assembly Language for the IBM PC>>
07. <<Assembly Language and Systems Programming for the IBM PC and Compatables>>
08. <<Assembler Inside & Out>>
09. <<The Zen of Assembly>>
10. <<IBM Microcomputers: A Programmer's Handbook>>
11. <<Programmer's Problem Solver for the IBM PC, XT, and AT>>
12. <<IBM PC ASSEMBLER LANGUAGE AND PROGRAMMING>>
13. <<80386: A Programming and Design Handbook>>, 2nd Ed
14. <<80486 Programming>>
15. <<Master Class Assembly Language>>
16. <<Programmer's Guide to PC & PS/2 Video Systems>>
17. <<Power Graphics Programming>>
18. <<Programmers Guide to the EGA and VGA cards>>, 3rd Ed.
19. <<AdvancEd Programmers Guide to the EGA/VGA>>
20. <<UndocumentEd DOS>>
21. <<DOS Programmer's Reference>>
22. <<386SX Microprocessor Programmer's Reference Manual>>
23. <<i486 Microprocessor Programmer's Reference Manual>>
24. <<The Programmer's PC Sourcebook>>
25. <<System BIOS for IBM PCs, Compatables, and EISA Computers>>, 2nd Ed.
26. <<PC Magazine Programmers Technical Reference: The Processor and Coprocessor>>
27. <<Mastering Serial Communications>>
28. <<DOS Programmer's Reference>>, 2nd Ed.
29. <<MS-DOS Programmer's Reference>>
最后祝你学习愉快
OF: 溢出标志位OF用于反映有符号数加减运算所得结果是否溢出。如果运算结果超过当前运算位数所能表示的范围,则称为溢出,OF的值被置为1,否则,OF的值被清为0.
DF: 方向标志DF位用来决定在串操作指令执行时有关指针寄存器发生调整的方向。
IF: 中断允许标志IF位用来决定CPU是否响应CPU外部的可屏蔽中断发出的中断请求。但不管该标志为何值,CPU都必须响应CPU外部的不可屏蔽中断所发出的中断请求,以及CPU内部产生的中断请求。具体规定如下:
(1)、当IF=1时,CPU可以响应CPU外部的可屏蔽中断发出的中断请求;
(2)、当IF=0时,CPU不响应CPU外部的可屏蔽中断发出的中断请求。
TF: 状态控制标志位是用来控制CPU操作的,它们要通过专门的指令才能使之发生改变
SF: 符号标志SF用来反映运算结果的符号位,它与运算结果的最高位相同。在微机系统中,有符号数采用补码表示法,所以,SF也就反映运算结果的正负号。运算结果为正数时,SF的值为0,否则其值为1。
ZF: 零标志ZF用来反映运算结果是否为0。如果运算结果为0,则其值为1,否则其值为0。在判断运算结果是否为0时,可使用此标志位。
AF: 下列情况下,辅助进位标志AF的值被置为1,否则其值为0:
(1)、在字操作时,发生低字节向高字节进位或借位时;
(2)、在字节操作时,发生低4位向高4位进位或借位时。
PF: 奇偶标志PF用于反映运算结果中“1”的个数的奇偶性。如果“1”的个数为偶数,则PF的值为1,否则其值为0。
CF: 进位标志CF主要用来反映运算是否产生进位或借位。如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。)
以上是8086寄存器的整体概况, 自80386开始,PC进入
32bit时代,其寻址方式,寄存器大小, 功能等都发生了变化, 要想学习这方面知识请参考相应资料.
关于寄存器就写这么多了,学习汇编和学习别的语言一样
要多想,多练,多看, 这样才会有提高.
下面是一些汇编书籍和网站, 对你学习会有帮助的.
网站:
x86汇编小站
Aogo汇编小站
罗云彬的编程乐园
里面有汇编学习资料.
书籍:
1. IBM-PC 汇编语言程序设计(2th)
2. <<80x86 IBM PC及兼容计算机(卷I和II) — 汇编语言、设计与接口技术>>; 这本书很牛, 建议入手;
中文的汇编好书比较少,如果你英语不错的话,可以看看
下面这些(都很经典!!!):
01. <<Mastering Turbo Assembler>>
02. <<Using Assembly Language>>
04. <<Assembly Language Primer for the IBM PC/XT>>
05. <<Assembly Language from Square One>>
06. <<Assembly Language for the IBM PC>>
07. <<Assembly Language and Systems Programming for the IBM PC and Compatables>>
08. <<Assembler Inside & Out>>
09. <<The Zen of Assembly>>
10. <<IBM Microcomputers: A Programmer's Handbook>>
11. <<Programmer's Problem Solver for the IBM PC, XT, and AT>>
12. <<IBM PC ASSEMBLER LANGUAGE AND PROGRAMMING>>
13. <<80386: A Programming and Design Handbook>>, 2nd Ed
14. <<80486 Programming>>
15. <<Master Class Assembly Language>>
16. <<Programmer's Guide to PC & PS/2 Video Systems>>
17. <<Power Graphics Programming>>
18. <<Programmers Guide to the EGA and VGA cards>>, 3rd Ed.
19. <<AdvancEd Programmers Guide to the EGA/VGA>>
20. <<UndocumentEd DOS>>
21. <<DOS Programmer's Reference>>
22. <<386SX Microprocessor Programmer's Reference Manual>>
23. <<i486 Microprocessor Programmer's Reference Manual>>
24. <<The Programmer's PC Sourcebook>>
25. <<System BIOS for IBM PCs, Compatables, and EISA Computers>>, 2nd Ed.
26. <<PC Magazine Programmers Technical Reference: The Processor and Coprocessor>>
27. <<Mastering Serial Communications>>
28. <<DOS Programmer's Reference>>, 2nd Ed.
29. <<MS-DOS Programmer's Reference>>
最后祝你学习愉快
第2个回答 2006-03-04
晕! 这是《微机原理》这本书专本论述的``` 比较复杂,要想正明白的话,还是正本书研究一下吧!
第3个回答 2006-03-04
指针寄存器
32位CPU有2个32位通用寄存器EBP和ESP。其低16位对应先前CPU中的SBP和SP,对低16位数据的存取,不影响高16位的数据。
寄存器EBP、ESP、BP和SP称为指针寄存器(Pointer Register),主要用于存放堆栈内存储单元的偏移量,用它们可实现多种存储器操作数的寻址方式(在第3章有详细介绍),为以不同的地址形式访问存储单元提供方便。
指针寄存器不可分割成8位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。
它们主要用于访问堆栈内的存储单元,并且规定:
BP为基指针(Base Pointer)寄存器,用它可直接存取堆栈中的数据;
SP为堆栈指针(Stack Pointer)寄存器,用它只可访问栈顶。
段寄存器
段寄存器是根据内存分段的管理模式而设置的。内存单元的物理地址由段寄存器的值和一个偏移量组合而成的,这样可用两个较少位数的值组合成一个可访问较大物理空间的内存地址。
CPU内部的段寄存器:
CS——代码段寄存器(Code Segment Register),其值为代码段的段值;
DS——数据段寄存器(Data Segment Register),其值为数据段的段值;
ES——附加段寄存器(Extra Segment Register),其值为附加数据段的段值;
SS——堆栈段寄存器(Stack Segment Register),其值为堆栈段的段值;
FS——附加段寄存器(Extra Segment Register),其值为附加数据段的段值;
GS——附加段寄存器(Extra Segment Register),其值为附加数据段的段值。
在16位CPU系统中,它只有4个段寄存器,所以,程序在任何时刻至多有4个正在使用的段可直接访问;在32位微机系统中,它有6个段寄存器,所以,在此环境下开发的程序最多可同时访问6个段。
32位CPU有两个不同的工作方式:实方式和保护方式。在每种方式下,段寄存器的作用是不同的。有关规定简单描述如下:
实方式: 前4个段寄存器CS、DS、ES和SS与先前CPU中的所对应的段寄存器的含义完全一致,内存单元的逻辑地址仍为“段值:偏移量”的形式。为访问某内存段内的数据,必须使用该段寄存器和存储单元的偏移量。
保护方式: 在此方式下,情况要复杂得多,装入段寄存器的不再是段值,而是称为“选择子”(Selector)的某个值。段寄存器的具体作用在此不作进一步介绍了,有兴趣的读者可参阅其它科技资料。
你参考
32位CPU有2个32位通用寄存器EBP和ESP。其低16位对应先前CPU中的SBP和SP,对低16位数据的存取,不影响高16位的数据。
寄存器EBP、ESP、BP和SP称为指针寄存器(Pointer Register),主要用于存放堆栈内存储单元的偏移量,用它们可实现多种存储器操作数的寻址方式(在第3章有详细介绍),为以不同的地址形式访问存储单元提供方便。
指针寄存器不可分割成8位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。
它们主要用于访问堆栈内的存储单元,并且规定:
BP为基指针(Base Pointer)寄存器,用它可直接存取堆栈中的数据;
SP为堆栈指针(Stack Pointer)寄存器,用它只可访问栈顶。
段寄存器
段寄存器是根据内存分段的管理模式而设置的。内存单元的物理地址由段寄存器的值和一个偏移量组合而成的,这样可用两个较少位数的值组合成一个可访问较大物理空间的内存地址。
CPU内部的段寄存器:
CS——代码段寄存器(Code Segment Register),其值为代码段的段值;
DS——数据段寄存器(Data Segment Register),其值为数据段的段值;
ES——附加段寄存器(Extra Segment Register),其值为附加数据段的段值;
SS——堆栈段寄存器(Stack Segment Register),其值为堆栈段的段值;
FS——附加段寄存器(Extra Segment Register),其值为附加数据段的段值;
GS——附加段寄存器(Extra Segment Register),其值为附加数据段的段值。
在16位CPU系统中,它只有4个段寄存器,所以,程序在任何时刻至多有4个正在使用的段可直接访问;在32位微机系统中,它有6个段寄存器,所以,在此环境下开发的程序最多可同时访问6个段。
32位CPU有两个不同的工作方式:实方式和保护方式。在每种方式下,段寄存器的作用是不同的。有关规定简单描述如下:
实方式: 前4个段寄存器CS、DS、ES和SS与先前CPU中的所对应的段寄存器的含义完全一致,内存单元的逻辑地址仍为“段值:偏移量”的形式。为访问某内存段内的数据,必须使用该段寄存器和存储单元的偏移量。
保护方式: 在此方式下,情况要复杂得多,装入段寄存器的不再是段值,而是称为“选择子”(Selector)的某个值。段寄存器的具体作用在此不作进一步介绍了,有兴趣的读者可参阅其它科技资料。
你参考