Assembly language on the computer 2.3
Write a program to divide an array M containing 20 data into two arrays: positive array P and negative array N, and display the two arrays respectively.
code
DATAS SEGMENT ;此处输入数据段代码
MARRAY DW 1,2,3,4,5,-6,-7,-8,-9,-1,-1,2,3,4,-5,-6,-7,8,9,2,'$'
PARRAY DW 20 DUP(?)
NARRAY DW 20 DUP(?)
str1 DB 'Positive numbers:$'
str2 DB 'Negative numbers:$'
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 ;统计负数个数
MOV BP,0
AGAIN:
CMP BP,40
JZ DISP
LEA BX,MARRAY[BP]
ADD BP,2
MOV DX,[BX]
BIJIAO: CMP DX,0
JG PARRAY1 ;大于跳转
JL NARRAY1 ;小于跳转
PARRAY1:
MOV AX,[BX]
MOV PARRAY[DI],AX
ADD DI,2
JMP AGAIN
NARRAY1:
MOV AX,[BX]
MOV NARRAY[SI],AX
ADD SI,2
JMP AGAIN
DISP:
MOV BP,0
MOV AH, 9 ;提示1
LEA DX, str1
INT 21H
POSA1:
LEA BX,PARRAY[BP]
MOV AX,[BX]
ADD BP,2
ADD AX,30H
MOV DL,AL
MOV AH ,06H;输出正数
INT 21H
mov ah,2;输出空格
mov dl,32
int 21h
CMP BP,DI
JNE POSA1
MOV AH,2 ;换行
MOV DX, 0AH
INT 21H
MOV AH,9 ;提示2
LEA DX, str2
INT 21H
MOV BP,0
NEG1:
MOV AH,2;输出负号
MOV DL,2DH
INT 21H
LEA BX,NARRAY[BP]
MOV AX,[BX]
ADD BP,2
NEG AX
ADD AX,30H
MOV DX,AX
MOV AH ,06H;输出数字
INT 21H
mov ah,2;输出空格
mov dl,32
int 21h
CMP BP,SI
JNE NEG1
MOV AH,4CH
INT 21H
CODES ENDS
END START