- div:被除数的高16位存放在DX中,低16位存放在AX中,一般情况下只用AX,把DX置零,得到的结果AX中存放商,DX存放余数。
被除数存放在AX中,得到的结果商存在AL中,余数存在AH中。 - mul:1位存在AX中,另一位存在其他的16位寄存器中,mul 16位寄存器,得到的结果高16位存放在DX中,低16位存放在AX中,一般情况下用到的是AX。
一位存放在AL中,得到的结果存在AX中。
入口参数为DX和SI,DX中存放的是要输出的数值。
SI为当前偏移值,除10得到的余数倒着存放在dval中
RESULT DW ?
dval db 5 dup(?)
dlen=$-result ;当前偏移值
output proc ; 输入参数dx,存要输出的结果
push ax
push cx
p1:
dec si
mov ax,dx
mov dx,0
mov cx,10
div cx
xchg ax,dx
mov [si],al
cmp dx,0
jne p1
p3:
mov dl,[si]
add dl,48
mov ah,2
int 21h
add si,1
cmp si,dlen
jb p3
jmp p4
p4:
pop cx
pop ax
ret
output endp
;主函数中
mov si,offset result
mov dx,[si]
mov si,offset dlen
call output
;输出较大的数值
DATAS SEGMENT
;此处输入数据段代码
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;此处输入代码段代码
mov ax,14858
call output
MOV AH,4CH
INT 21H
output proc;以AX作为入口参数,DX存高16位,AX存低16位
push bx
push cx
push dx
mov bx,10
mov cx,0
A1:
mov dx,0
div bx;商在AX中,余数在DX中
push dx
inc cx
cmp ax,0
jne A1
A2:
pop dx
add dl,48
mov ah,2
int 21h
loop A2
pop dx
pop cx
pop bx
ret
output endp
CODES ENDS
END START