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