寫給自己的一些題外話: 因為各種各樣(考試,加上萎靡的精神狀態)的原因,在這一題卡了好幾天,就是搞不懂商和餘數的表示,直到今天才恍然大悟,下面我先總結一下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 一開始用了乙個暫存器表示所有項,但是後來發現四個資料佔的位元...