实验10-2
assume cs:codecode segment
start:
mov ax,4247h
mov dx,000fh
mov cx,0ah
call divdw
mov ax,4c00h
int 21h
divdw:
mov bx,ax
mov ax,dx
mov dx,0;; 以上三步则是 计算 H/N, 之后ax=int(H/N), dx=rem(H/N)
div cx
; 因为当前ax中存放的是 int(H/N),相当于存放的是高位的数据
; 所以下面这3个 xor 操作是将高位的值放到bx中,然后再将 L 的数据放到ax中
xor ax,bx ; 交换 ax和bx 的值
xor bx,ax ; 交换 ax和bx 的值
xor ax,bx ; 交换 ax和bx 的值
; 交换的目的其实只是为了减少空间的使用,不使用多余的内存来存储数据
div cx
; 这一步之后,存放的是 ax=(rem(H/N)*65536+L)/N 的结果
; dx=余数
; 将高位的结果放到dx中
xor dx,bx
xor bx,dx
xor dx,bx
mov cx,bx ; 将余数存入cx
ret
code ends
end start
; 将高位的结果放到dx中
xor dx,bx
xor bx,dx
xor dx,bx
mov cx,bx ; 将余数存入cx
这里不对吧? ;不溢出除法子程序开始
DIVDW:
PUSH BX
;AX=L DX=H CX=N
MOV BX,AX ;备份被除数低16位
MOV AX,DX
XOR DX,DX ;DX清零
DIV CX ;计算H/N,之后AX=商INT(H/N) DX=余数REM(H/N)
;交换AX,BX,H放BX中,L放AX中
XOR AX,BX
XOR BX,AX
XOR AX,BX
DIV CX ;AX=/N,DX=余数
MOV CX,DX ;余数放CX中
MOV DX,BX
POP BX
RET
;不溢出除法子程序结束
页:
[1]