| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 
 | DATAS SEGMENTnum1 db 'Please input a number: $'
 num2 db 'Please input another number: $'
 num3 db 'The sum of two numbers: $'
 cr db 10,13,'$'
 er db 'The input error!',13,10,'$'
 bin1 dw 10 dup(?)
 buf1 db 6 dup(0)
 bin2 dw 10 dup(?)
 DATAS ENDS
 
 CODES SEGMENT
 ASSUME CS:CODES,DS:DATAS
 START:
 MOV AX,DATAS
 MOV DS,AX
 lea dx,num1
 mov ah,9
 int 21h
 mov bx,0
 input1:
 mov ah,1
 int 21h
 
 cmp al,13
 je cn
 
 sub al,30h
 jb error
 cmp al,10
 jb transbin1
 jmp error
 
 transbin1:
 mov ah,0
 mov cl,4
 shl bx,cl
 add bx,ax
 mov bin1,bx
 jmp input1
 
 cn:
 mov bx,0
 lea dx,num2
 mov ah,9
 int 21h
 
 input2:
 mov ah,1
 int 21h
 
 cmp al,13
 je en
 
 sub al,30h
 jb error
 cmp al,10
 jb transbin2
 jmp error
 
 transbin2:
 mov ah,0
 mov cl,4
 shl bx,cl
 add bx,ax
 mov bin2,bx
 jmp input2
 
 
 error:
 lea dx,er
 mov ah,9
 int 21h
 jmp start
 
 en:;转换十进制前的准备
 mov ax,bin1
 add ax,bin2 ;将bin中的二进制数传送给ax
 mov bx,16;bx=16
 mov si,5;si=5
 
 transdec:
 mov dx,0
 div bx
 cmp dl,10
 jb next
 sub dl,10
 add [buf1+si-1],1
 next:
 add [buf1+si],dl
 sub si,1
 ja transdec
 
 lea dx,num3
 mov ah,9
 int 21h
 
 output:
 inc si
 mov dl,[buf1+si]
 add dl,30h
 
 mov ah,2
 int 21h
 cmp si,5
 jb output
 
 lea dx,cr
 mov ah,9
 int 21h
 
 MOV AH,4CH
 INT 21H
 CODES ENDS
 END START
 
 |