|
发表于 2012-1-2 15:13:46
|
显示全部楼层
附上我的代码,都有注释,也许能帮你- 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
复制代码
|
|