编写一个程序,将一个包含有 30 个字数据的数组 M 分成两个数组:奇数数组 ODD 和偶数数组 EVEN, 并把这两个数组中元素的个数以二进制形式显示出来(不能使用 DIV/IDIV 指令)。
程序员文章站
2022-03-10 08:40:48
...
编写一个程序,将一个包含有 30 个字数据的数组 M 分成两个数组:奇数数组 ODD 和偶数数组 EVEN,并把这两个数组中元素的个数以二进制形式显示出来(不能使用 DIV/IDIV 指令)。
DATA SEGMENT
M DW 1,2,3,4,5,6,7,8,9,10,5 DUP(25),5 DUP(13),5 DUP(8),5 DUP(100)
ODD DW 30 DUP(?)
EVER DW 30 DUP(?)
DATA ENDS
STACK SEGMENT STACK
DW 10 DUP(?)
TOP LABEL WORD
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA
MAIN PROC FAR
MOV AX,STACK
MOV SS,AX
LEA SP,TOP
MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV CX,30
MOV DX,0
LEA SI,M
LEA BX,ODD
LEA DI,EVER
CLD
L1:LODSW
TEST AX,1
JZ L2
MOV [BX],AX
ADD BX,2
INC DX ;奇数
JMP L3
L2:STOSW
L3:LOOP L1
MOV BX,30
SUB BX,DX ;偶数
MOV SI,DX ;奇数
MOV CX,16
L4:ROL SI,1
TEST SI,1
JZ L5
MOV DL,31H
MOV AH,2
INT 21H
JMP L6
L5:MOV DL,30H
MOV AH,2
INT 21H
L6:LOOP L4
MOV DL,0DH
MOV AH,2
INT 21H
MOV DL,0AH
MOV AH,2
INT 21H
MOV SI,BX
MOV CX,16
L7:ROL SI,1
TEST SI,1
JZ L8
MOV DL,31H
MOV AH,2
INT 21H
JMP L9
L8:MOV DL,30H
MOV AH,2
INT 21H
L9:LOOP L7
MOV AH,4CH
INT 21
MAIN ENDP
CODE ENDS
END MAIN