王爽組合語言第二版實驗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 強制性的...