彙編學習筆記(2)暫存器

2022-01-19 13:33:27 字數 1885 閱讀 5045

本篇文章是組合語言(王爽)一書的學習筆記,對應書中的第

二、三章,暫存器。

cpu主要是由運算器、暫存器和控制器組成,這一篇筆記主要是暫存器相關知識的學習總結,考慮到通用性,用8086cpu來學習。本次筆記共涉及8086cpu中的7個暫存器(總數14個),分別是ax,bx,cs,ip,ds,ss,sp。

8086cpu中,可以處理以下兩種尺寸的資料

1.位元組:byte,1byte=8bit

2.字:word,1word=2byte,這2個位元組分別稱為這個字的高位位元組和低位位元組

計算機中只能儲存二進位制資料,由於二進位制資料書寫和閱讀困難,也是為了描述不同的問題,我們平時主要使用十進位制和十六進製制來表示。十進位制20000d(d為十進位制符號),用十六進製制表示為4e20h(h為十六進製制符號),用二進位制表示為100111000100000b(b為二進位制符號)。

通用暫存器用來儲存一般性的資料,8086的暫存器都是16位的,可以存放2個位元組(1個字)型資料,最大容量2^16bit即64kb。ax,bx屬於通用暫存器,又可分為2個獨立的8位暫存器來用,即ah,al,bh,bl,ah存放高位資料,al存放低位資料,bh,bl同理,下圖是20000d在ax中的儲存示例。

ah中儲存了這個字的高8位,al中儲存了低8位,圖中可以清晰的看到十進位制資料20000可以表示成4e20h,ah可以用2個十六進製制資料表示(因4位資料可以表示的最大值為2^4即16,若從0開始是0-15,正好是1個十六進製制可以表示的範圍),我們說ah中的資料是4eh,比01001110要直觀的多,所以以後多用十六進製制來表示。

段位址和偏移位址都是儲存在cpu中的,通過位址加法器將段位址x16再加上偏移位址,得到位址匯流排需要的20位位址。如果我們要訪問的記憶體單元實體地址為2000fh,則段位址為2000h,偏移位址為000fh。在位址加法器中,先將段暫存器x16,變為20000h,然後加上偏移位址,20000h+000fh即可得到實體地址2000fh。至於為什麼是x16,而不是x8,x10,這是因為位址都是以十六進製制表示,x16正好是左移一位。和10進製一樣,如果100d左移一位1000d,就需要x10,任何進製數左移一位都是x相應進製,二進位制左移一位相當於x2,八進位制左移一位相當於x8,左移n位就是x進製數n次方。

在cpu中,段位址是存放在段暫存器cs中,偏移位址則存放在指令暫存器ip中。訪問實體地址2000fh,cs=2000h,ip=000fh,記作cs:ip。cs:ip指向的記憶體單元中一般存放的是程式。

8086cpu中還有乙個段暫存器也是用來存放段位址的,他就是ds,偏移位址用[位址]表示,ds:[位址]指向的記憶體單元中存放的一般是資料

目前,可以使用的彙編指令有mov,add,sub和jmp。

mov,add,sub指令有多種形式,這裡就不一一記錄了,需要注意的是,資料是不能直接與段暫存器互動的,形如 mov 段暫存器,資料的形式是非法的。要想完成mov ds,2000h的操作只能通過通用暫存器來中轉,mov ax,2000h;mov ds,ax.

資料段是程式設計時的一種安排,劃出一段記憶體空間專門用來儲存資料。例如,可以將記憶體單元123b0h-123b9h作為乙個資料段,長度為10byte。

說到棧,熱愛程式設計的同學應該都不陌生,棧其實就是一種特殊的資料段,滿足後進先出(lifo)的結構。既然也是資料段,就需要我們自己約定棧的長度和起始位址,8086中的段暫存器ss和暫存器sp提供了這種功能。

ss、sp的功能和cs、ip的功能一樣,ss中存放段位址,sp中存放偏移位址,ss:sp指向的記憶體單元就是棧頂。如果將10000h-1000fh這段空間當作棧空間,則ss=1000h,sp=0010h,執行一次push ax操作後,ss=1000h,sp=000eh。在一段棧空間中,ss指向的段位址不會變化,只有sp可以在0-ffffh範圍內移動,所以一段棧空間的最大容量為64kb。

彙編2 段暫存器

8086cpu有20根位址線,最大可定址記憶體空間為1mb。而8086的暫存器只有16位,指令指標 ip 和變址暫存器 si di 也是16位的。用16位的位址定址1mb空間是不可能的。所以就要把記憶體分段,保證0000h ffffh 能將整個段尋遍 也就是把1mb空間分為24,即16個段,每段不超...

彙編學習筆記之暫存器綜述

暫存器是cpu的組成部分。因為在cpu內部,所以cpu對其讀寫速度是最快的,不需要io傳輸,但同時也決定了此類暫存器數量有限,有限到幾乎每個暫存器都有自己的名字,而且有些還有多個名字。ia 32構架提供了16個基本暫存器,這16個基本暫存器可以歸納為如下幾類 通用暫存器 段暫存器 狀態和控制暫存器 ...

彙編 學習筆記(一) 暫存器(二)

全稱 16位 高8位低8位 axah albx bhbl cxch cldx dhdl ax 累加器。這是個16位的暫存器,可以拆成ah 高位置的8位 和al 低位置的8位 來用,通常用在相乘或相除存放運算結果 另外還有i o字串。bx 基位址暫存器。同上可以拆成bh和bl,主要用在間接 基底 定址...