附上我的代码,都有注释,也许能帮你assume cs:code, ss:stack
stack segment stack
dw 8 dup(0)
stack ends
data segment
dd 2001;20342357 ;给出被除数
dw 2;291 ;给出除数
data ends
code segment
start:
mov ax, stack ;设置栈段
mov ss, ax
mov sp, 16
mov ax, data ;设置用户数据
mov ds, ax
mov ax, ds:[0] ;给出子程序的参数低位
mov dx, ds:[2] ;给出子程序的参数高位
mov cx, ds:[4] ;给出子程序的参数除数
call divdw ;调用子程序进行运算
mov ax, 4c00h ;运算结束
int 21h
;在主程序dx中给出被除数的高位
;在主程序ax中给出被除数的低位
;在主程序cx中给出除数
;程序将返回商的高位在dx,低位在ax,余数在cx
;程序会占用bx寄存器,继承dx,ax,cx寄存器
divdw:
push bx ;计算中用到bx故先保存bx
push ax ;先将低位被除数ax入栈
mov ax, dx ;将高位给ax做高位商运算
mov dx, 0 ;将dx置0
div cx ;得到高位的商在ax余数在dx
mov bx, ax ;将高位商保存到bx
pop ax ;取出低位被除数到ax
div cx ;计算低位的商和余数分别在ax和dx
mov cx, dx ;将余数给cx
mov dx, bx ;将bx保存的高位商给dx
pop bx ;将保存的主程序bx的值返回
ret ;子程序返回
code ends
end start
|