解決除法溢位問題

2022-05-15 01:38:31 字數 1371 閱讀 2655

王爽組合語言第二版實驗10.2

一、實驗要求

當用div指令進行8位除法運算時結果大於8位,或進行16位除法運算結果大於16位時,會出現除法溢位的錯誤。要求編寫乙個子程式,實現支援結果不會出現溢位的除法運算

二、演算法概述

通過乙個公式將可能產生溢位的運算x/n,轉變為多個不會產生溢位的除法運算。公式中,等號右邊的所有除法運算都可以用div指令來實現,並且不會產生除法溢位

公式:x/n = int(h/n)*65536 + [rem(h/n)*65536 + l]/n

x:被除數,範圍:[0,ffffffff]

n:除數,範圍:[0,ffff]

h:x的高16位

l:x的低16位

int():描述性運算子,取商

ram():描述性運算子,取餘數

三、程式介面

名稱:divdw

功能:進行不會產生溢位的除法運算,被除數為dword型,除數為word型,結果為dword型

引數:(ax)=dword型資料的低16位

(dx)=dword型資料的高16位

(cx)=除數

返回:(ax)=商的低16位

(dx)=商的高16位

(cx)=餘數

四、實現**

divdw:;

子程式定義開始

push bx

push ax

mov ax,dx

mov dx,0

div cx

mov bx,ax

pop ax

div cx

mov cx,dx

mov dx,bx

pop bx

ret五、測試**

assume cs:codesg,ss:stacksg

stacksg segment

dw 8 dup (0)

stacksg ends

codesg segment

start:

mov ax,stacksg

mov ss,ax

mov sp,16

mov ax,4240h

mov dx,000fh

mov cx,0ah

call divdw

mov ax,4c00h

int 21h

codesg ends

end start

六、測試結果

在執行後,測試除法命令的商為dx*16+ax,餘數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 功能 進行不會產生溢位的除法運算...

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

當且僅當 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 ...

CSS解決文字溢位問題

有時候乙個文字框中的文字太多,但文字框有設定的寬度,這是會出現文字溢位的現象,例如乙個li中文字數量較多,但li有自己的寬度,就會導致下面的情景 文字內容文字內容文字內容文字內容文字內容文文字內容文字內容 為了解決上面的問題,我們可以在css中設定如下 white space nowrap 強制性的...