日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

汇编语言:实验10 根据材料编程—2.解决除法溢出的问题

發(fā)布時間:2025/3/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 汇编语言:实验10 根据材料编程—2.解决除法溢出的问题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

問題描述

用div做除法的時候可能產(chǎn)生除法溢出。由于有這樣的問題,在進行除法運算的時候要注意除數(shù)和被除數(shù)的值,比如1000000/10就不能用div指令來計算。那么怎么辦?我們用下面的子程序divdw解決

實驗效果


實驗要求

子程序描述

名稱:divdw

功能:進行不會產(chǎn)生溢出的除法運算,被除數(shù)為dword型,除數(shù)為word型,結(jié)果為dword型。

參數(shù):(ax)=dword型數(shù)據(jù)的低16位

???? (dx)=dword型數(shù)據(jù)的高16位

???? (cx)=除數(shù)

返回:(dx)=結(jié)果的高16位,(ax)=結(jié)果的低16位

(cx)=余數(shù)

數(shù)學(xué)公式說明

書上給出提示公式:X/N = int(H/N)*65536+[rem(H/N)*65536+L]/N,到底什么意思呢?剛開始博主也是一臉懵逼。

其實書上說了 int(H/N)表示取H/N的商,商用16位才能包的住,然后?int(H/N)*65536,并不是真正的將商*65536,65536=2^16,剛好表示將商往左移16位,H/N的商為X/N結(jié)果的高16位

[rem(H/N)*65536+L]/N 又是什么意思呢?rem(H/N)表示H/N的余數(shù),然后右移16位 將原數(shù)據(jù)的低16位放到低位,構(gòu)成32位的被除數(shù)!由于int(H/N)*65536鐵定是整數(shù)且沒有余數(shù)為X/N結(jié)果的高16位,那么結(jié)果的低16位和余數(shù)就在[rem(H/N)*65536+L]/N 中產(chǎn)生后半部分除法運算的結(jié)果作為X/N的低16位,余數(shù)作為X/N的余數(shù)

實驗代碼

;實驗10 問題2 解決除法溢出的問題 ;用div做除法的時候可能產(chǎn)生除法溢出。由于有這樣的問題,在進行除法運算的時候要注意除數(shù)和被除數(shù)的值 ;比如1000000/10就不能用div指令來計算。那么怎么辦?我們用下面的子程序divdw解決。 assume cs:codecode segment start:mov ax,4240hmov dx,000fhmov cx,0ahcall divdwmov ax,4c00hint 21h;名稱:divdw;功能:進行不會產(chǎn)生溢出的除法運算,被除數(shù)為dword型,除數(shù)為word型,結(jié)果為dword型。;參數(shù):(ax)=dword型數(shù)據(jù)的低16位; (dx)=dword型數(shù)據(jù)的高16位; (cx)=除數(shù);返回:(dx)=結(jié)果的高16位,(ax)=結(jié)果的低16位;(cx)=余數(shù);核心公式X/N = INT(H/N)*65536+[REM(H/N)*65536+L]/N;X:被除數(shù),N(cx):除數(shù),H(dx):X的高16位,L(ax):X的低16位divdw:push bx ;寄存器不夠用,將bx拿來用push ax ;臨時存放低16位(L);計算 INT(H/N)*65536 32位除16位,商16位存放在AX中 是整個X/N結(jié)果的高16位,余數(shù)16位在DX中 剛好作為 [REM(H/N)*65536+L]的高16位mov ax,dxmov dx,0div cx mov bx,ax ;不能直接放到dx中,后面還要用到dx;計算 [REM(H/N)*65536+L]/N,商16位存放AX中 剛好作為X/N結(jié)果的低位,余數(shù)16位放DX中-> 放到CX中去pop ax ;被除數(shù)低16位還原(L),剛好作為 [REM(H/N)*65536+L]的低16位div cxmov cx,dx ;余數(shù)16位放-> CX中去mov dx,bx ;將結(jié)果高16位放->DX中去pop bx ;還原bxret code ends end start



總結(jié)

以上是生活随笔為你收集整理的汇编语言:实验10 根据材料编程—2.解决除法溢出的问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。