继续吧,人生那么长,总得留下点什么
assume cs:codesg,ss:stack
stack segment
db 16 dup (0)
stack ends
codesg segment
start: mov ax,stack
mov ss,ax
mov sp,10h ;栈定义
mov ax,4240h ;原被除数的低位
mov dx,000Fh ;原被除数的高位
mov cx,0Ah ;除数
call divdw
mov ax,4c00h
int 21h
divdw:
push bx ;保护bx中的值吧
push ax ;原被除数的低位入栈
push dx ;将原被除数的高位入栈
push cx ;将除数入栈
push dx ;将原被除数的高位入栈
;将原被除数的高位弹出到被除数的低位 即ax
pop ax
;被除数的高位置0
mov dx,0
;将除数出栈
pop cx
;第一个式子int(H/N)的H/N
div cx
;存第一个式子的商到bx 因为*65536,即这是结果的高位
mov bx,ax
mov dx,0
pop ax ;原被除数的高位送到被除数的低位
div cx
;求得的dx作为新被除数的高位
pop ax ;+L 即新被除数的低位
div cx
mov cx,dx ;第二个式子才有余数
;这是最后的结果
mov dx,bx
pop bx ;恢复bx中的值
;dx 存结果的高位,ax存结果的低位
retn
codesg ends
end start
汇编实验十,解决除法溢出的问题divdw
最新推荐文章于 2021-12-22 21:56:06 发布