加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

ASM 大数除法

发布时间:2020-12-14 03:39:38 所属栏目:大数据 来源:网络整理
导读:assume cs:code,ss:stack stack segment ?? ?dw 16 dup(0) stack ends code segment start:?? ?mov ax,4240H ?? ??? ?mov dx,000FH ?? ??? ?mov cx,0AH ?? ??? ?call divdw ?? ??? ?mov ax,4C00H ?? ??? ?int 21H ;子程序说明 ;参数????ax 存放被除数低16位

assume cs:code,ss:stack

stack segment
?? ?dw 16 dup(0)
stack ends

code segment
start:?? ?mov ax,4240H
?? ??? ?mov dx,000FH
?? ??? ?mov cx,0AH
?? ??? ?call divdw

?? ??? ?mov ax,4C00H
?? ??? ?int 21H
;子程序说明
;参数????ax 存放被除数低16位
;????????? dx 存放被除数高16位
;?? ??? ?? cx 存放除数
;返回值?? ?dx 存放商的高16位
;?? ??? ?????? ax 存放商果的低16位
;?? ??? ?????? cx 存放余数
?? ?divdw:
?? ??? ?push si?? ???? ;这个子程序只需要入栈保护si一个寄存器 因为ax,cx,dx是要作为出口参数返回的,如果子程序结束出栈恢复寄存器则会覆盖作为出口参数的值

?? ??? ?push ax?? ??? ? ;保存被除数低位 此操作不是为了保护原寄存器
?? ??? ?mov ax,dx?? ? ;准备做被除数高位的除法
?? ??? ?mov dx,0?????? ;除数是16位则被除数是32位,dx放高位
?? ??? ?div cx?????????????;执行完后ax存放高位除法的商,dx存放高位除法的余数
?? ??? ?mov si,ax?? ??? ;高位除法商保存
?? ??? ?pop ax?? ??? ??? ;低位还原到ax寄存器,此时dx是余数,刚好对应了公式中的rem(H/N)*65536+L
?? ??? ?div cx?? ??? ???? ;执行结束后ax存放低位除法的商,dx是余数
?? ??? ?mov cx,dx?? ? ;将余数存到cx用于返回
?? ??? ?mov dx,si?? ?? ;将高位商存到dx用于返回
?? ??? ?
?? ??? ?pop si
?? ??? ?ret
code ends
end start

;突破点:乘65536指的是高16位和低16位的关系 并不是要进行乘法运算

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读