|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 z827901654 于 2020-1-12 21:13 编辑
- assume cs:code
- data segment
- dd 0,0,0,0,0,0,0,0
- dw 0,0,0,0,0,0,0,0
- data ends
- code segment
- start:
- mov ax,4240h
- mov dx,000fh
- mov cx,0ah
- call divdw
-
- mov ax,4c00h
- int 21h
-
- divdw:
- mov bx,data
- mov ds,bx ;定义存储单元地址
-
- mov ds:[0],dx
-
- mov dx,0
- div cx ;做低位除法
- mov ds:[2],ax ;存储低位商
- mov ds:[4],dx ;存储低位余数
-
- mov dx,0
- mov ax,ds:[0]
- div cx ;做高位除法
- mov ds:[6],ax ;存储高位商
- mov ds:[8],dx ;存储高位余数
-
- mov ax,0
- div cx ;用高位余数继续做除法(断言:该除法不超界)
- mov ds:[10],ax ;存储高位余数除法的商
- mov ds:[12],dx ;存储高位余数除法的余数
-
- mov ax,ds:[4]
- add dx,ax
- mov ax,dx
- mov dx,0
- div cx ;用余数之和继续做除法(这里存疑,因为余数之和可能超界)
- mov ds:[14],ax ;存储余数之和除法的商
- mov ds:[16],dx ;存储余数之和除法的余数
-
- mov cx,ds:[16] ;给出最终余数
-
- mov ax,ds:[2]
- mov dx,ds:[10]
- add ax,dx
- mov dx,ds:[14]
- add ax,dx ;给出最终商的低16位(断言:该加法不超界)
-
- mov dx,ds:[6] ;给出最终商的高16位
-
- ret
-
- code ends
- end start
-
复制代码
问题:解决标示存疑处加法溢出问题,以及该方案的效率 |
|