1 ;HtoD 2 3 data segment 4 n dw ? 5 data ends 6 7 stack segment 8 db 50 dup(?) 9 stack ends 10 11 code segment 12 assume cs:code,ss:stack,ds:data 13 start:mov ax,stack 14 mov ss,ax 15 mov sp,50 16 mov ax,data 17 mov ds,ax 18 19 mov si,10 20 mov di,10000 21 mov bx,0 22 mov cx,0 23 ;input the number which is lower than 6,5536,0000(65536(high)*10000(low)) 24 s:mov ah,1 25 int 21h 26 cmp al,0dh ;when input ' ',quit 27 jz t 28 sub al,30h 29 mov ah,0 30 mov ds:[0],ax 31 ;high part 32 mov ax,bx 33 mul si 34 mov bx,ax 35 ;low part 36 mov ax,cx 37 mul si ;ax*10=dx_a 38 div di ;can't div 10000h(0000h~FFFFh) =ax(Shang)...dx(Yu) 39 40 add bx,ax ;high part 41 mov cx,dx ;low part 42 add cx,ds:[0] ;it won't JinWei , because 43 ;dx_ax=ax*10 , the last character of dx_ax value 0 , 44 ;dx=dx_ax%10000 , the last character of dx is 0 , 45 ;dx=dx+ds:[0](0~9) , the last character won't JinWei , 46 ;thus cx won't JinWei 47 jmp s 48 t:mov ax,cx 49 mov dx,bx 50 51 cmp dx,0 52 jnz HtoD_dword 53 call HtoD_word 54 55 exit:mov ah,4ch 56 int 21h 57 58 HtoD_word: 59 mov bx,10 ;division 60 mov cx,0 61 mov dx,0 ;high part(dx_ax<10000) 62 u:div bx 63 push dx 64 mov dx,0 65 inc cx 66 cmp ax,0 67 jnz u 68 69 mov ah,2 70 v:pop dx ;dx<10 71 add dl,30h ;0->48 48 72 int 21h 73 loop v 74 75 ret 76 77 HtoD_dword: 78 push ax ;store low part 79 mov ax,dx 80 call HtoD_word 81 ;output '0'(low part must contain four character) 82 pop bx ;bx=low part 83 mov ah,2 84 mov dl,'0' 85 cmp bx,1000 86 ja w 87 int 21h 88 cmp bx,100 89 ja w 90 int 21h 91 cmp bx,10 92 ja w 93 int 21h 94 95 w:mov ax,bx ;ax=low part 96 call HtoD_word 97 98 jmp exit 99 100 code ends 101 end start 102 103 ;mov ax,432 104 ;call HtoD_word 105 106 ;mov ax,0 107 ;mov dx,1 108 ;call HtoD_dword