8086CPU相關組合語言的簡單概述

2021-10-06 21:45:50 字數 3716 閱讀 7135

2.暫存器(記憶體訪問)

3.[bx]和loop指令

4.包含多個段的程式

5.更靈活的定位記憶體位址的方法

6.資料處理的兩個基本問題

7.轉移指令的原理

jcxz指令

8.call和ret指令

8086cpu有14個暫存器:ax,bx,cx,dx,si,di,sp,bp,ip,cs,ss,ds,es,psw

ax,bx,cx,dx

存放一般性的資料,可以分為高8位和第8位

實體地址=段位址×16+偏移位址

cs,ds,ss,es

cs和ip是是兩個最關鍵的暫存器

cs:**段暫存器 ip:指令指標暫存器

讀取一條指令後,ip值會自動增加

8086cpu中有乙個ds暫存器,通常用來存放要訪問資料的段位址,8086不支援將資料直接送入段暫存器的操作

8086cpu中,有兩個暫存器,段暫存器ss和暫存器sp,棧頂的段位址存放在ss中,偏移位址存放在sp中。**任意時刻,ss:sp指向棧頂元素。**push指令和pop指令執行時,cpu從ss和sp中得到棧頂的位址

格式是:loop 標號,cpu執行loop指令的時候,要進行兩步操作,①(cx)= (cx)-1 ②判斷cx中的值,不為零則轉至標號處執行程式,如果為零則向下執行

datas segment

;此處輸入資料段**

datas ends

stacks segment

;此處輸入堆疊段**

stacks ends

codes segment

assume cs:codes,ds:datas,ss:stacks

start:

mov ax,datas

mov ds,ax

;此處輸入**段**

mov ah,

4ch int 21h

codes ends

end start

dw 0

,1,2

,3,4

,5,6

,7,8

,

dw即「define word」含義是定義字型資料,乙個字型資料佔兩個位元組

(1)and指令:邏輯與指令,按位進行與運算。可以將操作物件的相應位設為0,其他位不變。

例如:將al的第六位設為0 and al,10111111b

(2)or指令:邏輯或指令,按位進行或運算。可以將操作物件的相應位設為1,其他位不變。

例如:將al的第六位設為0 or al,01000000b

小寫字母的ascii碼值比大寫字母大20h。

簡便方法:乙個字母,不管它原來是大寫還是小寫,將它的二進位製碼第5位置置0,它就變成大寫字母;第5位置置1,就變成小寫字母

我們在前面用[bx]的方式來指明乙個記憶體單元,現在可以用[bx+idata]更靈活的表示

例如:mov ax,[bx+200]

si和di是8086cpu中和bx功能相近的暫存器,si和di不能分成兩個8位暫存器來使用

比 [bx+idata]更加靈活

①在8086cpu中,真有這4個暫存器可以用在[…]中來進行記憶體單元的定址

②在[…]中,這4個暫存器可以單個出現,或只能以4中組合出現:bx和si,bx和di,bp和si,bp和di

③在[…]中使用bp,而在指令中沒有顯式地給出段位址,那麼段位址預設就在ss中

①立即數:對於直接包含在機器指令中的資料(執行前在cpu的指令緩衝器中)

②暫存器:指令要處理的資料在暫存器中

③段位址(sa)和偏移位址(ea):指令要處理的資料在記憶體中 ,用[x]的格式給出

8086cpu可以處理兩種尺寸的資料,byte和word,在指令中要指明是字操作還是位元組操作

①通過暫存器的名字來指明

字操作:mov ax,1000

位元組操作:mov al,1000

②在沒有暫存器名的情況下,用操作符x ptr指明記憶體單元的長度,x是byte或word

inc word ptr 【bx】

inc byte ptr 【bx】

①除數:有8位和16位兩種,在乙個reg或記憶體單元中

②被除數:預設放在ax或dx和ax中,如果除數為8位,被除數則為16位,預設在ax中存放;如果除數為16位,被除數則為32位,在ax和dx中存放,dx存放高16位,ax存放低16位

③結果:如果除數為8位,則al儲存除法操作的商,ah儲存除法操作的餘數;如果除數為16位,則ax儲存除法操作的商,dx儲存除法操作的餘數

前面用db和dw定義位元組型資料和字型資料。dd用來定義dword(double word,雙字)型資料

是乙個操作符 ,和dd,dw,db一樣。dup用來進行資料的重複

例如:db 3 dup(0),定義了3個位元組,都為0

db 3 dup(0,1,2),定義了9個位元組0,1,2,0,1,2,0,1,2

可以修改ip,或同時修改cs和ip的指令系統統稱為轉移指令。概括地講,轉移指令就是可以控制ccpu執行記憶體中某處**的指令。

只修改ip,稱為段內轉移

同時修改ip和cs,稱為段間轉移

根據對ip的修改範圍不同,段內轉移又分為:短轉移和近轉移

總體上可以分為以下幾類:

無條件轉移指令(如:jmp)

條件轉移指令

迴圈指令

過程中斷

codes segment

assume cs:codes

start:

mov ax,offset start ;相當於mov ax,0s:

mov ax,offset s ;相當於mov ax,3

codes ends

end start

段內短轉移:jmp short 標號**到標號處執行指令)

段內近轉移:jmp near 標號

實際上,cpu在執行jmp指令的時候並不需要轉移的目的位址。它包含的是轉移的位移。這個位移是編譯器根據彙編指令中的「標號」計算出來的。

指令格式:jmp 16位 reg

功能:(ip)=(16位reg)

jmp word ptr 記憶體單元位址(段內轉移)

功能:從記憶體單元位址處開始存放著乙個字,是轉移的目的偏移位址

記憶體單元位址可以用定址方式(見上文)的任一格式給出

jmp dword ptr 記憶體單元位址(段間轉移)

功能:從記憶體單元位址處開始存放著兩個字,高位址處的字是轉移的目的段位址,低位址處的字是轉移的目的偏移位址

(cs)=(記憶體單元位址+2)

(ip)=(記憶體單元位址)

jcxz指令為有條件指令,所有的有條件轉移指令都是短轉移。

指令格式:jcxz 標號(如果(cx)=0,轉移到標號處執行)

操作:當(cx)=0是,(ip)=(ip)+8位位移

8位位移=標號處的位址-jcxz指令後的第乙個位元組的位址

8位位移的範圍為:-128~127,用補碼表示

8位位移由編譯程式在編譯時算出

當(cx)≠0時,什麼也不做(程式向下執行)

ret指令用棧中的資料,修改ip的內容,從而實現近轉移;(相當於pop ip)

retf指令用棧中的資料,修改cs和ip的內容,從而實現遠轉移。(相當於pop ip pop cs)

未完待續~

彙編學習之路之 8086CPU

8086 cpu 給出實體地址的方法 8086 cpu 有20位位址匯流排,可以傳送2位位址,達到1 mb的定址能力。8086 cpu又是16位結構,在內部一次性處理,傳送,暫時儲存的位址是 16位。從8086 cpu的內部結構來看,如果將位址從內部簡單的發出,那麼,它只能送出16位位址,表現出的定...

彙編基礎 8086CPU的執行方式

cpu內 注 不同的cpu暫存器的個數 結構是不同的。a 暫存器 暫存器是程式設計師主要能進行讀寫操作的部件。通過暫存器來實現對cpu的控制。8086所有的暫存器都是16位 16個二進位制位 的,可以存放2個位元組。8086總計14個暫存器 ax bx cx dx si di sp bp ip cs...

8086CPU彙編 顯示字串

在第8行第5列以紅色字型顯示 welcome to masm assume ds data,cs code data segment db welcome to masm 0 data ends code segment start mov ax,data mov ds,ax mov si,0 在8...