注册 登录
编程论坛 汇编论坛

求助!求助!求助!

jhtyolg20002 发布于 2007-12-18 20:19, 853 次点击
修改下面的代码,增加以下两个功能
1 回复
#2
jhtyolg200022007-12-18 20:21
求助!求助!求助!
增加以下两个功能
1.能对任意数进行处理而不是仅限两位数。
2.将固定的数组改为动态的数组进行处理,提高通用性。

        DATA  SEGMENT
     ARRAY_M  DB        2,-5,34,28,10,-9,-56,20,-25,-23,-46,-8,-14,-10,81,82,-97,30,-47,-3

     ARRAY_P  DB        20   DUP(?)
     ARRAY_N  DB        20   DUP(?)
        PLUS  DB        ?
      NEGATV  DB        ?
        MSG0  DB        'ARRAY_M:2,-5,34,28,10,-9,-56,20,-25,-23,-46,-8,-14,-10,81,82,-97,30,-47,-3',0DH,0AH,'$'
        MSG1  DB        'ARRAY_P:','$'
        MSG2  DB        'ARRAY_N:','$'
        DATA  ENDS
        CODE  SEGMENT
              ASSUME    CS:CODE,DS:DATA
        MAIN  PROC      FAR
      START:
              MOV       AX,DATA
              MOV       DS,AX
              LEA       SI,ARRAY_M
              LEA       DI,ARRAY_P
              LEA       BX,ARRAY_N
              MOV       CX,20
       LOP1:  MOV       AX,0
              MOV       AL,[SI]
              TEST      AL,80H
              JZ        LOP2
              MOV       [BX],AL
              INC       NEGATV
              INC       BX
              JMP       AGAIN0
       LOP2:  MOV       [DI],AL
              INC       PLUS
              INC       DI
     AGAIN0:  INC       SI
              LOOP      LOP1
               
              MOV       CL,PLUS
              CMP       CL,0
              JE        LP1
              
              MOV       AH,9
              MOV       DX,OFFSET MSG0
              INT       21H
              
              MOV       BX,OFFSET ARRAY_P
              
              MOV       AH,9
              MOV       DX,OFFSET MSG1
              INT       21H
     AGAIN1:  MOV       DL,10
              MOV       AL,[BX]

              MOV       AH,0
              DIV       DL
              CMP       AL,0
              JE        TO1

              MOV       DH,AH
              ADD       AL,30H
              
              MOV       DL,AL
              MOV       AH,2
              INT       21H

              ADD       DH,30H
              MOV       DL,DH
              MOV       AH,2
              INT       21H

              MOV       DL,','
              MOV       AH,2
              INT       21H
              JMP       TO2
        TO1:  ADD       AH,30H
              MOV       DL,AH
              MOV       AH,2
              INT       21H

              MOV       DL,','
              MOV       AH,2
              INT       21H
        TO2:  INC       BX
              DEC       CL
              JNE       AGAIN1
              CALL      ENTER
        LP1:  MOV       CL,NEGATV
              CMP       CL,0
              JE        LP2

              MOV       BX,OFFSET ARRAY_N
              MOV       AH,9
              MOV       DX,OFFSET MSG2
              INT       21H
     AGAIN2:  MOV       DL,'-'
              MOV       AH,2
              INT       21H

              MOV       DL,10
              MOV       AL,[BX]
              MOV       AH,0FFH
              NOT       AX
              ADD       AX,1
              DIV       DL
              CMP       AL,0
              JE        TO3
              
              MOV       DH,AH
              ADD       AL,30H
              MOV       DL,AL
              MOV       AH,2
              INT       21H

              ADD       DH,30H
              MOV       DL,DH
              MOV       AH,2
              INT       21H

              MOV       DL,','
              MOV       AH,2
              INT       21H
              JMP       TO4
        TO3:  ADD       AH,30H
              MOV       DL,AH
              MOV       AH,2
              INT       21H

              MOV       DL,','
              MOV       AH,2
              INT       21H
        TO4:  INC       BX
              DEC       CL
              JNE       AGAIN2
        LP2:  MOV       AH,4CH
              INT       21H
              
              ENTER     PROC  NEAR
              MOV       DL,13
              MOV       AH,2
              INT       21H

              MOV       DL,10
              MOV       AH,2
              INT       21H
              RET
              ENTER     ENDP

        MAIN  ENDP
              
        CODE  ENDS
              END       START
1