學習指令:
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 在組合語言程式中...