天天看點

***彙編語言 實驗10.2 解決除法溢出的問題彙編語言 實驗10.2 解決除法溢出的問題

彙編語言 實驗10.2 解決除法溢出的問題

寫給自己的一些題外話: 因為各種各樣(考試,加上萎靡的精神狀态)的原因,在這一題卡了好幾天,就是搞不懂商和餘數的表示,直到今天才恍然大悟,下面我先總結一下div的用法,就當做自己的知識梳理了,我知道也沒有人會看。。

div

這是彙編語言中的除法運算
    格式為:div [bx]
           
有兩種運算模式:
1.  被除數是16位,除數是8位。在這種情況下,被除數放在ax中,除數放在8位reg或者記憶體單元中。産生的結果:商放在al中,餘數放在ah中
    2.  被除數是32位,除數是16位。在這種情況下,被除數的高16位放在dx中,低16位放在ax中,除數放在16位reg或者記憶體單元中。産生的結果:商放在ax中,餘數放在dx中。
    3.  以上。是不是感覺很繞!
    4.  下面開始程式描述
           

子程式描述

名稱:divdw
功能:進行不會産生溢出的除法運算,被除數為dword型,除數為word型,結果為dword型。
參數:
    (ax)=dword型資料的低16位
    (dx)=dword型資料的高16位
    (cx)=除數
傳回:
    (dx)=結果的高16位
    (ax)=結果的低16位
    (cx)=餘數
應用舉例:計算1000000/10(F4240H/0AH)
mov ax,4240H
mov dx,000FH
mov cx,0AH
call divdw
結果:(dx)=0001H,(ax)=86A0H,(cx)=0
           

代碼

assume cs:code,ss:stack
stack segment
    dw ,
stack ends
code segment
start:  mov ax,stack
    mov ss,ax
    mov sp,h
    mov ax,h
    mov dx,fh
    mov cx,ah
    call divdw

    mov ax,c00h
    int h

divdw:  push ax
    mov ax,dx
    mov dx,
    div cx
    mov bx,ax
    pop ax
    div cx
    mov cx,dx;餘數
    mov dx,bx;高八位的商
    ;此時ax中存儲的就是低八位的商
    ret

code ends
end start
           

繼續閱讀