11.10.05
80×86 CPU结构
第一扯:80×86 CPU结构
ä¸?ä¹ æƒ¯æŒ‰ç…§é‚£äº›è€?的方法æ?¥ä¸€èŠ‚èŠ‚çš„æŽ’ç‰ˆä»€ä¹ˆçš„ï¼Œæˆ‘ä¸ªäººè®¤ä¸ºé‚£æ˜¯æµªè´¹æ—¶é—´ã€‚å½“ç„¶æ˜¯æ–¹ä¾¿é˜…è¯»äº†ã€‚ä¸?过我ä¸?为别人的时间买å?•ã€‚æˆ‘çš„å†™ä½œå…¨éƒ¨æ˜¯ä¸€æ®µä¸€ä¸ªä¸»é¢˜çš„å†™äº†ã€‚æ‰€ä»¥å¦‚æžœä½ æƒ³é˜…è¯»ï¼Œè¯·è´¹å¿ƒã€‚
Cpu的组æˆ?,关于什么是cpu我就ä¸?多少了,相信计算机系的ä¸?知é?“是什么的都在回家的路上了。总的æ?¥è¯´cpu由三个主è¦?的部分æ?¥ç»„æˆ?的。1.算术逻辑部件,主è¦?用æ?¥ç®—术和逻辑è¿?算的,少了他就ç‰äºŽIQ30。2.控制逻辑,他负责对全机的控制工作,比如å?–指令,译ç ?ç‰ã€‚3.工作寄å˜å™¨ï¼Œè¯´ç™½äº†å°±æ˜¯å¿«é€Ÿå†…å˜ï¼Œç”±äºŽé›†æˆ?到了cpu里é?¢é€Ÿåº¦å¿«ï¼Œæ‰€ä»¥æ˜‚贵。这三个缺一ä¸?å?¯ï¼Œè‡ªå·±çœ‹ç?€è®°å?§ã€‚
看了上é?¢æˆ‘的介ç»?,大家应该了解关于组æˆ?部分的1,2我是扯ä¸?å‡ºä»€ä¹ˆæ·¡çš„ï¼Œå› ä¸º1我ä¸?是信电系的,2我ä¸?知é?“intel的商业机密。ä¸?过3寄å˜å™¨çš„地方我还是å?¯ä»¥ç‹‚扯淡的。寄å˜å™¨æ€»ä½“分为å?¯è§?å’Œä¸?å?¯è§?的,我们å?ªè®¨è®ºå?¯è§?的,分为三ç§?,分别是通用寄å˜å™¨ï¼Œä¸“用寄å˜å™¨ï¼Œè¿˜æœ‰æ®µå¯„å˜å™¨ã€‚通用的寄å˜å™¨æœ‰å¤ªå¤šäº†ï¼Œä¸‹é?¢æˆ‘列个表给大家一个直观的效果æ?¥çœ‹çœ‹ã€‚
|
å??ç§° |
英文 |
32ä½? |
作用 |
|---|---|---|---|
|
AX |
Accumulator |
EAX |
ä½œä¸ºç´¯åŠ å™¨ä½¿ç”¨ï¼Œæ˜¯ç®—æœ¯è¿?算的主è¦?寄å˜å™¨ |
|
BX |
Base |
EBX |
通常作为基å?€å¯„å˜å™¨ |
|
CX |
Count |
ECX |
ç§»ä½?指令,循环,串处ç?†æŒ‡ä»¤ä¸çš„éš?å?«çš„计数器 |
|
DX |
Data |
EDX |
一般å?Œå—é•¿è¿?ç®—DXå˜æ”¾é«˜ä½?,和AX组å?ˆï¼ŒAXå˜æ”¾ä½Žä½?。ioæ“?作的时候DXç”¨ä¸Žå˜æ”¾ç«¯å?£åœ°å?€ |
|
SP |
Stacks |
ESP |
SPå’ŒSSï¼ˆå †æ ˆæ®µå¯„å˜å™¨ï¼‰æŽ¥å?ˆï¼ŒSP指定æ–é¡¶çš„å??移地å?€ |
|
BP |
Base |
EBP |
ä½œä¸ºæ®µå †æ ˆåŒºçš„ä¸€ä¸ªåŸºå?€ï¼Œå’ŒSP接å?ˆè®¿é—®æ®µå †æ ˆä¸çš„ä¿¡æ?¯ |
|
SI |
Source |
ESI |
和数æ?®æ®µå¯„å˜å™¨ï¼ˆDS),DIè?”å?ˆä½¿ç”¨æ?¥ç¡®å®šæ•°æ?®æ®µä¸çš„æŸ?一数æ?®å˜å‚¨å?•元的地å?€ã€‚ |
|
DI |
Destination |
|
和数æ?®æ®µå¯„å˜å™¨ï¼ˆDS),SIè?”å?ˆä½¿ç”¨æ?¥ç¡®å®šæ•°æ?®æ®µä¸çš„æŸ?一数æ?®å˜å‚¨å?•元的地å?€ã€‚SIå’ŒDIæœ‰è‡ªåŠ å’Œè‡ªå‡?的功能,方便数æ?®å¯»å?€ã€‚ |
专用寄å˜å™¨åŒ…括3个寄å˜å™¨ã€‚SP,IPå’ŒFLAGS。IP(instruction pointer)指令指针寄å˜å™¨ï¼Œç”¨æ?¥å˜æ”¾ä»£ç ?段ä¸çš„å??移地å?€ï¼Œä»–始终指å?‘下一æ?¡æŒ‡ä»¤çš„首地å?€ã€‚通常和段寄å˜å™¨CSæ?¥ç¡®å®šä¸‹ä¸€æ?¡æŒ‡ä»¤çš„物ç?†åœ°å?€ã€‚SP(stacks pointerï¼‰å †æ ˆæŒ‡é’ˆå¯„å˜å™¨ï¼Œç”¨æ?¥ä¸Žå †æ ˆæ®µå¯„å˜å™¨è?”å?ˆä½¿ç”¨æ?¥ç¡®å®šæ®µå¯„å˜å™¨æ®µé¡¶çš„地å?€ã€‚ä¹Ÿå°±æ˜¯å˜æ”¾æ®µé¡¶çš„å??移地å?€ã€‚FLAGSæ ‡å¿—å¯„å˜å™¨å¾ˆå?ˆæ„?æ€?,让人ç?†è§£äº†å¾ˆå¤šCè¯è¨€ä¸?能ç?†è§£çš„东西,比如è¿?算怎么知é?“符å?·ï¼Œè°ƒè¯•时为什么å?¯ä»¥å®žçŽ°æ‰§è¡Œä¸€æ?¡æŒ‡ä»¤å°±æš‚å?œçš„。下é?¢æˆ‘列个表æ?¥çœ‹çœ‹ï¼Œå¾ˆå¥½çŽ©çš„ã€‚
æ?¡ä»¶ç ?æ ‡å¿—ï¼š
|
å??ç§° |
英文 |
作用 |
|---|---|---|
|
æº¢å‡ºæ ‡å¿— |
Overflow |
æ“?ä½œæ•°è¶…å‡ºäº†æœºå™¨çš„è¡¨ç¤ºèŒƒå›´ç§°ä¸ºæº¢å‡ºï¼Œæ¤æ—¶çš„of为1,其他为0 |
|
符å?·æ ‡å¿— |
Sign |
记录è¿?算结果的符å?·ï¼Œè´Ÿä¸º1,æ£ä¸º0 |
|
é›¶æ ‡å¿— |
Zero |
�算结果为0时zf为1,其他为0 |
|
è¿›ä½?æ ‡å¿— |
Carry |
记录�算时从最高�产生的进�值,有效值1 |
|
辅助进ä½?æ ‡å¿— |
Af |
记录�算是第三�产生的进�值 |
|
奇å?¶æ ‡å¿— |
Parity |
错误监测 |
2.æŽ§åˆ¶æ ‡å¿—ä½?作为方å?‘æ ‡å¿—ï¼ˆdirection flag,df),在串处ç?†æŒ‡ä»¤ä¸æŽ§åˆ¶å¤„ç?†ä¿¡æ?¯çš„æ–¹å?‘,当他为1时候,æ¯?次æ“?作å?Žå?˜å?€å¯„å˜å™¨SIå’ŒDI都会å‡?少。为0æ—¶å°±æ˜¯å¢žåŠ äº†ã€‚
3.ç³»ç»Ÿæ ‡å¿—ä½?,用于I/O,å?¯å±?è”½ä¸æ–ç‰æŽ§åˆ¶ã€‚è®²è®²å¸¸ç”¨çš„ï¼Œé™·é˜±æ ‡å¿—ç”¨äºŽè°ƒè¯•æ—¶å€™çš„å?•æ¥æ‰§è¡Œï¼Œä¸æ–æ ‡å¿—ï¼Œå½“ä¸º1的时候å…?许cpuå“?应å?¯å±?è”½ä¸æ–的请求,å?¦åˆ™å…³é—,I/O特æ?ƒçº§ï¼Œç”¨äºŽåœ¨ä¿?护模å¼?下控制对I/O地å?€ç©ºé—´çš„访问。
下é?¢è®¨è®ºæ®µå¯„å˜å™¨ï¼Œè¿™ä¸ªå‰?é?¢å¤šæ¬¡è®¨è®ºçš„东西,主è¦?用于å˜å‚¨å™¨å¯»å?€çš„,他包括四个部分,代ç ?段(code segment)数æ?®æ®µï¼ˆdata segmentï¼‰å †æ ˆæ®µ (stacks segmentï¼‰è¿˜æœ‰é™„åŠ æ®µï¼ˆextrasegment)。当然在80386之å?Žå?ˆåŠ å…¥äº†FSå’ŒGS