8086有14個暫存器:ax,bx,cx,dx,sp,bp,si,di,ds,es,ss,cs,ip,flags。
// 以下為這14個暫存器的速查表。要記清楚每個暫存器的詳細用法,還是多寫**,彙編:王爽-彙編
如圖:在debug下用r命令檢視各個暫存器register:
已知,8086cpu分為兩部分:匯流排介面單元biu和執行單元eu。
見:8086cpu內部結構
為方便記憶,這14個暫存器分組記憶。
biu:匯流排介面單元,完成cpu儲存器/io裝置之間的資料傳送。
eu:執行單元,執行指令。
下面是各個暫存器的英文全稱和意義:
接下來是各個暫存器的具體介紹(順序:abcd_x, sb_p, sd_i, desc_s, ip, flags。就這樣速記吧)
1. 4個資料暫存器(x結尾表示通配h和l,比如說ax作為乙個16位暫存器,可以拆分為高8位的ah和低8位的al使用)
ax(accumlator x),作為乙個累加器,普通操作:存放加數。(或別的資料)
bx(based x),基本的。
cx(counter x),計數器,cx可以做一件別的暫存器都做不了的事:在loop迴圈中存放迴圈次數,每次遞減。
dx(data x),存放資料。
以下為更詳細的介紹:
2. 兩個指標暫存器&2個變址暫存器
sp(stack pointer):棧頂指標。用於儲存棧頂元素所在的偏移位址ea(effective address,有效位址|偏移位址)。
bp,也是一根針。pointer。
si和di(xx index),這兩個變址暫存器,也是儲存偏移位址,用作定址。
3. 4個段暫存器和兩個控制暫存器
ds, es, ss正如其名,分別存放資料段,額外(附加資料)段,棧段的段位址。當然,誰作為偏移位址與之相配合,也是有固定的規則:
計算機要工作,只會按照既定的軌跡|流程|指令去操作,而要執行的指令時不斷在變化,這些指令的位址|存放位置在**?
cs存放**所在的段,ip是乙個pointer,可以指向不同的位置。(範圍不會太大,64kb)。
flags,就是一些flag|標誌位的集合。
在程式的流程控制中有很多判斷,而在底層的實現是沒有if..else什麼的。解決方式就是:我們的運算或其他操作會影響標誌位的狀態1或0,而之後的程式 執行路徑|流程 會由這些flags的標誌位影響。
flags也是乙個16位暫存器,而其中只有9位是有用的。有標誌位。每個位通過他的值1或0來表示乙個標誌是否成立。
比如說zf(zero flag)。
執行下面的彙編**(含偽碼)。執行完sub ax, 4之後,結果為0,那麼就會將flags中的zf狀態位置1,表示剛才的操作結果為0。而後面的判斷,會根據flags中相應位的值,取決定接下來的程式流程。
mov ax, 4
sub ax, 4
如果 (結果==0) 情況1;
否則 情況2;
暫存器(通用暫存器)
因為學習使用的是王爽的 組合語言 第3版 因此也只能提到8086cpo的暫存器。對於其他而言,原理都是相通的。對於8086暫存器,有14個暫存器,主要是 ax bx cx dx si di sp bp ip cs ss ds es psw。一 通用暫存器 8086的通用暫存器有ax bx cx dx...
暫存器,標誌暫存器
涉及硬體傳輸資料的,往往包含以下內容 1.資料傳輸引腳 資料放 2.控制引腳 怎麼控制 3.狀態引腳 結果如何 暫存器相當於cpu內部的儲存單元,可能是連續排列,相當於 c語言中的陣列。一 8個通用暫存器 16 bit accumulate axah alr0 count cxch clr1 dat...
通用暫存器區四個暫存器
void int0 interrupt 0 using 1 interrupt 0 指明是外部中斷0 interrupt 1 指明是定時器中斷0 interrupt 2 指明是外部中斷1 interrupt 3 指明是定時器中斷1 interrupt 4 指明是序列口中斷 using 0 是第0組暫...