8.7 div指令
div是除法指令,使用div做除法的時候:
除數:8位或16位,在暫存器或記憶體單元中
被除數:(預設)放在ax或dx和ax中
結果:運算 8位 16位
商 al ax
餘數 ah dx
div指令格式:
div reg
div 記憶體單元
div byte ptr ds:[0]
含義為:al=ax/(ds*16+0)的商
ah=ax/(ds*16+0)的餘數
div word ptr es:[0]
含義為:
ax=(dx*10000h+ax)/(ds*16+0)的商
dx=(dx*10000h+ax)/(ds*16+0)的餘數
利用除法指令計算100001/100.
我們首先分析一下,被除數100001大於65535,不能用ax暫存器存放,所以我們要用dx和ax兩個暫存器聯合存放100001,也就是說要進行16位的除法。
除數100小於255,可以在乙個8位暫存器中存放,但是,因為被除數是32位的,除數應
為16位,所以要用乙個16位暫存器來存放除數100.
因為要分別為dx和ax賦100001的高16位值和低16位值,所以應先將100001表示為十六進製制形式:186a1h
程式如下:
mov dx,1
mov ax,86a1h;
mov bx,100
div bx
利用除法指令計算1001/100.
我們首先分析一下被除數1001可用ax暫存器存放,除數100可用8位暫存器存放,也就是說,要進行8位的除法。程式如下:
mov ax,1001
mov bl,100
div bl
程式執行後,al=0ah(商為10),ah=1(餘數為1)
8.8偽指令dd
前面我們用db和dw定義位元組型資料和字型資料。
dd是用來定義dword(double word 雙字)型資料的。
data segment
db 1
dw 1
dd 1
data ends
在data段中定義了三個資料:
第乙個資料為01h,在data:0處,佔1個位元組;
第二個資料為0001h,在data:1處,佔1個字
第三個資料為00000001h,在data:3處,佔1個雙字,兩個字,4個位元組。
dup是乙個操作符,在組合語言中同db、dw、dd等一樣,也是由編譯器識別處理的符號。
它是和db、dw、dd等資料定義偽指令配合使用的,用來進行資料的重複。
dup示例:
db 3 dup(0)
定義了3個位元組,他們的值都是0,相當於 db 0,0,0
db 3 dup(0,1,2)
定義了9個位元組,他們是0、1、2、0、1、2、0、1、2
相當於 db 0,1,2,0,1,2,0,1,2
db 3 dup('abc','abc')
定義了18個位元組,他們是:
『abcabcabcabcabcabc'
可見,dup的使用格式如下:
db 重複的次數 dup (重複的位元組型資料)
dw 重複的次數 dup (重複的字型資料)
dd 重複的次數 dup (重複的雙字資料)
第8章 資料處理的兩個基本問題 筆記
p161 在8086cpu中,只有4個暫存器bx,si,di和bp可以用在 中進行記憶體單元的定址。在 中,這4個暫存器或者單個出現,或只能以4種組合出現 bx和si,bx和di,bp和si,bp和di。p162 只要在 中使用暫存器bp,而指令中沒有顯式地給出段位址,段位址就預設放在ss中。p16...
8 資料處理的兩個基本問題
1.兩個基本問題 1 處理的資料在什麼地方?2 處理的資料有多長?2.暫存器集合 reg ax,bx,cx,dx,al,ah,bl,bh,cl,ch,dl,dh,sp,bp,di,si 段暫存器集合 sreg cs,ds,ss,es 3.幾種錯誤的指令 1 mov ax,cx 2 mov ax,dx...
8 資料處理的兩個基本問題
1.兩個基本問題 1 處理的資料在什麼地方?2 處理的資料有多長?2.暫存器集合 reg ax,bx,cx,dx,al,ah,bl,bh,cl,ch,dl,dh,sp,bp,di,si 段暫存器集合 sreg cs,ds,ss,es 3.幾種錯誤的指令 1 mov ax,cx 2 mov ax,dx...