第一章,我們介紹了有關彙編語言的基礎知識,在第二章我們主要介紹寄存器。 CPU的主要部件是寄存器,在8086CPU有14個寄存器,它們分別是:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。8086CPU的所有寄存器都是16位的,可以存放兩個位元組。AX、BX、C ...
第一章,我們介紹了有關彙編語言的基礎知識,在第二章我們主要介紹寄存器。
CPU的主要部件是寄存器,在8086CPU有14個寄存器,它們分別是:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。8086CPU的所有寄存器都是16位的,可以存放兩個位元組。AX、BX、CX、DX這4個寄存器通常用來存放一般性的數據,稱為通用寄存器。由於8086CPU的上一代CPU中的寄存器都是8位的,為了保持相容,8086CPU的AX、BX、CX、DX這4個寄存器都可分為兩個獨立使用的8位寄存器:
•AX可分為AH和AL •BX可分為BH和BL •CX可分為CH和CL •DX可分為DH和DL
出於相容性的問題,8086CPU可以處理兩種尺寸的數據:
位元組:記為byte,一個位元組由8個bit組成,可以存放在8位寄存器中
字:記為word,由兩個位元組組成,這兩個位元組分別被稱為高位位元組和低位位元組
通過彙編指令控制CPU進行工作:
在寫一條彙編指令或一個寄存器的名稱時不區分大小寫。
CPU執行程式段中的每條指令後,對寄存器中的數據的改變:
程式段中的最後一條指令add ax,bx,在執行前ax和bx中的數據為8226H,相加後的數據為:1044CH,但是ax為16位的寄存器,只能存放4位十六進位的數據,所以最高位的1不能在ax中保存,ax中的數據為:044CH,最高位的1並不是捨去了,而是存在了其他位置,隨著我們對彙編語言的慢慢深入,就會體會到程式設計師的聰明與機智。
註意:ax分出的兩個獨立的寄存器ah與al,它們是毫無關聯的,不要誤認為al的數據相加後超出的位數存放在ah中!
每一個記憶體單元都有唯一的地址,稱為物理地址。
16位結構的8086CPU:
1.運算器一次最多可以處理16位的數據。
2.寄存器的最大寬度為16位。
3.寄存器和運算器之間的通路為16位。
8086CPU有20位地址匯流排,可以達到1MB的定址能力,那它怎麼用16位地址來達成20位物理地址的呢?
8086CPU採用在內部用兩個16位地址合成的方法來形容一個20位的物理地址。
邏輯結構如圖所示:
地址加法器採用:物理地址=段地址*16+偏移地址的方法進行合成
“物理地址=段地址*16+偏移地址”本質含義:CPU在訪問記憶體時,用一個基礎地址(段地址*16)和一個相對於基礎地址的偏移地址相加,給出記憶體單元的物理地址。
段的概念:每一個段有一個段地址,但是記憶體並不是被劃分成一段一段的,而是由於CPU進行劃分。
由於16位地址的定址能力是64KB,所以一個段的最大長度為64KB,並且段的起始地址一定是16的倍數,變化範圍為0~ffffH。
8086CPU有4個段寄存器:CS,DS,SS,ES。
CS和IP是8086CPU中兩個最關鍵的寄存器,CS為代碼段寄存器,IP為指令指針寄存器。
8086CPU讀取、執行的工作原理:
CS和IP的值是可以修改的:IP每次是根據指令的空間大小進行更新。
簡單的修改CS、IP的指令:jmp指令。
①同時修改CS、IP的內容:jmp段地址:偏移地址
②只修改IP的內容:jmp 某一合法寄存器