編寫將一個包含有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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章