實驗10 2 解決除法溢位的問題

2021-06-21 14:13:52 字數 931 閱讀 1176

;子程式描述

;名稱:divdw

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

;為dword型。

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

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

;        (cx)= 除數

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

;        (cx)= 餘數

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

assume cs:code  

code segment

start: mov ax,4240h

mov dx,000fh

mov cx,0ah

call divdw

mov ax,4c00h

int 21h

divdw: push bx;要用到的暫存器bx、di入棧,下面用它來暫存引數的值

push di;不要將ax,dx,cx入棧,因為程式的目的最終是要修改它們的值

mov bx,ax

mov ax,dx

mov dx,0

div cx;這一步做完以後,ax中為結果的高十六位,即int(h/n),dx中是rem(h/n)的值

mov di,ax

mov ax,bx

div cx;這一步做完以後,ax中為結果的低16位,dx中儲存餘數

mov cx,dx

mov dx,di

pop di

pop bx

ret

code ends

end start

;結果:(dx)= 0001h,(ax)= 86a0h,(cx)= 0

組合語言 實驗10 2 解決除法溢位的問題

寫給自己的一些題外話 因為各種各樣 考試,加上萎靡的精神狀態 的原因,在這一題卡了好幾天,就是搞不懂商和餘數的表示,直到今天才恍然大悟,下面我先總結一下div的用法,就當做自己的知識梳理了,我知道也沒有人會看。這是組合語言中的除法運算 格式為 div bx 有兩種運算模式 1.被除數是16位,除數是...

解決除法溢位問題

王爽組合語言第二版實驗10.2 一 實驗要求 當用div指令進行8位除法運算時結果大於8位,或進行16位除法運算結果大於16位時,會出現除法溢位的錯誤。要求編寫乙個子程式,實現支援結果不會出現溢位的除法運算 二 演算法概述 通過乙個公式將可能產生溢位的運算x n,轉變為多個不會產生溢位的除法運算。公...

實驗10 編寫子程式2解決除法溢位的問題

分析 前面大概都能看懂,主要書那個公式是怎樣分析出來的,理解後 就很簡單了。好比如乙個最大存99的數,你要計算1012 3 先拿出10 3 3 注意這個就是餘數的最高位 然後剩下 1 100 12 3,不用說,這個就是低位,你可以筆算來模擬一下你是怎樣算出1012 3你就知道我說啥了。他為什麼會有6...