编写将一个包含有20个数据的数组M分成两个数组,正整数数组P和负数数组N ,分别把这两个数组中的数据的个数显示出来

DATAS SEGMENT;此处输入数据段代码 
MARRAY  DW  1,2,3,4,5,-6,-7,-8,-9,-10,-11,12,13,14,-15,-16,-17,18,'$'
PARRAY  DW 10 DUP(?)
NARRAY  DW 10 DUP(?)
Z DB 10      
DATAS ENDS

STACKS SEGMENT ;此处输入堆栈段代码
 DW 100 DUP(?)
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
   		 MOV AX,DATAS
 		 MOV DS,AX ;此处输入代码段代码
   		 MOV DI,0  ;统计正数个数
    	 MOV SI,0  ;统计负数个数
    	 LEA BX,MARRAY
    	 MOV DX,[BX]
    	 MOV AX,0
    	 MOV CX,0
BIJIAO:  CMP DX,0
         JG  PARRAY1  ;大于跳转
         JL  NARRAY1  ;小于跳转
PARRAY1:
        MOV AX,[BX]
        MOV PARRAY[BX],AX
        INC DI
        ADD BX,2
        MOV DX,[BX]
        CMP DX,24H ;与结束符$比较,看是否结束
        JNZ BIJIAO ;不相等跳转到比较处
        JZ SHUCHU  ;相等时跳到输出位置
        
NARRAY1:
        MOV AX,[BX]
        MOV NARRAY[BX],AX
        INC SI
        ADD BX,2
        MOV DX,[BX]
        CMP DX,24H ;与结束符$比较,看是否结束
        JNZ BIJIAO ;不相等跳转到比较处
        JZ SHUCHU  ;相等时跳到输出位置
            
SHUCHU :MOV AX,0   ;输出正数的个数
        MOV AX,DI 
        DIV Z
        PUSH AX 
        CMP AL,0
        JZ AA
        ADD AL,30H
        MOV DL,AL
        MOV AH,02H
        INT 21H
     AA:POP AX
        MOV AL,0
        ADD AH,30H
        MOV DL,AH
        MOV AH,02H
        INT 21H
        
        MOV AX,0  ;输出空格
        ADD AL,20H
        MOV DL,AL
        MOV AH,02H
        INT 21H
        
        MOV AX,0  ;输出负数的个数 
        MOV AX,SI
	    DIV Z
        PUSH AX 
        CMP AL,0
        JZ BB
        ADD AL,30H
        MOV DL,AL
        MOV AH,02H
        INT 21H
     BB:POP AX
        MOV AL,0
        ADD AH,30H
        MOV DL,AH
        MOV AH,02H
        INT 21H
       
     MOV AH,4CH
     INT 21H
CODES ENDS
    END START

你可能感兴趣的:(汇编语言)