彙編語言 實驗10.2 解決除法溢出的問題
寫給自己的一些題外話: 因為各種各樣(考試,加上萎靡的精神狀态)的原因,在這一題卡了好幾天,就是搞不懂商和餘數的表示,直到今天才恍然大悟,下面我先總結一下div的用法,就當做自己的知識梳理了,我知道也沒有人會看。。
div
這是彙編語言中的除法運算
格式為:div [bx]
有兩種運算模式:
1. 被除數是16位,除數是8位。在這種情況下,被除數放在ax中,除數放在8位reg或者記憶體單元中。産生的結果:商放在al中,餘數放在ah中
2. 被除數是32位,除數是16位。在這種情況下,被除數的高16位放在dx中,低16位放在ax中,除數放在16位reg或者記憶體單元中。産生的結果:商放在ax中,餘數放在dx中。
3. 以上。是不是感覺很繞!
4. 下面開始程式描述
子程式描述
名稱:divdw
功能:進行不會産生溢出的除法運算,被除數為dword型,除數為word型,結果為dword型。
參數:
(ax)=dword型資料的低16位
(dx)=dword型資料的高16位
(cx)=除數
傳回:
(dx)=結果的高16位
(ax)=結果的低16位
(cx)=餘數
應用舉例:計算1000000/10(F4240H/0AH)
mov ax,4240H
mov dx,000FH
mov cx,0AH
call divdw
結果:(dx)=0001H,(ax)=86A0H,(cx)=0
代碼
assume cs:code,ss:stack
stack segment
dw ,
stack ends
code segment
start: mov ax,stack
mov ss,ax
mov sp,h
mov ax,h
mov dx,fh
mov cx,ah
call divdw
mov ax,c00h
int h
divdw: push ax
mov ax,dx
mov dx,
div cx
mov bx,ax
pop ax
div cx
mov cx,dx;餘數
mov dx,bx;高八位的商
;此時ax中存儲的就是低八位的商
ret
code ends
end start