使用汇编语言解决除法溢出问题

 1 assume cs:code
 2 
 3 code segment
 4 start:
 5         mov ax, 4240h
 6         mov dx, 000fh
 7         mov cx, 0ah
 8         
 9         call divdw
10         
11         mov ax, 4c00h
12         int 21h
13 
14 ; 名称:divdw
15 ; 功能:进行不会产生溢出的除法运算,被除数为dword型,除数为word型号,结果为dword型号
16 ; 参数:(ax)=dword型数据的低16位
17 ;      (dx)=dword型数据的高16位
18 ;      (cx)=除数
19 ; 返回:(dx)=结果的高16位,(ax)=结果的低16位
20 ;      (cx)=余数
21 divdw:    ; 子程序定义开始
22         push ax            ; 低16位先保存
23         
24         mov ax, dx         ; ax值为高16为
25         
26         mov dx, 0          ; dx置零
27         div cx             ; H/N
28         
29         mov bx, ax         ; ax,bx的值(int)H/N,dx的值为(rem)H/N
30         
31         pop ax             ; 处理低16位
32         div cx             ; 高16位:dx的值为(rem)H/N,低16位:ax
33         
34         mov cx, dx
35         mov dx, bx
36         
37         ret            
38 code ends
39 end start
posted @ 2012-10-23 13:09  dennis_fan  阅读(1358)  评论(0编辑  收藏  举报