匯編語(yǔ)言基礎(chǔ)之CPU資源和存儲(chǔ)器

字號(hào):

第2章 CPU資源和存儲(chǔ)器
    計(jì)算機(jī)的硬件資源是用匯編語(yǔ)言編程所必須要了解的重要內(nèi)容,因?yàn)閰R編語(yǔ)言允許、也需要程序員直接使用這些硬件資源,只有這樣才能編寫(xiě)出高效的目標(biāo)代碼。
    在匯編語(yǔ)言中,需要訪問(wèn)的硬件資源主要有:CPU內(nèi)部資源、存儲(chǔ)器和I/O端口。本章將著重講解CPU內(nèi)部寄存器的命名、功能及其常見(jiàn)的用途,還要介紹存儲(chǔ)器的分段管理模式、存儲(chǔ)單元地址的表示法以及其物理地址的形成方式。
    2.1 寄存器組
    寄存器是CPU內(nèi)部重要的數(shù)據(jù)存儲(chǔ)資源,是匯編程序員能直接使用的硬件資源之一。由于寄存器的存取速度比內(nèi)存快,所以,在用匯編語(yǔ)言編寫(xiě)程序時(shí),要盡可能充分利用寄存器的存儲(chǔ)功能。
    寄存器一般用來(lái)保存程序的中間結(jié)果,為隨后的指令快速提供操作數(shù),從而避免把中間結(jié)果存入內(nèi)存,再讀取內(nèi)存的操作。在高級(jí)語(yǔ)言(如:C/C++語(yǔ)言)中,也有定義變量為寄存器類(lèi)型的,這就是提高寄存器利用率的一種可行的方法。
    另外,由于寄存器的個(gè)數(shù)和容量都有限,不可能把所有中間結(jié)果都存儲(chǔ)在寄存器中,所以,要對(duì)寄存器進(jìn)行適當(dāng)?shù)恼{(diào)度。根據(jù)指令的要求,如何安排適當(dāng)?shù)募拇嫫鳎苊獠僮鲾?shù)過(guò)多的傳送操作是一項(xiàng)細(xì)致而又周密的工作。有關(guān)“寄存器的分配策略”在后續(xù)課程《編譯原理》中會(huì)有詳細(xì)的介紹。
    由于16位/32位CPU是微機(jī)CPU的兩個(gè)重要代表,所以,在此只介紹它們內(nèi)部寄存器的名稱(chēng)及其主要功能。
    2.1.1 寄存器組
    1、 16位寄存器組
    16位CPU所含有的寄存器有(見(jiàn)圖2.1中16位寄存器部分):
    4個(gè)數(shù)據(jù)寄存器(AX、BX、CX和DX)2個(gè)變址和指針寄存器(SI和DI)2個(gè)指針寄存器(SP和BP)
    4個(gè)段寄存器(ES、CS、SS和DS)1個(gè)指令指針寄存器(IP)1個(gè)標(biāo)志寄存器(Flags)
    2、 32位寄存器組
    32位CPU除了包含了先前CPU的所有寄存器,并把通用寄存器、指令指針和標(biāo)志寄存器從16位擴(kuò)充成32位之外,還增加了2個(gè)16位的段寄存器:FS和GS。
    32位CPU所含有的寄存器有(見(jiàn)圖2.1中的寄存器):
    4個(gè)數(shù)據(jù)寄存器(EAX、EBX、ECX和EDX)2個(gè)變址和指針寄存器(ESI和EDI)2個(gè)指針寄存器(ESP和EBP)
    6個(gè)段寄存器(ES、CS、SS、DS、FS和GS)1個(gè)指令指針寄存器(EIP)1個(gè)標(biāo)志寄存器(EFlags)