汇编语言复习摘要二——寄存器
CPU中的主要部件是寄存器,寄存器是CPU中程序員可以用指令來讀寫的部件。通過改變各種寄存器中的內容來實現對CPU的控制。8086CPU有14個寄存器,這里不一一列舉。
?
1. 通用寄存器:8086CPU的所有寄存器都是16位的,也就是可以存放兩個字節。四個通用寄存器:AX,BX,CX,DX,通常用來存放一般性的數據。
一個16位的寄存器可以存放的最大數值是FFFFH。每個寄存器可分為兩個可獨立使用的8位寄存器:
AX分為AH和AL;BX分為BH和BL;CX分為CH和CL;DX分為DH和DL,H和L分別表示高8位和低8位。
?
2. 字在寄存器中存儲:一個字節是8bit,即一個byte,一個字則是兩個字節組成,16個bit,2個byte。所以8086CPU寄存器剛好用來存放一個字。
?
3. 幾條匯編指令:太簡單了,mov, add而已。要注意的是,像AL和AH這樣作為獨立使用的寄存器,它們之間是沒有關系的。
比如說,執行:mov al, 123H;結果是al的值為23H,最高位的1被丟棄,因為存儲不下了,但是并不會存儲到ah中,因為要記住,ah和al是相互獨立的。
在進行數據傳送和運算時,要注意指令的兩個操作對象的位數應該是要一致的。比如:mov ax, bx,正確;mov ax, bl,錯誤。前面是16位,后面的存儲器是8位,不一致。
?
4. 16位CPU:這意味著什么?就是CPU一次能處理、傳輸、暫時存儲的信息的最大長度是16位。
?
5. 8086CPU尋址方法:太重要了。8086CPU有20位地址總線,尋址能力為1MB,2^20 = 1MB。而8086CPU是16位的,如何達到20位的尋址?答案是采用兩個16位地址合成的方法來形成一個20位的物理地址。這兩個地址,一個被稱作段地址,另外一個被稱作偏移地址。處理流程大概如下:
1) 段地址和偏移地址一起送入一個稱作地址加法器的部件;
2)地址加法器算出結果,得到20位的物理地址;
3)結果送入輸入輸出控制電路;
4)輸入輸出電路將結果送到地址總線;
5)結果被地址總線傳送到存儲器;
地址加法器采用這樣的計算方法:段地址×16 + 偏移地址 = 物理地址。比如要訪問地址12345H,段地址為1230H,偏移地址為0045H,地址加法器這樣計算:1230H × 16 + 0045H = 12345H。為什么段地址是1230H?不可以是其他地址嗎?答案是可以的:
?
6. 尋址的本質含義:太重要了。如何理解“段地址×16 + 偏移地址 = 物理地址”?內存并沒有被分段,段的劃分來自CPU而已。如何確定段地址和偏移地址真的不重要,只要你通過段地址和偏移地址得到了最后正確的地址,那么你用任何劃分都是可以的。比如,21F60H物理地址,如何尋址?可以采用下面的劃分:段地址2000H,偏移地址1F60H;段地址2100H,偏移地址0F60H;等等,只要能算出正確的結果,怎么劃分都不重要。所以,這里有一個重要的結論:CPU可以用不同的段地址和偏移地址形成同一個物理地址。
在8086CPU中,存儲單元的地址用兩個元素來描述,即段地址和偏移地址。所以一般不說:數據在21F60H內存單元中,而是說:數據存在內存2000:1F60單元中。即要用段地址和偏移地址描述。
?
7。 CS和IP:8086CPU有4個段寄存器:CS,DS,SS,ES。CS和IP是兩個最關鍵的寄存器,因為它們指示了CPU當前要讀取指令的地址。CS為代碼段寄存器,IP為指令指針寄存器。任何時刻,設CS中的內容為M,IP中的內容為N,8086CPU將從內存M × 16 + N 單元開始,讀取一條指令并執行。可以說,CPU將CS:IP指向的內容當作指令執行。CPU讀取執行指令的流程為:
1)從CS:IP指向的內存單元讀取指令,讀取的指令進入指令緩沖器;
2)IP = IP + 所讀取的指令長度,從而指向了下一條命令的地址;
3)執行指令,這個由執行控制器來進行,然后,又回到第一步,循環執行;
?
8. 修改CS、IP指令:通過命令jmp來進行修改,不能使用mov CS,ax來修改。
轉載于:https://www.cnblogs.com/python_newbie/archive/2010/09/23/1833448.html
總結
以上是生活随笔為你收集整理的汇编语言复习摘要二——寄存器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Integer源码解析
- 下一篇: BLE芯片商总结和市场趋势分析