根据这段代码调试而来:
MOV BX,11H ;BX为除数
MOV DX,5678H ;DX存高位
MOV AX,1234H ;AX存低位
MOV DI,AX ;先保存好低位
;先计算高位,所得商AX即为最后商的高位
; 所得余DX即为接下来低位运算的DX
MOV AX,DX
MOV DX,0
DIV BX
;再计算低位,所得商AX即为最后商的低位
; 所得余DX即为最后的余
MOV AX,DI
DIV BX
;32位除以10,打印10进制字符串代码
org 100h
jmp start
itostr dw 12 dup(?)
start:
MOV DX,0fH ;DX存高位
MOV AX,4240H ;AX存低位
call divwshu
mov cx,si
sub si,1
loop2:
mov dx, si+itostr
add dl,30h
mov ah,02h
int 21h
dec si
loop loop2
mov ax,4c00h
int 21h
divwshu:
push bp
mov bp,sp
sub sp,20h
push dx
push ax
push di
MOV BX,0aH ;BX为除数
mov si,0
lp2: mov ax,[bp-24h]
mov dx,[bp-22h]
MOV DI,AX ;先保存好低位
;先计算高位,所得商AX即为最后商的高位
; 所得余DX即为接下来低位运算的DX
MOV AX,DX
MOV DX,0
DIV BX ;需要判断商是否为0,是0说明需要和前面的AX一起做除法
cmp ax,0
je nextdiv
mov di,ax ;方便查看值
mov [bp-22h],ax
;再计算低位,所得商AX即为最后商的低位
; 所得余DX即为最后的余
MOV AX,[bp-24h]
DIV BX
cmp ax,0
je end2
mov [bp-24h],ax
mov si+itostr,dx
mov cx,si+itostr
inc si
jmp lp2
nextdiv:
mov ax,[bp-24h]
mov dx,[bp-22h]
next: div bx
cmp ax,0
je end2
;mov [bp-24h],ax
mov si+itostr,dx
mov cx,si+itostr
mov dx,0
;mov [bp-22h],dx
inc si
jmp next
end2:
mov si+itostr,dx
mov cx,si+itostr
inc si
pop di
pop ax
pop dx
mov sp,bp
pop bp
ret