組合語言除法公式溢位問題

2021-09-29 07:31:19 字數 967 閱讀 4064

當且僅當 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位,除數是...