www.pudn.com > ASM11.rar > ex3mul.asm


;****************************************************** 
;* 数据段  
;****************************************************** 
    DATA_SEG  SEGMENT   PARA 
;------------------------------------------------------ 
; TODO: 数据的定义及存储器的分配 
;------------------------------------------------------ 
       BEGIN  DB        9 
       INTER  DB        9 
      RESULT  DW        ? 
    DATA_SEG  ENDS 
;****************************************************** 
;* 代码段  
;****************************************************** 
    CODE_SEG  SEGMENT   PARA 
;------------------------------------------------------ 
        MAIN  PROC      FAR 
              ASSUME    CS:CODE_SEG,DS:DATA_SEG 
 
      START: 
 
              MOV       AX,DATA_SEG 
              MOV       DS,AX 
;------------------------------------------------------ 
; TODO: 从这里开始您的代码 
;------------------------------------------------------ 
              MOV       CX,9 
               
         L2:  MOV       BL,BEGIN    ;BL为低位 
              MOV       BH,INTER    ;BH为高位 
               
         L1:  MOV       AL,BH       ;二数相乘,并调整为非压缩型BCD码 
              MUL       BL 
              AAM 
               
              MOV       RESULT,AX 
              MOV       DL,BH 
               
              ADD       DL,30H      ;显示乘数 
              MOV       AH,02H 
              INT       21H 
               
              MOV       DL,2AH      ;显示乘号 
              MOV       AH,02H 
              INT       21H 
               
              MOV       DL,BL       ;显示被乘数 
              ADD       DL,30H 
              MOV       AH,02H 
              INT       21H 
               
              MOV       DL,3DH      ;显示等号 
              MOV       AH,02H 
              INT       21H 
               
              MOV       DX,RESULT   ;一位数时不显示0 
              CMP       DH,0 
              JE        L3 
               
              ADD       DX,3030H    ;显示结果的十位数 
              XCHG      DH,DL 
              MOV       AH,02H 
              INT       21H 
               
              XCHG      DH,DL       ;显示结果的个位数 
              MOV       AH,02H 
              INT       21H 
              JMP       L4 
               
         L3:  ADD       DL,30H      ;显示结果的个位数 
              MOV       AH,02H 
              INT       21H 
               
         L4:  MOV       DL,32       ;显示空格 
              MOV       AH,02H 
              INT       21H 
               
              CMP       BL,01H 
              JZ        L5 
              DEC       BL          ;内部循环,当低位小于高位时跳转 
              CMP       BH,BL       ; 被乘数增1 
              JAE       L1 
 
         L5:  MOV       AL,INTER    ; 被乘数数目多一 
              DEC       AL 
              MOV       INTER,AL 
 
             ; SUB       BEGIN,01H 
           ;   MOV       AL,BEGIN    ; 被乘数数目多一 
            ;  DEC       AL 
             ; MOV       BEGIN,AL 
              DEC       BEGIN 
 
              MOV       DL,0DH      ;换行,回车 
              MOV       AH,02H 
              INT       21H 
              MOV       DL,0AH 
              MOV       AH,02H 
              INT       21H 
 
              LOOP      L2 
                       
              MOV       AX,4C00H 
              INT       21H 
        MAIN  ENDP 
;------------------------------------------------------ 
    CODE_SEG  ENDS 
;****************************************************** 
              END       START       ;程序结束