;两个多位十进制数相乘,并将结果送屏幕显示
DATAS SEGMENT
    X        DB    
4,5,6,7        ;定义被乘数
    N1        EQU    $-X
    Y        DB    
1,2,3,4        ;定义乘数
    N2        EQU    $-Y
    Z        DB    30H    DUP(?)
    P        DB    '4567X1234
='
    Q        DB    30H    DUP(?)
DATAS ENDS

STACKS SEGMENT    STACK    'STACK'        
    DW        50H    DUP(?)
    TOP        LABEL    WORD
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES
,DS:DATAS,SS:STACKS
MAIN    PROC    FAR
START:
    MOV     AX
,DATAS
    MOV     DS
,AX
    MOV        AX
,STACKS
    MOV        SS
,AX
    MOV        SP
,OFFSET    TOP
    MOV        CL
,4
    MOV        SI
,0
    MOV        BX
,N2
LOOP1:
    MOV        CH
,Y[BX-1]
    CALL    MMUL
    INC        SI
    DEC        BX
    JNZ        LOOP1
    MOV        SI
,DX
    MOV        BX
,0
ASC:
    MOV        AL
,Z[SI]
    AND        AL
,0FH
    OR        AL
,30H
    MOV        Q
[BX],AL
    INC        BX
    DEC        SI
    CMP        SI
,0
    JNL        ASC
    MOV        Q
[BX],'$'
DISP:
    MOV        AH
,9
    MOV        DX
,OFFSET    P
    INT        21H
    MOV        AH
,4CH
    INT        21H
    RET
MAIN    ENDP
MMUL    PROC    NEAR        
;两个多位十进制数相乘,并输出结果
    PUSH    SI
    PUSH    BX
    MOV        BX
,N1
LOOP2:
    MOV        AL
,X[BX-1]
    CALL    MULS
    CALL    DOUT
    INC        SI
    DEC        BX
    JNZ        LOOP2
    POP        BX
    POP        SI
    RET
MMUL    ENDP
MULS    PROC    NEAR
    PUSH    BX
    MOV        BL
,CH
    AND        AL
,0FH
    AND        BL
,0FH
    MUL        BL
    AAM
    POP        BX
    RET
MULS    ENDP
DOUT    PROC    NEAR
    PUSH    SI
NEXT:
    ADD        AL
,Z[SI]
    AAA
    MOV        Z
[SI],AL
    MOV        AL
,AH
    XOR        AH
,AH
    INC        SI
    MOV        DX
,SI
    CMP        AL
,0
    JNZ        NEXT
    POP        SI
    RET
DOUT    ENDP

CODES ENDS
    END START
Posted on 2010-11-02 16:02 JimmyZhang 阅读(624) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理