首先第一题,只知道你想实现相加,在不溢出的情况下,来个例子(近)吧:
ABSOLT    PROC
          ADD    AX,BX
          RET
ABSOLT    ENDP
第二题也不难吧:
OUTPUT    MACRO NUM        ;这里建的宏用来输入0-99的十进制数,已经说过了,这里不解释啦
          LOCAL NEXT1
          MOV   AX,NUM
          AAM
          MOV   DX,AX
          MOV   AH,2
          OR    DX,3030H
          XCHG  DH,DL
          CMP   DL,30H
          JZ    NEXT1
          INT   21H
NEXT1:    XCHG  DH,DL
          INT   21H
          ENDM
DSEG    SEGMENT
ARRAY   DW    1,2,-1,3,4,-2,-3,4,5,-6    ;楼主给的数据
P_ARY   DW    10 DUP(?)                  ;因为正数个数不知道情况下,就以最大为界,开辟10个字
N_ARY   DW    10 DUP(?)                  ;同上
NOTE0   DB    0AH,0DH,'P_ARY : $'
NOTE1   DB    0AH,0DH,'N_ARY : $'
DSEG    ENDS
CSEG    SEGMENT
        ASSUME CS:CSEG,DS:DSEG
MAIN:   MOV    AX,DSEG
        MOV    DS,AX
        MOV    BX,0                      ;用于获取数据的地址
        MOV    SI,0                      ;用于正数存放地址的偏移量,也起着计数的作用
        MOV    DI,0                      ;用于负数存放地址的偏移量,也起着计数的作用
LOP:    MOV    AX,[BX]
        TEST   AX,8000H                  ;测试正负
        JZ     STO_P
        MOV    N_ARY[DI],AX              ;存放并计数
        INC    DI
        JMP    NEXT0
STO_P:  MOV    P_ARY[SI],AX
        INC    SI
NEXT0:  INC    BX
        INC    BX
        CMP    BX,20                     ;以字为单位的话,这里就与20比较
        JNZ    LOP
        MOV    AH,9
        LEA    DX,NOTE0
        INT    21H
        OUTPUT SI                        ;调用宏,输出正数个数
        MOV    AH,9
        LEA    DX,NOTE1
        INT    21H
        OUTPUT DI                        ;输出负数个数
        MOV    AX,4C00H
        INT    21H
CSEG    ENDS
        END    MAIN