當且僅當 h(高16位) ≤ ( n - 1 ) 時 才不會溢位 即
( h * 65536 ) / n + l / n ≤ 65535( 商) + ( n - 1 ) 餘數 0ffffh = 65536
通俗的講就是高16位不能大於等於除數
=》 (n-1) * 65536 / n + l/n ≤ 65534 + n
=》 (n-1) * 65536 + l ≤ 65534 n + n * n
=》 65536n - 65536 + l ≤ 65534 n + n * n
=》 l ≤ n * n - 2n + 65536
=》 l ≤ n * n - 2n + 1 + 65535
=》 l ≤ (n-1)*(n-1) + 65535
l 為低16位 所以 l ≤ 65535 所以上式一定成立
反向證明 當高16位大於除數n時必然會溢位
( (dx) * 65536 +(ax) ) / n ≥ (dx) * 65536 / n + ax / n
= (dx) / n * 65536 + ax / n
≥ 1 * 65536
> 65535 = ffff 所以必然溢位
所以可以用除以兩次的方法來解決除法溢位問題
第一次mov dx,0
mov ax,h ;h為高16位
mov cx,n
div cx ;ax中存商,dx存餘數,餘數必然是小於n,所以再次使用除法指令一定不會溢位(上面以證明了)
第二次mov bx,ax ;將第一次的商放到bx中,第一的商也就是最總結果的高16位
mov ax,l ;l為低16位
div n ;這時候dx中數值為第一除法的餘數且小於n,ax存商,dx存餘數
mov cx,dx ;餘數放到cx中
mov dx,bx ;第一次的高16位放到dx中
-----最終結果 dx存商的高16位 ax存商的低16位 cx存餘數
使用組合語言解決除法溢位問題
1 assume cs code23 code segment 4start 5mov ax,4240h 6mov dx,000fh 7mov cx,0ah89 call divdw 1011 movax,4c00h 12int 21h1314 名稱 divdw15 功能 進行不會產生溢位的除法運算...
解決除法溢位問題
王爽組合語言第二版實驗10.2 一 實驗要求 當用div指令進行8位除法運算時結果大於8位,或進行16位除法運算結果大於16位時,會出現除法溢位的錯誤。要求編寫乙個子程式,實現支援結果不會出現溢位的除法運算 二 演算法概述 通過乙個公式將可能產生溢位的運算x n,轉變為多個不會產生溢位的除法運算。公...
組合語言 實驗10 2 解決除法溢位的問題
寫給自己的一些題外話 因為各種各樣 考試,加上萎靡的精神狀態 的原因,在這一題卡了好幾天,就是搞不懂商和餘數的表示,直到今天才恍然大悟,下面我先總結一下div的用法,就當做自己的知識梳理了,我知道也沒有人會看。這是組合語言中的除法運算 格式為 div bx 有兩種運算模式 1.被除數是16位,除數是...