天天看點

彙編語言——解決除法溢出問題(子程式)

問題:

mov ax,1000h;
mov dx,1
mov bx,1
div bx
           

結果商為11000H(69632),在ax(65536)中存放不下.

程式如下:

結果:

ax存放低位商,bx存放高位商,dx存放餘數。

assume cs:code
code segment
start:
	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;bx存放高位商
	
	pop ax
	
	div cx;後進行低位除法
	
           

思路:

先将高位存放到低位ax寄存器(而低位ax寄存器的值存放通過棧push儲存)

進行除法,計算完後儲存到bx寄存器作為高位商,後pop出低位ax寄存器,進行除法,結果低位商存放在ax中,餘數存放在dx。(根據彙編div規則

繼續閱讀