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

敖毛毛發表於2022-05-22

前言

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

正文

一個典型的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 並不會真的丟棄這個進位值。

題目三:

下一節實體地址相關的知識。

相關文章