《組合語言 第2版 2011033101

2022-03-01 16:17:53 字數 2426 閱讀 2738

學習指令:

and指令:邏輯與指令,按位進行與運算

and r/m,r/m/data

or指令:邏輯或指令,按位進行與運算

or r/m,r/m/data

關於如何靈活訪問位址,以下用mov指令看定位記憶體位址

1、mov ax,[bx+idata]或mov ax,idata[bx]

記憶體位址=(bx)+idata

2、8086cpu的si和di,不能分為兩個8位暫存器使用

mov ax,[bx+si]也可以寫成mov ax,[bx][si]

記憶體位址=(bx)+(si)

3、mov ax,[bx+si+idata]或mov ax,idata[bx][si]或mov ax,[bx].idata[si]或mov ax,[bx][si].200

記憶體位址=(bx)+(si)+idata

我們這麼來定義:

reg集合:

ax,bx,cx,dx,ah,al,bh,bl,ch,cl,dh,dl,sp,bp,si,di

sreg集合:

ds,ss,cs,es

注意:在8086cpu中只有bx、si、di、bp4類暫存器可以使用[...]來進行記憶體單位的定址

像mov ax,[cs]之類是錯誤的。

在[...]中,這4個暫存器可以單獨出現,或只能以4種組合出現:bx和si、bx和di、bp和si、bp和di。

只要在[...]中使用暫存器bp,而指令中沒有顯性地給出段位址,預設段位址為ss

彙編中對資料所在位置有3個概念:

1、立即數(idata),資料就在指令裡面,es.mov ax,1

2、暫存器,資料在暫存器裡面,es.mov ax,bx

3、段位址(sa)和偏移位址(ea)

sa和ea是乙個未知的,類似方程式中的x、y

定址方式:

1、直接定址    es.mov ax,1

2、暫存器間接定址    es.mov ax,[bx]

3、暫存器相對定址    es.mov ax,[bx+idata]

4、相對基址變址定址    es.mov ax,[bx+si+idata]

8086cpu的指令,可以處理兩種尺寸的資料,byte和word。

確定指令做的是字操作還是位元組操作,如下可解:

1、通過暫存器名指明要處理的資料的尺寸

mov ax,1;字操作

mov al,1;位元組操作

mov ds:[0],ax;字操作

mov ds:[0],al;位元組操作

2、在沒有暫存器名存在的情況下,使用操作符x ptr指明記憶體單元的長度,x在彙編指令中可以為word或byte.

mov word ptr ds:[0],1;字操作

mov byte ptr ds:[0],1;位元組操作

3、其他地方

有些指令預設了訪問為字單元還是位元組單元

比如棧指令pop,push就是預設只進行字操作

學習指令:

div指令格式:

div 8位暫存器/8位記憶體運算元

div 16位暫存器/16位記憶體運算元

div 32位暫存器/32位記憶體運算元

被除數 、 除數、商、餘數之間的關係:

被除數                         除數                    商         餘數

ax                8位暫存器/8位記憶體運算元                al            ah

dx:ax            16位暫存器/16位記憶體運算元            ax            dx       

edx:eax            32位暫存器/32位記憶體運算元            eax            edx

1.舉個例子:

mov ax, 0060h

mov bl, 2

div bl   ;al = 30h , ah = 00h

那麼執行完後, 商是30h ,餘數是00h

2.在舉個例子

執行(6005h/100h),由於我們的出示是16位,所以被除數是放在dx:ax中的。 但是由於被除數是6005h,所以我們必須將dx清0.

xor dx, dx

mov ax, 6005h

mov bx, 100h

div bx

那麼執行後, 我們的ax = 0060h, dx = 0005h。 所以我們的商是60h, 餘數是5h。

很簡單。

8086/8088組合語言指令集

《組合語言 第2版 2011041001

摘抄 call和ret指令都是轉移指令 詳細 ret指令用棧中的資料,修改ip的內容,實現近轉移 retf指令用棧中的資料,修改cs和ip的內容,實現遠轉移 cpu執行ret指令 ip ss 16 sp sp sp 2 cpu執行retf指令 ip ss 16 sp sp sp 2 cs ss 16...

《組合語言 第2版 2011040201

8086轉移指令有以下幾類 無條件轉移指令,eg.jmp 條件轉移指令,eg.jz 迴圈指令,eg.loop 過程中斷 操作符offset在組合語言中是由編譯器處理的符號,它的功能是取得標號的偏移位址。eg.start mov ax,offset start jmp指令 jmp short 標號,實...

ADS組合語言2

4.2 組合語言的語句格式 arm thumb 組合語言的語句格式為 在組合語言程式設計中,每一條指令的助記符可以全部用大寫 或全部用小寫,但不用許在一條指令中大 小寫混用。同時,如果一條語句太長,可將該長語句分為若干行來書寫,在行的末尾用 表示下一行與本行為同一條語句。4.2.1 在組合語言程式中...