重新整理彙編—————寄存器的基本概念[二]

前言

有了前文的鋪墊,直接開始。

正文

一個典型的cpu 由運算器、控制器、寄存器等器件組成,這些器件靠內部總線相連。

區別:內部總線實現cpu 內部各個器件之間的聯繫。

外部總線實現cpu和主板上其他器件的聯繫。

8086 cpu 有14個寄存器,他們的名稱爲: AX、BX、CX、DX、SI、DI、SP、IP、CS、SS、DS、ES、PSW。

8086 cpu所有的寄存器都是16位的,可以存放兩個字節。

爲什麼8086的寄存器是16位的? 這個比較的好理解哈,因爲要做加法,沒有16位存不下去。

現在cpu 是64位,那麼寄存器起碼得是64位,不然沒法實現加法。cpu 64位之所以可以使用32位的軟件,那是因爲64位的cpu兼容了32位的,往下看。

AX、BX、CX、DX 通常用來存放一般性的數據,稱爲通用寄存器。

寄存器的邏輯結構:

EAX 就是32位的cpu的叫法。

數據18:

二進制表示:10010

在寄存器ax中的存儲。

這裏可能有人疑問了,int 不是 4個字節嗎? 我們常說的是int32,4個字節,16位的也只能是兩個字節哈。

然後16位的寄存器存儲的最大值爲:2的16次方-1。這裏就有人問了,萬一計算的比16位還多的數字怎麼辦呢? 這個靠設計解決,比如說有一個32位的數字要計算,那麼可以設計2個16位去處理,這種要靠設計去實現了,cpu 能做的只有這個。

8086 上一代的cpu 寄存器都是8位的;爲保證兼容性,這四個寄存器都可以分爲兩個獨立的8位寄存器使用。

然後怎麼兼容的,那是因爲AX 可以分爲AH和AL,那麼AH 是8位的。

那麼其他的也是這樣BX 分爲BH和BL。

CX 分爲CH和CL。

DX分爲DH和DL。

這些分出來的就是8位的。說白了就是兼容兼容這些指令了。

AH 表示高位,AL表示低位。 hight and low 哈。

所以8位的程序,只能用到AL這種低位的。一個32位程序也不要想換成64位cpu就能跑的更快,沒有這回事。

AX的低8位(0-7)構成了AL寄存器,高8位(8位-15位)構成了AH寄存器。

AH和AL寄存器可以獨立使用的8位寄存器。

一個字可以存儲在一個16位寄存器中,這個字的高位字節和低位字節自然就存在這個寄存器的高8位寄存器和低8位寄存器中。


在計算機領域, 對於某種特定的計算機設計而言,字是用於表示其自然的數據單位的術語。在這個特定計算機中,字是其用來一次性處理事務的一個固定長度的位(bit)組。一個字的位數(即字長)是計算機系統結構中的一個重要特性。

字長在計算機結構和操作的多個方面均有體現。計算機中大多數寄存器的尺寸是一個字長。計算機處理的典型數值也可能是以字長爲單位。

CPU和內存之間的數據傳送單位也通常是一個字長。還有而內存中用於指明一個存儲位置的地址也經常是以字長爲單位的。

現代計算機的字長通常爲16、32、64位。其他曾經使用過的字長有:8、9、12、18、24、36、39、40、48、60位;slab是早期的另一個字長實例。

某些最早期的計算機是十進制的而不是二進制的,通常擁有10位或者12位的十進制數字作爲字長,還有一些早期的計算機根本就沒有固定字長。

有時候字長被定義爲某個特定值是爲了與早期的計算機保持兼容。

![](https://img2022.cnblogs.com/blog/1289794/202205/1289794-20220522111118361-2038768733.png)

個人計算機中最通用的微處理器(例如: Intel的Pentium系列和AMD的Athlon系列)就是一個例子。

它們中的IA-32構架是早期的具有16位字長的Intel 8086構架的擴展。而IA-32處理器仍然支持8086(x86)程序,所以在IA-32中,“字”的含義仍然爲16位,儘管事實上它運行起來(特別是當默認操作數爲32位時)更像一臺32位計算機。

類似地,在更新型的x86-64構架中,“字”仍然是16位的,雖然64位操作數更爲常見。

題目:

這個h什麼意思呢? hexadecimal,16進制的意思。

把音標放出來哈:

add ax bx的意思是將ax=ax+bx 的意思哈。

然後看下結果。 8226H+8226H = 1044CH 這個很好算哈,滿16進1。

但是這個寄存器只有16,所以是044CH。

題目二:

看第三行: add al,bl 這個算。 這個時候al 是1A bl就是26,相加後就是40。

這裏主要的疑問在於,如果是A1 和 7A相加A+7大於16,是往高位進位呢? 還是丟棄或者存在某個地方?

題目中的這個? 就是考驗這個問題了。

al = c5 ,c5+93 會對高位有影響嗎? 其實不應該有影響的,因爲得兼容8位的,8位可沒有16位這麼多,如果進高位那麼跟以前的操作就不一樣了。

所以? 是 0058,進位的1好像被丟棄了對吧。

這裏的丟失,指的是進制位不在8位寄存器中保存,但是cpu 並不會真的丟棄這個進位值。

題目三:

下一節物理地址相關的知識。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章