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

2022-05-09 02:21:08 字數 1321 閱讀 1053

寫給自己的一些題外話: 因為各種各樣(考試,加上萎靡的精神狀態)的原因,在這一題卡了好幾天,就是搞不懂商和餘數的表示,直到今天才恍然大悟,下面我先總結一下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 0,0

stack ends

code segment

start:

mov ax,stack

mov ss,ax

mov sp,10h

mov ax,4240h

mov dx,000fh

mov cx,0ah

call divdw

mov ax,4c00h

int 21h

divdw:

push ax

mov ax,dx

mov dx,0

div cx

mov bx,ax

pop ax

div cx

mov cx,dx;餘數

mov dx,bx;高八位的商

;此時ax中儲存的就是低八位的商

retcode ends

end start

組合語言實驗10 解決除法溢位

實驗二 解決除法溢位 assume cs code,ss stack stack segment dw 8 dup 0 stack ends code segment start mov ax,stack 初始化棧 mov ss,ax mov sp,16 mov ax,0ffffh 被除數低位 mo...

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

子程式描述 名稱 divdw 功能 進行不會產生溢位的除法運算,被除數為dword型,結果 為dword型。引數 ax dword型資料的低16位 dx dword型資料的高16位 cx 除數 返回 dx 結果的高16位,ax 結果的低16位 cx 餘數 應用舉例 計算1000000 10 f424...

《組合語言》實驗 實驗

注意 db定義位元組型別變數,乙個位元組資料百佔1個位元組單度元,讀完乙個,偏移量加1 dw定義字型別變問量,乙個字資料佔2個位元組單元,讀完乙個,權偏移量加2 dd定義雙字型別變數版,乙個雙字資料佔4個位元組單元,讀完乙個,權偏移量加4 一開始用了乙個暫存器表示所有項,但是後來發現四個資料佔的位元...