第十章實驗(二)除法溢位的問題

2021-05-04 05:06:05 字數 576 閱讀 2877

題目:進行不會產生溢位的處罰運算,被除數為dword型,除數為word型,結果為dword。

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

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

(cx)=除數

返回:(dx)=結果的高16位

(ax)=結果的低16位

(cx)=餘數

應用舉例:計算1000000/10(f4240h/0ah)

解答:這裡主要是運用公式x/n=int(h/n)*65536+[rem(h/n)*65536+l]/n來進行計算。這裡面的h是被除數x的高16位,n是除數,l是被除數的低16位。int()是取商,比如int(38/10)=3;rem()是取餘數,比如rem(38/10)=8。這裡的關鍵是要明白乘以65536的意思,int(h/n)*65536中的65536所扮演的不是乘數的角色,而是乙個位移量,假設說首先我們想想用dx和ax那種除法

比如被除數是12222h,那麼dx=1,ax=2222 那麼這裡的dx和ax是怎樣表示12222h的?就是dx×10000h+ax,這樣在一看公式我們就明白了,加號的左面就是放商的高位,右面是低位

源**:

除錯結果:

第十章實驗10 2

本實驗要實現32位除法結果不溢位 被除數32位,除數16位 assume cs code code segment start mov ax 4240h 引數1 被除數的低16位,放入ax mov dx 000fh 引數2 被除數的高16位,放入dx mov cx 0ah 引數3 除數,放入cx c...

第十章實驗10 3

本實驗要將十進位制數字,以ascii碼的形式顯示到螢幕上 assume cs code data segment db 10 dup 0 存放要寫到螢幕上的數字的記憶體段 data ends code segment start mov ax 17897 將十進位制數字17897顯示到螢幕上 mov...

第十章 函式

使用def關鍵字 定義個數可變的位置形參 定義個數可變的關鍵字形參 定義預設值引數 定義個數可變的位置形參 deffun1 args 結果為乙個元組 print args fun1 10,20,30 10,20,30 定義個數可變的關鍵字形參 deffun2 args 結果為乙個字典 print a...