學習源於《ibm-pc 組合語言程式設計》
傳說中的cpu有很多組成部分
其中一部分叫作暫存器
cpu裡面有很暫存器
暫存器作用是什麼?
顧名思義,就是寄與存資料啦
它的訪問速度比在儲存器快很多
組合語言需要用到暫存器,有一部分暫存器用到,有一部分用不到
因此分為程式可見暫存器,程式不可見暫存器
程式可見的暫存器又因功能分為通用暫存器,專用暫存器與段暫存器
上古年代的8086/8088和80286都是的16位暫存器,即乙個暫存器能放個16位資料
它們之後的便進化到32位,新時代的則是64位了
對於是上古年代的16位暫存器,通用暫存器有
資料暫存器四隻:ax,bx,cx,dx(居然剛好是abcd)
ax(accumulator)作累加器用,是算術運算的主要暫存器,有乘除指令中放運算元的。所有的io指令用此與外部裝置傳資訊
bx(base)常用作基址暫存器
cx(count)常用作儲存計數值
dx(data)
以上四隻可折分為左右兩邊,如ax折成ah與al,bx折成bh與bl,每邊8位(大概是上古年代位置不夠用,因此省得就省)
另外四隻:sp,bp,si,di
這四隻也能存資料,但不能像資料暫存器一樣折成2個8位那樣,只能16位一起用
sp(stack pointer)堆疊指標暫存器
bp(base pointer)基址指標暫存器
si(source index)源變址暫存器
di(destination index)目的變址暫存器
注:32位的還有那些暫存器,全都進化成32位,而且名字前面全加上了乙個e
專用暫存器:ip,sp,flags三隻
sp為堆疊指標暫存器,學過資料結構的人都知道棧吧,sp指著棧頂
flags標誌暫存器,別名程式狀態暫存器(program status word,psw)
關於flags,即用某個位的0與1標誌某樣事情是否發生而已
它們是根據指令的執行由cpu自動設定的,如果想知道怎樣自動設定的去學電路吧
條件碼標誌:
溢位標誌(overflow flag,of),溢位為1
符號標誌(sign flag,sf),負數為1
零標誌(zero flag,zf),結果零為1
進行標誌(carray flag,cf),進製為1
輔助進製標誌(auxliary carray flag,af),運算時到第3位(半個位元組)產生進製為1,否則為0
奇偶標誌位(parity flag,pf),專用來檢是否傳錯資料的,結果運算元中1的個數為偶數則置為1
控制標誌位:
方向標誌(direction flag,df)串處理時控制方向,不太懂
系統控制位:
陷阱標誌(trap flag,tf)用於除錯的單步方式操作,為1時系統控制計算機
中斷標誌(interrupt flag,if)為1時cpu可中斷,中斷是啥?是一項偉大的技術,詳細學作業系統原理吧
i/o特權級(i/o privilege level,iopl)這個不太懂,以後再說
1 0
of ov nv
df dn up
if ei di
sf ng pl
zf zr nz
af ac na
pf pe po
cf cy nc
上面的東東被老師要求看懂,然後慢慢地記住
段暫存器
80286及其之前有四隻
cs(code segment)
ds(data segment)
ss(stack segment)
es(extra segment)
80386及之後加了兩隻
fs與gs
2015.3.22
8086暫存器介紹
8086 有14個16位暫存器,這14個暫存器按其用途可分為 1 通用暫存器 2 指令指標 3 標誌暫存器和 4 段暫存器等4類。1 通用暫存器有8個,又可以分成2組,一組是資料暫存器 4個 另一組是指標暫存器及變址暫存器 4個 資料暫存器分為 ah al ax accumulator 累加暫存器,...
彙編暫存器 8086
一 組合語言中,為什麼si和di不能同時使用彙編 其實你可以想一下,這兩個暫存器的意思,si源變址暫存器,di目地變址暫存器,既然是變址暫存器,那麼他們肯定是在某個位址的基礎上進行偏移變化,由此我們就得出了需要基址暫存器。你要是把這兩個暫存器同時使用,那你位址變化的基址都沒有,你該怎麼變化呢?你在誰...
8086暫存器簡介
暫存器 這裡討論的暫存器都是 cpu 中的暫存器,不包括外設上的暫存器 位於 cpu 內部,而記憶體位於 cpu 外部,而且,暫存器比記憶體可是珍貴得多啊,就拿記憶體和硬碟來比,肯定是內存在使用上珍貴得多,是 pc 中的稀有資源,而暫存器是 cpu 中的稀有資源,記憶體和暫存器相比就像硬碟和記憶體相...