div是除法指令,使用div做除法的時候應注意以下問題:
1、除數:有8位和16位兩種,在乙個暫存器或者記憶體中。
2、被除數:預設放在ax或(dx和ax)中,如果除數為8位,被除數為16位,被除數預設在ax中存放,如果除數為16位,被除數為32位,被 除數則在(dx和ax)中存放,dx存放高16位,ax存放低16位。
3、結果:如果除數是8位,則al儲存除法操作的商,ah儲存除法操作的餘數;如果除數是16位,則ax儲存除法操作的商,dx儲存除法操作的餘數。
格式如下:
div reg
div 記憶體單元
以100001/100為例,100001大於65535,所以只能用dx和ax兩個暫存器聯合存放100001,也就是說要進行16位的除法。除數100小於255,可以在乙個8位的暫存器中存放,但是被除數是32位的,除數應為16位,所以要使用乙個16位的暫存器來存放除數100.
dx和ax分別存放100001的高16位和低16位值,所以將100001表示為16進製制的形式:186a1h.
程式如下:
view plain
datas segment
;此處輸入資料段**
datas ends
stacks segment
;此處輸入堆疊段**
stacks ends
codes segment
assume cs:codes,ds:datas,ss:stacks
start:
mov dx,1
mov ax,86a1h
mov bx,100
div bx
mov ax,4c00h
int21h
codes ends
end start
程式執行後,ax=03e8h,dx=1(餘數是1),在debug中檢視如下所示:
-pax=86a1 bx=0000 cx=0010 dx=0001 sp=0000 bp=0000 si=0000 di=0000
ds=0ba5 es=0ba5 ss=0bb5 cs=0bb5 ip=0006 nv up ei pl nz na po nc
0bb5:0006 bb6400 mov bx,0064
-pax=86a1 bx=0064 cx=0010 dx=0001 sp=0000 bp=0000 si=0000 di=0000
ds=0ba5 es=0ba5 ss=0bb5 cs=0bb5 ip=0009 nv up ei pl nz na po nc
0bb5:0009 f7f3 div bx
-pax=03e8 bx=0064 cx=0010 dx=0001 sp=0000 bp=0000 si=0000 di=0000
ds=0ba5 es=0ba5 ss=0bb5 cs=0bb5 ip=000b nv up ei pl nz ac po nc
0bb5:000b b8004c mov ax,4c00
-pax=4c00 bx=0064 cx=0010 dx=0001 sp=0000 bp=0000 si=0000 di=0000
ds=0ba5 es=0ba5 ss=0bb5 cs=0bb5 ip=000e nv up ei pl nz ac po nc
0bb5:000e cd21 int 21-p
彙編 div指令
除數 有8位和16位,在reg或者記憶體單元中 被除數 預設放在ax或者 dx和ax 中,如果除數是8位,被除數則為16位,預設放在ax中 如果除數為16位,則被除數為32位,高16位儲存在dx中,低16位儲存在ax中 結果 除數為8位,結果儲存在ax中,al儲存商,ah儲存餘數 如果除數16位,a...
彙編 div 除法指令
mov ax,10h 被除數為16位,儲存在ax mov dl,3 除數儲存在暫存器中,除數為8位 mov dl,ds 3 除數儲存在記憶體中,除數為8位 div dl 商儲存在al,餘數儲存在ah mov ax,4c00h int 21h code ends end start assume cs...
彙編中div指令使用
當除數是位元組 也就是8位的時候 被除數必須是16位 被除數存放在ax暫存器中 除數放在bl中 除到得 結果是 商是8位放在al中 餘數放在ah中 例子mov ax,0006h mov bl,02h div bl 使用debug除錯時 檢視結果 執行div bl 檢視ax的結果是 0003 可看出 ...