我的代码如下
只是只有当两操作数均为正数时调试结果是对的
不知道为什么  请高手指教
小弟先谢谢了
common macro p1
    div m5
    add dx,3030h
    mov [p1+5],dl
    mov dx,0
    div m5
    add dx,3030h
    mov [p1+4],dl
    div m1
    add ah,30h
    mov [p1+3],ah
    mov ah,0
    div m1
    add ax,3030h
    mov [p1+2],ah
    mov [p1+1],al
    endm
common1 macro p1,p2
    mov ax,yushu
    xor dx,dx
    mul m5
    div b
    mov yushu,dx
    add ax,3030h
    mov [p1+p2],al
    endm
;********************两正数相加********************
addd macro p1
    mov ax,a
    mov bx,b
    mov dx,0
    clc
    add ax,bx
    adc dx,0
    common p1
    endm
;********************两正数相减********************
subb macro p1
    local j1
    local j2
    local j3
    mov ax,a
    mov bx,b
    mov dx,0 
    clc
    cmp ax,bx 
    jl j1
    jnl j2
j1: 
    sub ax,bx 
    neg ax
    mov [p1],2dh
    jmp j3
j2: 
    sub ax,bx
j3:
    common p1
    endm
;********************两正数相乘********************
mull macro p1
    mov ax,a
    mov dx,0 
    mul b
    div m4
    mov yushu,dx
    xor dx,dx
    common c3
    mov ax,yushu
    mov dx,0
    div m5
    add dx,3030h
    mov [p1+9],dl
    mov dx,0
    div m1
    add ah,30h
    mov [p1+8],ah
    mov ah,0
    div m1
    add ax,3030h
    mov [p1+7],ah
    mov [p1+6],al    
    endm
;********************两正数相除********************
divv macro p1
    mov ax,a
    xor dx,dx
    div b
    mov yushu,dx
    mov dx,0
    common c4
    mov [p1+6],2eh
    
    common1 p1,7
    common1 p1,8
    common1 p1,9
    common1 p1,10
    common1 p1,11
    
    endm
;**************************************************
datarea segment
    string   db 'Enter two operands(<10000 and qufen by","end by Enter):',13,10,'$'
    hh       db 13,10,'$'
    operands db 100 dup(?)
    a        dw ?
    b        dw ?
    c1       db 6 dup(?),13,10,'$'
    c2       db 6 dup(?),13,10,'$'
    c3       db 10 dup(?),13,10,'$'
    c4       db 12 dup(?),'(baoliu 5 wei xiaoshu)',13,10,'$'
    var1     dw ?
    var2     dw ?
    m1       db 10
    m2       db 100
    m3       dw 1000
    m4       dw 10000
    m5       dw 10
    yushu   dw ?
datarea ends
prognam segment

main proc far
    assume cs:prognam,ds:datarea
start:
    push ds
    push es
    mov ax,0
    push ax
    
    mov ax,datarea
    mov ds,ax
    mov es,ax
    mov bx,0
    mov cx,0
;*********************************************    
    lea dx,string
    mov ah,09h
    int 21h
printit:
    mov ah,01h
    int 21h
    mov operands[bx],al
    inc bx
    cmp al,0dh
    jz next
    jnz printit
;********************************************* 
next: 
    lea di,operands
    mov bx,0
    mov ax,0
    mov dx,0
m11:   
    mov al,2ch
    scasb
    jz m22
    inc cx
    jmp m11
m22:
    mov al,0dh
    scasb
    jz  move
    inc bx
    jmp m22  
;*********************************************                                                                       
move: 
    mov var1,cx
    mov var2,bx
    mov bx,var1
    dec bx
    lea di,operands
    cmp [di],2dh
    jnz numa
    dec cx
numa:
    mov ax,0
    mov dx,0
    mov al,[di+bx]
    sub al,30h
    add dx,ax
    dec bx
    dec cx
    cmp cx,0
    jz numb
    mov ax,0
    mov al,[di+bx]
    sub al,30h
    mul m1
    add dx,ax
    dec bx
    dec cx
    cmp cx,0
    jz numb
    mov ax,0
    mov al,[di+bx]
    sub al,30h
    mul m2
    add dx,ax
    dec bx
    dec cx
    cmp cx,0  
    jz numb
    mov ax,0
    mov a,dx
    xor dx,dx
    mov al,[di+bx]
    sub al,30h
    mul m3
    mov dx,a
    add dx,ax
    dec bx
    dec cx
    cmp cx,0  
    jz numb      
    mov ax,0
    mov a,dx
    xor dx,dx
    mov al,[di+bx]
    sub al,30h
    mul m4
    mov dx,a
    add dx,ax
    dec bx
    dec cx
    cmp cx,0  
    jz numb  
numb: 
    mov a,dx
    mov dx,0
    mov bx,var1
    mov cx,var2
    lea di,operands
    inc bx
    add di,bx
    mov bx,var2
    dec bx
    cmp [di],2dh
    jnz bb
    dec cx
bb: 
    mov ax,0
    mov al,[di+bx]
    sub al,30h
    add dx,ax
    dec bx
    dec cx
    cmp cx,0
    jz operation
    mov ax,0
    mov al,[di+bx]
    sub al,30h
    mul m1
    add dx,ax
    dec bx
    dec cx
    cmp cx,0
    jz operation
    mov ax,0
    mov al,[di+bx]
    sub al,30h
    mul m2
    add dx,ax
    dec bx
    dec cx
    cmp cx,0  
    jz operation
    mov ax,0
    mov b,dx
    xor dx,dx
    mov al,[di+bx]
    sub al,30h
    mul m3
    mov dx,b
    add dx,ax
    dec bx
    dec cx
    cmp cx,0  
    jz operation      
    mov ax,0
    mov b,dx
    xor dx,dx
    mov al,[di+bx]
    sub al,30h
    mul m4
    mov dx,b
    add dx,ax
    dec bx
    dec cx
    cmp cx,0  
    jz operation
operation:  
    mov b,dx
    mov cx,var1
    inc cx
    lea di,operands
    cmp [di],2dh
    jz op3
    add di,cx
    cmp [di],2dh
    jz op2
    jnz op1
;********************操作数a正b正********************
op1:
    addd c1
    subb c2  
    mull c3
    divv c4 
    jmp out1
;********************操作数a正b负********************           
op2:
    subb c1
    addd c2
    mov [c3],2dh
    mull c3
    mov [c4],2dh
    divv c4
    jmp out1

;********************操作数a负b正******************** 
op3:lea di,operands
    mov cx,var1
    inc cx
    add di,cx
    cmp [di],2dh
    jz op4 
    
    subb c1
    cmp [c1],2dh
    jz x1
    jnz x2
x1:
    mov [c1],0
    jmp xx
x2:
    mov [c1],2dh
xx:   
    addd c2
    mov [c2],2dh
    mull c3
    mov [c3],2dh
    divv c4
    mov [c4],2dh
    jmp out1
;********************操作数a负b负********************
op4:
    addd c1
    mov [c1],2dh
    subb c2
    cmp [c2],2dh
    jz y1
    jnz y2
y1:
    mov [c2],0
    jmp yy
y2:
    mov [c2],2dh
yy:
    mull c3
    divv c4
;****************************************************
out1:
    lea dx,hh
    mov ah,09h
    int 21h
    lea dx,c1
    mov ah,09h
    int 21h
    lea dx,c2
    mov ah,09h
    int 21h
    lea dx,c3
    mov ah,09h
    int 21h
    lea dx,c4
    mov ah,09h
    int 21h

exit:
mov ah,4ch
int 21h

main endp
prognam ends
end start