8086匯編語言初學者教程(第一部分) 本教程是為從未接觸過匯編語言的或者略知一二的朋友編寫的。 當然,如果你有其他語言基礎(Basic, C/C++, Pascal...) 更 好。但是,即使你熟悉匯編語言,最好也將本文通讀以便熟悉 Emu8086 標記。 這里假定您已經掌握了關於數制的知識(十六進制/二進制), 如果目前還沒有,在進行下面內容之前,請參考上一章節 進制。
匯編語言是底層編程語言。為了學習這門語言,你需要對於 計算機結構有所了解。計算機系統模型如下: 系統總線 system bus(圖中黃色部分)是將計算機各個 部分連接到一起的部件。 CPU是計算機的心臟,大部分的運算都是在CPU中完成的。 RAM是讀取並且存放將要執行的程序的地方。
的是保存數值(變量)。上面提到的寄存器是16位的,意思是: 0011000000111001b (二進制),或者12345 (十進制形式)。
寄存器,例如 假設AX= 0011000000111001b, AH=00110000b AL=00111001b。當你修改其中任 意8位值,整個16位寄存器的值同樣改變。同樣對於其他的3 個寄存器,“H”表示高8位,“L”表示低8位。 寄存器在CPU內部,訪問中它們速度遠遠超過內存。因為, 訪問內存需要經過系統總線,所以時間要長一些。而訪問 寄存器中的數據幾乎不需要時間。於是,編程中,應當盡量 在寄存器中保存數據。雖然寄存器很小,並且這些寄存器都 有具體用途,但他們依然是存放計算中臨時數據的好地方。
一個好主意。段寄存器有着非常特別的目的--指出 可以訪問內存塊的地址。 區域。例如,如果我們打算訪問物理地址是12345h (十六進制)的內存單元,我們應設置DS = 1230h SI = 0045h 這樣以來,我們便能訪問超過一個寄存器 (16位)所能表示的內存地址的范圍。CPU計算物理地址 的方法是將段寄存器乘以10H在加上一個特定的通用 寄存器。(1230h * 10h + 45h = 12345h): (effective address) 默認下,BX, SI 及 DI 與 DS協同工作,BP SP 與 SS 寄存器協同工作。 其余的通用寄存器不能形成有效地址!同樣,盡管 BX可以形成有效地址,但是BH BL不能! 控制寄存
IP 始終同CS 協同工作,指出當前執行的指令。 Flags Register 完成一次數學運算后,由CPU自動 修改,通過它可以得到當前結果類型,也可以作為跳轉 語句條件。通常你無法直接訪問它們。 |