彙編基礎知識

2021-06-01 06:10:52 字數 2850 閱讀 5916

最近感覺自己學的到了乙個瓶頸,學的不知道有多少是記住的,總是感覺自己要學的東西有那麼多,時間又太少。專業課也越來越多,花在程式設計上的時間就少了,但是這畢竟是我的興趣愛好,所以我不想放棄。昨晚突然有個想法,以後寫部落格的頻率加快,儘管這樣部落格的質量也就下降了很多,但是我還是覺得部落格就是來記錄我成長的地方,我該把我的學到的,哪怕是點點滴滴都記錄下來,呵呵,不知道能堅持多久。

不久前看拿起了王爽老師的組合語言看了看,覺得確實寫的不錯,當時因為都是基本的語法,我就看看就過去了。不過這些天發現突然很多都忘記了,所以寫點東西來記錄下。。。

首先是硬體的一些基礎知識,cpu要對物理記憶體操作總得最起碼要知道1,所操作的位址2.操作的資料3.操作的指令。所以cpu有位址匯流排(傳位址的),有資料匯流排(傳資料的),有控制匯流排(傳命令的)。先是位址匯流排,乙個cpu有n根位址線,定址範圍就是2^n次。資料匯流排也是一樣的道理,傳輸資料都

是最大是2^n。8086cpu有20位位址匯流排,定址能力是0~1m,但是資料匯流排是16位,就是只能傳輸資料0~64k,為了可持續發展,所以就想出了,兩個16位位址通過乙個特殊的加法器來算出乙個20的位址,這就是所謂的段+偏移。具體演算法:實體地址 = (段位址 * 16 + 偏移量)。16 = 0x10,其實就相當於是把段位址變成了20位和偏移量相加得出20位的實體地址。段+偏移的思想在我們日常生活中隨處可見,比如時鐘啊,過了60s加相當於過了一分鐘····

再是一些彙編的基礎知識:

位元組(byte):8個bit。

字(word):2個byte,16個bit。

雙字(dword):4個byte,32bit。

8086cpu通用暫存器:ax,bx,cx,dx都是16bit,一次存放兩個位元組。為了與上一代8位的暫存器相容,所以在通用暫存器裡面又分出高位暫存器和地位暫存器。

這個應該寫程式就可以實現的吧。比如ax,由ah:高8位;al:低8位構成。

cs和ip也是兩個暫存器,cs是段暫存器,ip是指標暫存器。cs:ip裡面存的就是cpu要執行的下一條指令。任意時刻,cpu要執行的位址 = (cs*16 + ip)。

ds暫存器,cpu要讀寫乙個記憶體單元的時候,必須先給出這個記憶體單元的位址。記憶體位址就是由段位址+偏移位址組成的。

mov 指令

1.從資料送到暫存器,mov ax,1000h。 (ax) = 1000h。()就相當於裡面的內容

2.將暫存器的內容送到另乙個暫存器中,mov bx,ax。

3.將乙個記憶體單元內字送到暫存器。mox ax,[0]。裡面表示偏移位址,段位址預設在ds中,cpu自動從ds中提取。

4.mov [bx],ax 將ax中存放的資料放到偏移量是bx的記憶體單元中。((ds)*16+(bx)) = (ax)。

下面是我從網上找來的一些基本的彙編指令,就當作手冊額····

一、資料傳輸指令

mov        傳送字或位元組

push       把字壓入堆疊

pop        把字彈出堆疊

pusha      把ax,cx,dx,bx,sp,bp,si,di依次壓入堆疊

popa       把di,si,bp,sp,bx,dx,cx,ax依次彈出堆疊

pushad     把eax,ecx,edx,ebx,esp,ebp,esi,edi依次壓入堆疊

popad      把edi,esi,ebp,esp,ebx,edx,ecx,eax依次彈出堆疊

pushf      標誌入棧

popf       標誌出棧

lea        裝入有效位址

lds        傳送目標指標,把指標內容裝入ds

les        傳送目標指標,把指標內容裝入es

lahf       標誌暫存器傳送,把標誌裝入ah

sahf       標誌暫存器傳送,把ah內容裝入標誌暫存器

二、算術運算指令

add        加法

adc        帶進製加法

inc        加 1 

sub        減法

sbb        帶借位減法

dec        減 1

nec        求相反數(以 0 減之)

cmp        比較(兩運算元作減法,僅修改標誌位,不回送結果)

mul        無符號乘法

imul       整數乘法

div        無符號除法

idiv       整數除法

三、邏輯運算指令

or         或運算

and        與運算

xor        異或運算

not        取反

test       測試,兩運算元作與運算,僅修改標誌位,不回送結果

shl        邏輯左移

shr        邏輯右移

rol        迴圈左移

ror        迴圈右移

rcl        通過進製的迴圈左移

rcr        通過進製的迴圈右移

四、串指令

movsx      先符號擴充套件,再傳送

movzx      先零擴充套件,再傳送

movs       串傳送

cmps       串比較

五、程式轉移指令

jmp        無條件轉移指令

call       過程呼叫

ret        過程返回

jg/jnle    大於轉移

jge/jnl    大於或等於轉移

jl/jnge    小於轉移

jle/jng    小於或等於轉移

je/jz      等於轉移

jne/jnz    不等於時轉移

loop       cx不為零時迴圈. 

彙編 基礎知識

一 進製數的表示 十進位制後加d,二進位制後加b,八進位制加o,十六進製制加h 二 十進位制數轉換為二進位制數或十六進製制數 使用除2取餘法或使用除16取餘法,結果向上讀,如4,得餘數0 0 1,則相應二進位制為100,十六進製制數類似 三 二進位制數或十六進製制數轉換為十進位制數 使用權的展開式 ...

彙編基礎知識

1.si和di 功能和bx相似,只是不能分成2個8暫存器使用。2inc ax指令 將暫存器的內容加1 mov ax,0 inc ax 執行完畢ax 1 3.bx,si,di,bp暫存器 cpu的核心是暫存器,學習彙編這麼一段時間,我也深刻體會到對暫存器理解的重要性 1 在8086cpu中,只有這4個...

彙編基礎知識

cpu要從記憶體中讀資料,首先要指定儲存單元的位址,並指明對哪乙個器件進行操作,進行哪種操作,概括起來講,cpu要想進行資料的讀寫,必須和晶元進行下面3類資訊的互動 彙編指令是機器指令的築繼腹,同機器指令一一對應 每一種cpu都有自己的彙編指令集 cpu可以直接使用的資訊在儲存器中存放 在儲存器中指...